From a86f324670041460b1f3c81904a2e89974ab616a Mon Sep 17 00:00:00 2001 From: "elastic-renovate-prod[bot]" <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> Date: Sun, 29 Sep 2024 17:10:20 -0500 Subject: [PATCH 01/60] Update dependency @openfeature/web-sdk to ^1.2.4 (main) (#194364) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 99f15d2d81642..cad364998e3c8 100644 --- a/package.json +++ b/package.json @@ -1011,7 +1011,7 @@ "@openfeature/core": "^1.4.0", "@openfeature/launchdarkly-client-provider": "^0.3.0", "@openfeature/server-sdk": "^1.15.1", - "@openfeature/web-sdk": "^1.2.3", + "@openfeature/web-sdk": "^1.2.4", "@opentelemetry/api": "^1.1.0", "@opentelemetry/api-metrics": "^0.31.0", "@opentelemetry/exporter-metrics-otlp-grpc": "^0.34.0", diff --git a/yarn.lock b/yarn.lock index 69ddc723a2155..a3d54dbd3f1bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8037,10 +8037,10 @@ resolved "https://registry.yarnpkg.com/@openfeature/server-sdk/-/server-sdk-1.15.1.tgz#7a20ca06297f947f6060852e072b0bc24e03f126" integrity sha512-PaJETh/fr4N8BVQlgb5vBH8VdN25VhxaVvL0s4Wv3kAUC+MXi7B9hEVM1GUlI9CrjxRExlbAAYtLY7kzjE7SXg== -"@openfeature/web-sdk@^1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@openfeature/web-sdk/-/web-sdk-1.2.3.tgz#5a248e8ae53c22397cde5e5324e69a833bf8fb21" - integrity sha512-vsqEvkY5Z78C5W1UW57uMN+a70UgaObzQ1QNIp0lV77aCQnGJi7FHeYmyrfLm8XjtJbj/5PAaclAyqudf+xgaA== +"@openfeature/web-sdk@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@openfeature/web-sdk/-/web-sdk-1.2.4.tgz#5b3e1805f81fd0e50bbe10776292ba24a2239ac4" + integrity sha512-v3RYqMIq+/UXH7eVqfTfp7iWPJ4/Ck5a3RwxAEhypocq5IxUDyEUxXvVU82bkVkbNEKvXYLUWlxT+IuHvh8Eng== "@opentelemetry/api-metrics@0.31.0", "@opentelemetry/api-metrics@^0.31.0": version "0.31.0" From 0ac69658bff4e02b8c477673e091b4e86bddf7b5 Mon Sep 17 00:00:00 2001 From: Davis McPhee Date: Mon, 30 Sep 2024 00:25:26 -0300 Subject: [PATCH 02/60] [Discover] [Unified Doc Viewer] Fix doc viewer not receiving focus on open (#191039) ## Summary This PR fixes an issue where the new resizable doc viewer push flyout was not receiving focus on open, resulting in the flyout having to be manually focused in before users can navigate between docs using the arrow keys. It also re-adds support for closing the flyout when pressing the escape key, improves overall focus management, ensures the proper a11y attributes are used when the push flyout is shown, and introduces a new set of functional tests for doc viewer keyboard navigation and a11y. Fixes #190946. ### 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) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [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) ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../doc_viewer_flyout/doc_viewer_flyout.tsx | 21 +- .../doc_viewer_flyout/use_flyout_a11y.tsx | 54 +++++ .../group2_data_grid1/_data_grid_doc_table.ts | 4 +- .../apps/discover/group3/_doc_viewer.ts | 209 ++++++++++++++++++ test/functional/services/data_grid.ts | 6 +- 5 files changed, 284 insertions(+), 10 deletions(-) create mode 100644 src/plugins/unified_doc_viewer/public/components/doc_viewer_flyout/use_flyout_a11y.tsx diff --git a/src/plugins/unified_doc_viewer/public/components/doc_viewer_flyout/doc_viewer_flyout.tsx b/src/plugins/unified_doc_viewer/public/components/doc_viewer_flyout/doc_viewer_flyout.tsx index 540c04a206c61..be0ab585b15a8 100644 --- a/src/plugins/unified_doc_viewer/public/components/doc_viewer_flyout/doc_viewer_flyout.tsx +++ b/src/plugins/unified_doc_viewer/public/components/doc_viewer_flyout/doc_viewer_flyout.tsx @@ -8,7 +8,6 @@ */ import React, { useMemo, useCallback, type ComponentType } from 'react'; -import { get } from 'lodash'; import { i18n } from '@kbn/i18n'; import { css } from '@emotion/react'; import type { DataView } from '@kbn/data-views-plugin/public'; @@ -34,6 +33,7 @@ import useLocalStorage from 'react-use/lib/useLocalStorage'; import type { ToastsStart } from '@kbn/core-notifications-browser'; import type { DocViewFilterFn, DocViewRenderProps } from '@kbn/unified-doc-viewer/types'; import { UnifiedDocViewer } from '../lazy_doc_viewer'; +import { useFlyoutA11y } from './use_flyout_a11y'; export interface UnifiedDocViewerFlyoutProps { 'data-test-subj'?: string; @@ -71,6 +71,7 @@ function getIndexByDocId(hits: DataTableRecord[], id: string) { } export const FLYOUT_WIDTH_KEY = 'unifiedDocViewer:flyoutWidth'; + /** * Flyout displaying an expanded row details */ @@ -129,24 +130,29 @@ export function UnifiedDocViewerFlyout({ const onKeyDown = useCallback( (ev: React.KeyboardEvent) => { - const nodeClasses = get(ev, 'target.className', ''); - if (typeof nodeClasses === 'string' && nodeClasses.includes('euiDataGrid')) { + if (ev.target instanceof HTMLElement && ev.target.closest('.euiDataGrid__content')) { // ignore events triggered from the data grid return; } - const nodeName = get(ev, 'target.nodeName', null); - if (typeof nodeName === 'string' && nodeName.toLowerCase() === 'input') { + if (ev.key === keys.ESCAPE) { + ev.preventDefault(); + ev.stopPropagation(); + onClose(); + } + + if (ev.target instanceof HTMLInputElement) { // ignore events triggered from the search input return; } + if (ev.key === keys.ARROW_LEFT || ev.key === keys.ARROW_RIGHT) { ev.preventDefault(); ev.stopPropagation(); setPage(activePage + (ev.key === keys.ARROW_RIGHT ? 1 : -1)); } }, - [activePage, setPage] + [activePage, onClose, setPage] ); const addColumn = useCallback( @@ -231,6 +237,7 @@ export function UnifiedDocViewerFlyout({ defaultMessage: 'Document', }); const currentFlyoutTitle = flyoutTitle ?? defaultFlyoutTitle; + const { a11yProps, screenReaderDescription } = useFlyoutA11y({ isXlScreen }); return ( @@ -250,7 +257,9 @@ export function UnifiedDocViewerFlyout({ maxWidth: `${isXlScreen ? `calc(100vw - ${DEFAULT_WIDTH}px)` : '90vw'} !important`, }} paddingSize="m" + {...a11yProps} > + {screenReaderDescription} { + const descriptionId = useGeneratedHtmlId(); + const [triggerEl] = useState(document.activeElement); + const [flyoutEl, setFlyoutEl] = useState(); + + // Auto-focus push flyout on open or when switching to XL screen + useEffect(() => { + if (isXlScreen && flyoutEl && document.contains(flyoutEl)) { + // Wait a tick before focusing or focus will be stolen by the trigger element when + // switching from an overlay flyout to a push flyout (due to EUI focus lock) + setTimeout(() => flyoutEl.focus()); + } + }, [flyoutEl, isXlScreen]); + + // Return focus to the trigger element when the flyout is closed + useUnmount(() => { + if (triggerEl instanceof HTMLElement && document.contains(triggerEl)) { + triggerEl.focus(); + } + }); + + return { + a11yProps: { + ref: setFlyoutEl, + role: isXlScreen ? 'dialog' : undefined, + tabindex: isXlScreen ? 0 : undefined, + 'aria-describedby': isXlScreen ? descriptionId : undefined, + 'data-no-focus-lock': isXlScreen || undefined, + }, + screenReaderDescription: isXlScreen && ( + +

+ {i18n.translate('unifiedDocViewer.flyout.screenReaderDescription', { + defaultMessage: 'You are in a non-modal dialog. To close the dialog, press Escape.', + })} +

+
+ ), + }; +}; diff --git a/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_table.ts b/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_table.ts index c2ae5c30bf86f..dc3cfb8c23bf9 100644 --- a/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_table.ts +++ b/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_table.ts @@ -179,9 +179,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should allow paginating docs in the flyout by clicking in the doc table', async function () { await retry.try(async function () { await dataGrid.clickRowToggle({ rowIndex: rowToInspect - 1 }); - await testSubjects.exists(`docViewerFlyoutNavigationPage0`); + await testSubjects.existOrFail('docViewerFlyoutNavigationPage-0'); await dataGrid.clickRowToggle({ rowIndex: rowToInspect }); - await testSubjects.exists(`docViewerFlyoutNavigationPage1`); + await testSubjects.existOrFail('docViewerFlyoutNavigationPage-1'); await dataGrid.closeFlyout(); }); }); diff --git a/test/functional/apps/discover/group3/_doc_viewer.ts b/test/functional/apps/discover/group3/_doc_viewer.ts index bc71c82289071..542cdab9543ec 100644 --- a/test/functional/apps/discover/group3/_doc_viewer.ts +++ b/test/functional/apps/discover/group3/_doc_viewer.ts @@ -431,5 +431,214 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await dataGrid.isFieldPinnedInFlyout('@message')).to.be(false); }); }); + + describe('flyout', () => { + let originalScreenSize = { width: 0, height: 0 }; + + const reduceScreenWidth = async () => { + await browser.setWindowSize(800, originalScreenSize.height); + }; + + const restoreScreenWidth = async () => { + await browser.setWindowSize(originalScreenSize.width, originalScreenSize.height); + }; + + before(async () => { + originalScreenSize = await browser.getWindowSize(); + }); + + beforeEach(async () => { + // open the flyout once initially to ensure table is the default tab + await dataGrid.clickRowToggle(); + await discover.isShowingDocViewer(); + await dataGrid.closeFlyout(); + }); + + afterEach(async () => { + await restoreScreenWidth(); + }); + + describe('keyboard navigation', () => { + it('should navigate between documents with arrow keys', async () => { + await dataGrid.clickRowToggle({ defaultTabId: false }); + await discover.isShowingDocViewer(); + await testSubjects.existOrFail(`docViewerFlyoutNavigationPage-0`); + await browser.pressKeys(browser.keys.ARROW_RIGHT); + await testSubjects.existOrFail(`docViewerFlyoutNavigationPage-1`); + await browser.pressKeys(browser.keys.ARROW_RIGHT); + await testSubjects.existOrFail(`docViewerFlyoutNavigationPage-2`); + await browser.pressKeys(browser.keys.ARROW_LEFT); + await testSubjects.existOrFail(`docViewerFlyoutNavigationPage-1`); + await browser.pressKeys(browser.keys.ARROW_LEFT); + await testSubjects.existOrFail(`docViewerFlyoutNavigationPage-0`); + }); + + it('should not navigate between documents with arrow keys when the search input is focused', async () => { + await dataGrid.clickRowToggle({ defaultTabId: false }); + await discover.isShowingDocViewer(); + await testSubjects.existOrFail(`docViewerFlyoutNavigationPage-0`); + await browser.pressKeys(browser.keys.ARROW_RIGHT); + await testSubjects.existOrFail(`docViewerFlyoutNavigationPage-1`); + await testSubjects.click('unifiedDocViewerFieldsSearchInput'); + await browser.pressKeys(browser.keys.ARROW_RIGHT); + await testSubjects.existOrFail(`docViewerFlyoutNavigationPage-1`); + await browser.pressKeys(browser.keys.TAB); + await browser.pressKeys(browser.keys.ARROW_RIGHT); + await testSubjects.existOrFail(`docViewerFlyoutNavigationPage-2`); + }); + + it('should not navigate between documents with arrow keys when the data grid is focused', async () => { + await dataGrid.clickRowToggle({ defaultTabId: false }); + await discover.isShowingDocViewer(); + await testSubjects.existOrFail(`docViewerFlyoutNavigationPage-0`); + await browser.pressKeys(browser.keys.ARROW_RIGHT); + await testSubjects.existOrFail(`docViewerFlyoutNavigationPage-1`); + await testSubjects.click('dataGridHeaderCell-name'); + await browser.pressKeys(browser.keys.ARROW_RIGHT); + await testSubjects.existOrFail(`docViewerFlyoutNavigationPage-1`); + await browser.pressKeys(browser.keys.TAB); + await browser.pressKeys(browser.keys.ARROW_RIGHT); + await testSubjects.existOrFail(`docViewerFlyoutNavigationPage-2`); + }); + + it('should close the flyout with the escape key', async () => { + await dataGrid.clickRowToggle({ defaultTabId: false }); + expect(await discover.isShowingDocViewer()).to.be(true); + await browser.pressKeys(browser.keys.ESCAPE); + expect(await discover.isShowingDocViewer()).to.be(false); + }); + + it('should close the flyout with the escape key when the search input is focused', async () => { + await dataGrid.clickRowToggle({ defaultTabId: false }); + expect(await discover.isShowingDocViewer()).to.be(true); + await testSubjects.click('unifiedDocViewerFieldsSearchInput'); + await browser.pressKeys(browser.keys.ESCAPE); + expect(await discover.isShowingDocViewer()).to.be(false); + }); + + it('should not close the flyout with the escape key when the data grid is focused', async () => { + await dataGrid.clickRowToggle({ defaultTabId: false }); + expect(await discover.isShowingDocViewer()).to.be(true); + await testSubjects.click('dataGridHeaderCell-name'); + await browser.pressKeys(browser.keys.ESCAPE); + expect(await discover.isShowingDocViewer()).to.be(true); + await browser.pressKeys(browser.keys.TAB); + await browser.pressKeys(browser.keys.ESCAPE); + expect(await discover.isShowingDocViewer()).to.be(false); + }); + }); + + describe('accessibility', () => { + it('should focus the flyout on open, and retain focus when resizing between push and overlay flyouts', async () => { + // push -> overlay -> push + await dataGrid.clickRowToggle({ defaultTabId: false }); + await discover.isShowingDocViewer(); + let activeElement = await find.activeElement(); + expect(await activeElement.getAttribute('data-test-subj')).to.be('docViewerFlyout'); + await reduceScreenWidth(); + activeElement = await find.activeElement(); + expect(await activeElement.getAttribute('data-test-subj')).to.be('docViewerFlyout'); + await restoreScreenWidth(); + activeElement = await find.activeElement(); + expect(await activeElement.getAttribute('data-test-subj')).to.be('docViewerFlyout'); + // overlay -> push -> overlay + await browser.pressKeys(browser.keys.ESCAPE); + await reduceScreenWidth(); + await dataGrid.clickRowToggle({ defaultTabId: false }); + await discover.isShowingDocViewer(); + activeElement = await find.activeElement(); + expect(await activeElement.getAttribute('data-test-subj')).to.be('docViewerFlyout'); + await restoreScreenWidth(); + activeElement = await find.activeElement(); + expect(await activeElement.getAttribute('data-test-subj')).to.be('docViewerFlyout'); + await reduceScreenWidth(); + activeElement = await find.activeElement(); + expect(await activeElement.getAttribute('data-test-subj')).to.be('docViewerFlyout'); + }); + + it('should return focus to the trigger element when the flyout is closed', async () => { + // push + await dataGrid.clickRowToggle({ defaultTabId: false }); + await discover.isShowingDocViewer(); + await browser.pressKeys(browser.keys.ESCAPE); + let activeElement = await find.activeElement(); + expect(await activeElement.getAttribute('data-test-subj')).to.be( + 'docTableExpandToggleColumn' + ); + // push -> overlay + await dataGrid.clickRowToggle({ defaultTabId: false }); + await discover.isShowingDocViewer(); + await reduceScreenWidth(); + await browser.pressKeys(browser.keys.ESCAPE); + activeElement = await find.activeElement(); + expect(await activeElement.getAttribute('data-test-subj')).to.be( + 'docTableExpandToggleColumn' + ); + // overlay + await dataGrid.clickRowToggle({ defaultTabId: false }); + await discover.isShowingDocViewer(); + await browser.pressKeys(browser.keys.ESCAPE); + activeElement = await find.activeElement(); + expect(await activeElement.getAttribute('data-test-subj')).to.be( + 'docTableExpandToggleColumn' + ); + // overlay -> push + await dataGrid.clickRowToggle({ defaultTabId: false }); + await discover.isShowingDocViewer(); + await restoreScreenWidth(); + await browser.pressKeys(browser.keys.ESCAPE); + activeElement = await find.activeElement(); + expect(await activeElement.getAttribute('data-test-subj')).to.be( + 'docTableExpandToggleColumn' + ); + }); + + it('should show custom screen reader description push flyout is active', async () => { + await dataGrid.clickRowToggle({ defaultTabId: false }); + await discover.isShowingDocViewer(); + await testSubjects.existOrFail('unifiedDocViewerScreenReaderDescription', { + allowHidden: true, + }); + }); + + it('should not show custom screen reader description when overlay flyout active', async () => { + await dataGrid.clickRowToggle({ defaultTabId: false }); + await discover.isShowingDocViewer(); + await reduceScreenWidth(); + expect( + await testSubjects.exists('unifiedDocViewerScreenReaderDescription', { + allowHidden: true, + }) + ).to.be(false); + }); + + it('should use expected a11y attributes', async () => { + // push flyout + await dataGrid.clickRowToggle({ defaultTabId: false }); + await discover.isShowingDocViewer(); + let role = await testSubjects.getAttribute('docViewerFlyout', 'role'); + let tabindex = await testSubjects.getAttribute('docViewerFlyout', 'tabindex'); + let describedBy = await testSubjects.getAttribute('docViewerFlyout', 'aria-describedby'); + let noFocusLock = await testSubjects.getAttribute( + 'docViewerFlyout', + 'data-no-focus-lock' + ); + expect(role).to.be('dialog'); + expect(tabindex).to.be('0'); + expect(await find.existsByCssSelector(`#${describedBy}`)).to.be(true); + expect(noFocusLock).to.be('true'); + // overlay flyout + await reduceScreenWidth(); + role = await testSubjects.getAttribute('docViewerFlyout', 'role'); + tabindex = await testSubjects.getAttribute('docViewerFlyout', 'tabindex'); + describedBy = await testSubjects.getAttribute('docViewerFlyout', 'aria-describedby'); + noFocusLock = await testSubjects.getAttribute('docViewerFlyout', 'data-no-focus-lock'); + expect(role).to.be('dialog'); + expect(tabindex).to.be('0'); + expect(await find.existsByCssSelector(`#${describedBy}`)).to.be(true); + expect(noFocusLock).to.be(null); + }); + }); + }); }); } diff --git a/test/functional/services/data_grid.ts b/test/functional/services/data_grid.ts index efdaeb49933f2..903e38427181b 100644 --- a/test/functional/services/data_grid.ts +++ b/test/functional/services/data_grid.ts @@ -357,7 +357,7 @@ export class DataGridService extends FtrService { } public async clickRowToggle( - { defaultTabId, ...options }: SelectOptions & { defaultTabId?: string } = { + { defaultTabId, ...options }: SelectOptions & { defaultTabId?: string | false } = { isAnchorRow: false, rowIndex: 0, } @@ -389,7 +389,9 @@ export class DataGridService extends FtrService { throw new Error('Unable to find row toggle element'); } - await this.clickDocViewerTab(defaultTabId ?? 'doc_view_table'); + if (defaultTabId !== false) { + await this.clickDocViewerTab(defaultTabId ?? 'doc_view_table'); + } } public async isShowingDocViewer() { From 2bb992e173daee83b013ce40ce8e4ae049c629f2 Mon Sep 17 00:00:00 2001 From: Linghao Su Date: Mon, 30 Sep 2024 11:30:32 +0800 Subject: [PATCH 03/60] [Field_Format][Numeral] Convert `null` values to `'-'` (#193722) ## Summary Fixes https://github.com/elastic/kibana/issues/191629 When export to csv, converts `null` to `'-'` instead of the `'null'` string. image --------- Co-authored-by: Elastic Machine Co-authored-by: Davis McPhee --- .../common/converters/number.test.ts | 6 +++ .../common/converters/numeral.ts | 1 + .../functional/apps/lens/group6/metric.ts | 50 +++++++++---------- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/src/plugins/field_formats/common/converters/number.test.ts b/src/plugins/field_formats/common/converters/number.test.ts index 9a70a1c2d996e..3c447b86c35b6 100644 --- a/src/plugins/field_formats/common/converters/number.test.ts +++ b/src/plugins/field_formats/common/converters/number.test.ts @@ -44,4 +44,10 @@ describe('NumberFormat', () => { }" `); }); + + test('null input', () => { + const formatter = new NumberFormat({}, getConfig); + expect(formatter.convert(null)).toMatchInlineSnapshot(`"-"`); + expect(formatter.convert(null, 'html')).toMatchInlineSnapshot(`" - "`); + }); }); diff --git a/src/plugins/field_formats/common/converters/numeral.ts b/src/plugins/field_formats/common/converters/numeral.ts index bf3780d002d6d..100898fd558b6 100644 --- a/src/plugins/field_formats/common/converters/numeral.ts +++ b/src/plugins/field_formats/common/converters/numeral.ts @@ -37,6 +37,7 @@ export abstract class NumeralFormat extends FieldFormat { if (val === -Infinity) return '-∞'; if (val === +Infinity) return '+∞'; if (typeof val === 'object') { + if (val === null) return '-'; return JSON.stringify(val); } else if (typeof val !== 'number') { val = parseFloat(val); diff --git a/x-pack/test/functional/apps/lens/group6/metric.ts b/x-pack/test/functional/apps/lens/group6/metric.ts index 7415dd80d5999..fcf8cd6f7e557 100644 --- a/x-pack/test/functional/apps/lens/group6/metric.ts +++ b/x-pack/test/functional/apps/lens/group6/metric.ts @@ -16,12 +16,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const inspector = getService('inspector'); const inspectorTrendlineData = [ - ['2015-09-19 06:00', 'null'], - ['2015-09-19 09:00', 'null'], - ['2015-09-19 12:00', 'null'], - ['2015-09-19 15:00', 'null'], - ['2015-09-19 18:00', 'null'], - ['2015-09-19 21:00', 'null'], + ['2015-09-19 06:00', '-'], + ['2015-09-19 09:00', '-'], + ['2015-09-19 12:00', '-'], + ['2015-09-19 15:00', '-'], + ['2015-09-19 18:00', '-'], + ['2015-09-19 21:00', '-'], ['2015-09-20 00:00', '6,011.351'], ['2015-09-20 03:00', '5,849.901'], ['2015-09-20 06:00', '5,722.622'], @@ -39,26 +39,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]; const inspectorExpectedTrenlineDataWithBreakdown = [ - ['97.220.3.248', '2015-09-19 06:00', 'null'], - ['97.220.3.248', '2015-09-19 09:00', 'null'], - ['97.220.3.248', '2015-09-19 12:00', 'null'], - ['97.220.3.248', '2015-09-19 15:00', 'null'], - ['97.220.3.248', '2015-09-19 18:00', 'null'], - ['97.220.3.248', '2015-09-19 21:00', 'null'], - ['97.220.3.248', '2015-09-20 00:00', 'null'], - ['97.220.3.248', '2015-09-20 03:00', 'null'], - ['97.220.3.248', '2015-09-20 06:00', 'null'], - ['97.220.3.248', '2015-09-20 09:00', 'null'], - ['97.220.3.248', '2015-09-20 12:00', 'null'], - ['97.220.3.248', '2015-09-20 15:00', 'null'], - ['97.220.3.248', '2015-09-20 18:00', 'null'], - ['97.220.3.248', '2015-09-20 21:00', 'null'], - ['97.220.3.248', '2015-09-21 00:00', 'null'], - ['97.220.3.248', '2015-09-21 03:00', 'null'], - ['97.220.3.248', '2015-09-21 06:00', 'null'], + ['97.220.3.248', '2015-09-19 06:00', '-'], + ['97.220.3.248', '2015-09-19 09:00', '-'], + ['97.220.3.248', '2015-09-19 12:00', '-'], + ['97.220.3.248', '2015-09-19 15:00', '-'], + ['97.220.3.248', '2015-09-19 18:00', '-'], + ['97.220.3.248', '2015-09-19 21:00', '-'], + ['97.220.3.248', '2015-09-20 00:00', '-'], + ['97.220.3.248', '2015-09-20 03:00', '-'], + ['97.220.3.248', '2015-09-20 06:00', '-'], + ['97.220.3.248', '2015-09-20 09:00', '-'], + ['97.220.3.248', '2015-09-20 12:00', '-'], + ['97.220.3.248', '2015-09-20 15:00', '-'], + ['97.220.3.248', '2015-09-20 18:00', '-'], + ['97.220.3.248', '2015-09-20 21:00', '-'], + ['97.220.3.248', '2015-09-21 00:00', '-'], + ['97.220.3.248', '2015-09-21 03:00', '-'], + ['97.220.3.248', '2015-09-21 06:00', '-'], ['97.220.3.248', '2015-09-21 09:00', '19,755'], - ['97.220.3.248', '2015-09-21 12:00', 'null'], - ['97.220.3.248', '2015-09-21 15:00', 'null'], + ['97.220.3.248', '2015-09-21 12:00', '-'], + ['97.220.3.248', '2015-09-21 15:00', '-'], ]; const clickMetric = async (title: string) => { From 1a39b1324baaae620ca01cd71e327d67b32334d5 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Mon, 30 Sep 2024 15:02:07 +1000 Subject: [PATCH 04/60] [api-docs] 2024-09-30 Daily api_docs build (#194372) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/846 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_quality.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_usage.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/entities_data_access.mdx | 2 +- api_docs/entity_manager.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/inference.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/inventory.mdx | 2 +- api_docs/investigate.mdx | 2 +- api_docs/investigate_app.mdx | 2 +- api_docs/kbn_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 +- api_docs/kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_comparators.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_types.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- api_docs/kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cbor.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_cloud_security_posture.mdx | 2 +- api_docs/kbn_cloud_security_posture_common.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- api_docs/kbn_content_management_content_editor.mdx | 2 +- api_docs/kbn_content_management_content_insights_public.mdx | 2 +- api_docs/kbn_content_management_content_insights_server.mdx | 2 +- api_docs/kbn_content_management_favorites_public.mdx | 2 +- api_docs/kbn_content_management_favorites_server.mdx | 2 +- api_docs/kbn_content_management_tabbed_table_list_view.mdx | 2 +- api_docs/kbn_content_management_table_list_view.mdx | 2 +- api_docs/kbn_content_management_table_list_view_common.mdx | 2 +- api_docs/kbn_content_management_table_list_view_table.mdx | 2 +- api_docs/kbn_content_management_user_profiles.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- api_docs/kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- api_docs/kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- api_docs/kbn_core_application_browser_internal.mdx | 2 +- api_docs/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 +- api_docs/kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- api_docs/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 +- api_docs/kbn_core_custom_branding_browser_internal.mdx | 2 +- api_docs/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 +- api_docs/kbn_core_custom_branding_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- api_docs/kbn_core_deprecations_browser_internal.mdx | 2 +- api_docs/kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- api_docs/kbn_core_deprecations_server_internal.mdx | 2 +- api_docs/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 +- api_docs/kbn_core_elasticsearch_client_server_internal.mdx | 2 +- api_docs/kbn_core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- api_docs/kbn_core_elasticsearch_server_internal.mdx | 2 +- api_docs/kbn_core_elasticsearch_server_mocks.mdx | 2 +- api_docs/kbn_core_environment_server_internal.mdx | 2 +- api_docs/kbn_core_environment_server_mocks.mdx | 2 +- api_docs/kbn_core_execution_context_browser.mdx | 2 +- api_docs/kbn_core_execution_context_browser_internal.mdx | 2 +- api_docs/kbn_core_execution_context_browser_mocks.mdx | 2 +- api_docs/kbn_core_execution_context_common.mdx | 2 +- api_docs/kbn_core_execution_context_server.mdx | 2 +- api_docs/kbn_core_execution_context_server_internal.mdx | 2 +- api_docs/kbn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_browser.mdx | 2 +- api_docs/kbn_core_feature_flags_browser_internal.mdx | 2 +- api_docs/kbn_core_feature_flags_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_server.mdx | 2 +- api_docs/kbn_core_feature_flags_server_internal.mdx | 2 +- api_docs/kbn_core_feature_flags_server_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- api_docs/kbn_core_http_context_server_mocks.mdx | 2 +- api_docs/kbn_core_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- api_docs/kbn_core_http_resources_server_internal.mdx | 2 +- api_docs/kbn_core_http_resources_server_mocks.mdx | 2 +- api_docs/kbn_core_http_router_server_internal.mdx | 2 +- api_docs/kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- api_docs/kbn_core_injected_metadata_browser_mocks.mdx | 2 +- api_docs/kbn_core_integrations_browser_internal.mdx | 2 +- api_docs/kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_collectors_server_internal.mdx | 2 +- api_docs/kbn_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 +- api_docs/kbn_core_notifications_browser_internal.mdx | 2 +- api_docs/kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- api_docs/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 +- api_docs/kbn_core_plugins_contracts_browser.mdx | 2 +- api_docs/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 +- api_docs/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 +- api_docs/kbn_core_saved_objects_api_browser.mdx | 2 +- api_docs/kbn_core_saved_objects_api_server.mdx | 2 +- api_docs/kbn_core_saved_objects_api_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_base_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- api_docs/kbn_core_saved_objects_browser_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- .../kbn_core_saved_objects_import_export_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_migration_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- api_docs/kbn_core_saved_objects_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- api_docs/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 +- api_docs/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 +- api_docs/kbn_core_test_helpers_deprecations_getters.mdx | 2 +- api_docs/kbn_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- api_docs/kbn_core_test_helpers_model_versions.mdx | 2 +- api_docs/kbn_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 +- api_docs/kbn_core_ui_settings_browser_internal.mdx | 2 +- api_docs/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 +- api_docs/kbn_core_ui_settings_server_internal.mdx | 2 +- api_docs/kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- api_docs/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 +- api_docs/kbn_core_user_profile_browser_internal.mdx | 2 +- api_docs/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 +- api_docs/kbn_core_user_profile_server_internal.mdx | 2 +- api_docs/kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- api_docs/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_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.mdx | 2 +- api_docs/kbn_esql_editor.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- api_docs/kbn_ftr_common_functional_services.mdx | 2 +- api_docs/kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_grid_layout.mdx | 2 +- api_docs/kbn_grouping.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_management_shared_types.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_investigation_shared.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_json_schemas.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- api_docs/kbn_language_documentation.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- api_docs/kbn_management_settings_application.mdx | 2 +- api_docs/kbn_management_settings_components_field_category.mdx | 2 +- api_docs/kbn_management_settings_components_field_input.mdx | 2 +- api_docs/kbn_management_settings_components_field_row.mdx | 2 +- api_docs/kbn_management_settings_components_form.mdx | 2 +- api_docs/kbn_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- api_docs/kbn_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- api_docs/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 +- api_docs/kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_field_stats_flyout.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_parse_interval.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_ml_validators.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_object_versioning_utils.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- api_docs/kbn_observability_alerting_rule_utils.mdx | 2 +- api_docs/kbn_observability_alerting_test_data.mdx | 2 +- api_docs/kbn_observability_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 +- api_docs/kbn_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_recently_accessed.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- api_docs/kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- api_docs/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_response_ops_feature_flag_service.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_screenshotting_server.mdx | 2 +- api_docs/kbn_search_api_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_api_key_management.mdx | 2 +- api_docs/kbn_security_authorization_core.mdx | 2 +- api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- api_docs/kbn_security_role_management_model.mdx | 2 +- api_docs/kbn_security_solution_common.mdx | 2 +- api_docs/kbn_security_solution_distribution_bar.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- api_docs/kbn_security_solution_storybook_config.mdx | 2 +- api_docs/kbn_security_ui_components.mdx | 2 +- api_docs/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 +- api_docs/kbn_securitysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_alerting_types.mdx | 2 +- api_docs/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 +- api_docs/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_server_route_repository_client.mdx | 2 +- api_docs/kbn_server_route_repository_utils.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- api_docs/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 +- api_docs/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 +- api_docs/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 +- api_docs/kbn_shared_ux_page_analytics_no_data.mdx | 2 +- api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_no_data.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_template.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_config.mdx | 2 +- api_docs/kbn_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 +- api_docs/kbn_shared_ux_prompt_no_data_views.mdx | 2 +- api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_table_persist.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_sse_utils.mdx | 2 +- api_docs/kbn_sse_utils_client.mdx | 2 +- api_docs/kbn_sse_utils_server.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_synthetics_e2e.mdx | 2 +- api_docs/kbn_synthetics_private_location.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- api_docs/observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 2 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_assistant.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_indices.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.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 +- 744 files changed, 744 insertions(+), 744 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 1fededed9a626..c2981462a3dde 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-09-29 +date: 2024-09-30 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 0eea98047cba4..b130cdc81b5e5 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-09-29 +date: 2024-09-30 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 94d16278dd399..c41d32eaa284e 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-09-29 +date: 2024-09-30 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 461fcbce0d2fe..717f17b25b20e 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-09-29 +date: 2024-09-30 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 c506f1a6e52a2..9fed55dc03c91 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 3f63b86f6681b..a797cbec70b55 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index f1acc175f2122..36617a8f09fd4 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index b59350569703b..e9dfb8e37e110 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-09-29 +date: 2024-09-30 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 63f183a083d85..657450f2041d3 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-09-29 +date: 2024-09-30 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 85546f1ffc3a5..5a7bc30cbd009 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-09-29 +date: 2024-09-30 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 37196a85cb22d..08e6d5f26b9e4 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-09-29 +date: 2024-09-30 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 a8c825dd5fad7..0666b497b9358 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-09-29 +date: 2024-09-30 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 2a1d42d3f736f..9a74d456f3d26 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-09-29 +date: 2024-09-30 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 97e8c23daf766..c5f10e95b9087 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-09-29 +date: 2024-09-30 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 2c9fd1880db9c..c7b4fd16b8647 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index e9a56df5146b6..ef011394dc959 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-09-29 +date: 2024-09-30 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 b91626894a916..536404ffec768 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-09-29 +date: 2024-09-30 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 fda2d795dc40e..d041b4004c47e 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-09-29 +date: 2024-09-30 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 6c5a054f7aee6..2579dc78f3b94 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-09-29 +date: 2024-09-30 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 59b41ff17d024..a47d50d6a7d81 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-09-29 +date: 2024-09-30 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 2836931d089b1..ad380cb8469f5 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-09-29 +date: 2024-09-30 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 02c759282caa0..f0373a65fbe71 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-09-29 +date: 2024-09-30 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 f9295f6f64268..3ded579e126c6 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 54525b38dcad1..983bb8427b472 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index fc11314bda074..f5bd254f00b99 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-09-29 +date: 2024-09-30 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 a74b49a029837..b81fd0a1279f1 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index 9b0e8e36af2f5..d9355de82919b 100644 --- a/api_docs/data_usage.mdx +++ b/api_docs/data_usage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataUsage title: "dataUsage" image: https://source.unsplash.com/400x175/?github description: API docs for the dataUsage plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataUsage'] --- import dataUsageObj from './data_usage.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 75851bc897ed7..a7aad8fe59633 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-09-29 +date: 2024-09-30 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 b85b04bc6127f..383e9189a6317 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-09-29 +date: 2024-09-30 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 c60cdb63b6c80..a88573e22e4e6 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-09-29 +date: 2024-09-30 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 e0c9b5a1fec45..36b68475982f0 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-09-29 +date: 2024-09-30 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 7cf6996406a88..dd7974a423c76 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-09-29 +date: 2024-09-30 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 aaf76c078041c..72011bfdf7ba1 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-09-29 +date: 2024-09-30 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 8745b28058c35..c76ccc0239ef7 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 107eef3141441..a1d3ff1be5e70 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 53cf85ba35609..0563484b82101 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 34a7eab461c8e..514ea5ade3b96 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-09-29 +date: 2024-09-30 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 ad293e0e15be8..c2efac47dbcd1 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-09-29 +date: 2024-09-30 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 d3dac9a9e75e1..2f2fbad030272 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-09-29 +date: 2024-09-30 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 853eb87b431a0..a4aeef7e436e9 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-09-29 +date: 2024-09-30 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 fbad74f776441..182a643444a26 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-09-29 +date: 2024-09-30 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 b1d26e213973e..95e55d08f284a 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-09-29 +date: 2024-09-30 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 3e5f8274b2f0a..68952669476d2 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-09-29 +date: 2024-09-30 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 49802a2cef13c..901e874703dba 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-09-29 +date: 2024-09-30 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 223bee16c6eef..5b4997612bcdf 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-09-29 +date: 2024-09-30 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 a048ed7cde712..5917bd1db3990 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index b9f3c6c590f65..a08ca763529db 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index 1ff2640d4a29b..5861988f99f7f 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index fd964e0c48a4d..fa88431336826 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index 53c7f9acca3fd..c7e57cf778be5 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index e6699c1d0dce7..29b953cf61034 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index af81089174127..4250a9188d2d0 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-09-29 +date: 2024-09-30 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 e552d38c991e8..687832c84621f 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-09-29 +date: 2024-09-30 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 eade06027ea23..0543b1d8cf8d4 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-09-29 +date: 2024-09-30 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 b74f083a4f643..94f190e135ce1 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-09-29 +date: 2024-09-30 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 20df8eff103fa..f2c34114a6c7c 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-09-29 +date: 2024-09-30 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 9bdc51fecf7cb..74dcee645d27c 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-09-29 +date: 2024-09-30 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 71eab974a2a03..bcd850cae3eef 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-09-29 +date: 2024-09-30 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 6dfe13b2ffc32..b4372e691098a 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-09-29 +date: 2024-09-30 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 6cd0a1aee9ead..cd2eba717787c 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-09-29 +date: 2024-09-30 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 f04e1e391dc55..f0b415f6af71d 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-09-29 +date: 2024-09-30 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 046435553462e..a34f1f7c87ad3 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-09-29 +date: 2024-09-30 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 b87700f093c14..17b40bebb5830 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-09-29 +date: 2024-09-30 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 1763053c25332..18b6a08712f46 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-09-29 +date: 2024-09-30 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 e621a94947d8d..b31cb9bfe9950 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-09-29 +date: 2024-09-30 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 0e30ab01aefaa..9970090f29aeb 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-09-29 +date: 2024-09-30 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 6fb8ab8970f2a..8788451548ee6 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-09-29 +date: 2024-09-30 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 d16aaf6aad314..6c37dbc27e7c0 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-09-29 +date: 2024-09-30 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 c988705d09c71..0115712c02a8c 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-09-29 +date: 2024-09-30 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 48e15e8e9354f..368587f7c5ab0 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-09-29 +date: 2024-09-30 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 8be54e6c97f7e..2252e7b08d583 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index 238ae37e20d36..7ad1383260000 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 10b509f5368da..19e7af855c29e 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-09-29 +date: 2024-09-30 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 c608b331a4df8..7092b499fe4c3 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-09-29 +date: 2024-09-30 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 d8a0ef64b8c21..457b6d2aac888 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-09-29 +date: 2024-09-30 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 7e4fc827e3e3f..ac5ed60f393b2 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-09-29 +date: 2024-09-30 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 e571d5a46268f..033d25e962b6b 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-09-29 +date: 2024-09-30 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 28c2035051621..35c958cc9fa1a 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-09-29 +date: 2024-09-30 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 52b126b4988bf..41b5c86af75d7 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-09-29 +date: 2024-09-30 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 6e48fb457055f..bf3d3184ab512 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-09-29 +date: 2024-09-30 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 7f87c53a63914..7e7df520bda19 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-09-29 +date: 2024-09-30 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 8efd95becdc35..ce2c034260867 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index 72cb1da8ea059..2f326e9dc2fd5 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 38e8fc4588bc9..d61dd65a0c0b4 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-09-29 +date: 2024-09-30 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 26967e62e104b..ac604771619d4 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-09-29 +date: 2024-09-30 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 c7fa4718cb3aa..b56426e9d806a 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index f2842d620f729..f382c8458e870 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 2877e3e3a9b8a..4a34d4c0912d2 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/inventory.mdx b/api_docs/inventory.mdx index 2b59661a65c98..833bcccfefeb4 100644 --- a/api_docs/inventory.mdx +++ b/api_docs/inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inventory title: "inventory" image: https://source.unsplash.com/400x175/?github description: API docs for the inventory plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inventory'] --- import inventoryObj from './inventory.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 3c0f8e67f723a..c622580f9fbcb 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 91fda236527e9..0093151d6bda8 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 1182132a0c38c..07bff3d1991dd 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-09-29 +date: 2024-09-30 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 2adb8c5f7e66b..108f79524a676 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-09-29 +date: 2024-09-30 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 5ff70a02a225c..ff10fb9b3a052 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-09-29 +date: 2024-09-30 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 ba411c1657248..6956773d77523 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-09-29 +date: 2024-09-30 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 fefca82310c0f..a8e27f6bebfa4 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-09-29 +date: 2024-09-30 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 f9395cba01d98..84a62ad868b6a 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index 315eeb39ccf57..6ea2afc207679 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 9e79ee6e37ba9..196e9e948a442 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-09-29 +date: 2024-09-30 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 e6b9a7a2a0d3d..b2c4eb2566556 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-09-29 +date: 2024-09-30 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 b68cc0b1fd417..17ed17fab58f7 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 163d280e6e69d..18f4a0eacb3ad 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 50e4fde759297..a820a8de94edc 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-09-29 +date: 2024-09-30 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 8f6a7e6139f76..6b3f493f65ad3 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index e816b228742d5..fc9bd8bf28e94 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index f1494aec4ab86..222e18cc8bc05 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-09-29 +date: 2024-09-30 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 5e5592278c7ee..3e8b3c0957c0e 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 3c19782d37b22..cb3de865f6a6b 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index e7d95bb38495e..4ce527660c1c7 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index 55ccaef05f5df..028cdb22bafca 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 46f18563856cd..5112c31a7a637 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index b68194aa21f97..17f96bdb5d508 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 3d5614b05acf5..3bef37990f05c 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-09-29 +date: 2024-09-30 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 f8a9c5ad740c3..8d3451765df6c 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-09-29 +date: 2024-09-30 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 118b978649110..32cf49133021a 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-09-29 +date: 2024-09-30 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 3b88431ee9582..53433d9b76a78 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-09-29 +date: 2024-09-30 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 cce91d717b0ae..d0ad814c3b5d0 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index 0b318c34a3bac..4bebc535d4385 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 678d402520f8c..5b554a959ad8d 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-09-29 +date: 2024-09-30 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 c80472a5f5d8d..3f1884d144516 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-09-29 +date: 2024-09-30 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 f2cb15957d240..4cb8df35823dc 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-09-29 +date: 2024-09-30 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 4f7d805843c8b..ff7fd468a9467 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-09-29 +date: 2024-09-30 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 b917cafa36d68..55dbaf66fb30f 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-09-29 +date: 2024-09-30 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 4462d77c50008..a2fa31ae5b050 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-09-29 +date: 2024-09-30 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 24f7f3a3bfa8a..feb19650b34ee 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index 22082e7a49386..3d6645ec5ba52 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index 0b9450ef5191d..8f8e38bd82b1a 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index d1c050391ad6b..87c6a138cdf09 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-09-29 +date: 2024-09-30 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 8ef442e31a1d7..4fbf4832258e8 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-09-29 +date: 2024-09-30 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 6c833e642e761..2e97a5443befe 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-09-29 +date: 2024-09-30 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 bf4fab80c0ac3..d6a868584e0e9 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-09-29 +date: 2024-09-30 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 a62d11f303404..23f8eb144c0c0 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-09-29 +date: 2024-09-30 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 27f216eae46fd..0eda7eb993687 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index 0e4e8e93e1708..6f9e1dc5f0c7c 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-09-29 +date: 2024-09-30 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 f4e1c29270523..84f4b0ce06a3b 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index a303a3a626777..6c4e991362c3f 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index ef55d66917a26..98006b06f24ae 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 53d0e9a0a8478..52ccdecaeb5e0 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index eff26c1b88fee..6469d8983f348 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index b381acab18eaa..cfaf4c50d43d9 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-09-29 +date: 2024-09-30 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 07948f71d1830..e712d9a890ca7 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-09-29 +date: 2024-09-30 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 94938309b40a8..b4d7d80e79483 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-09-29 +date: 2024-09-30 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 0a748f6acd020..ea525aaa88837 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index afcf0f49b3951..3c32fbd12e72a 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 01880f178ba0b..57fab41924d1d 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-09-29 +date: 2024-09-30 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 d0bf068e9b428..9c96fed17a824 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-09-29 +date: 2024-09-30 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 1f2cda1fb59f8..ca656e0b61ea5 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-09-29 +date: 2024-09-30 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 8630f273f7860..d45952f72cc7d 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-09-29 +date: 2024-09-30 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 9d8ed44e6ab9f..850c53e234998 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-09-29 +date: 2024-09-30 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 e9c3ad6edd029..26b5d334c332b 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-09-29 +date: 2024-09-30 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 277edf4d5f184..43f9244f4d4ad 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-09-29 +date: 2024-09-30 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 6c9e6c1ce26d9..c9ae4ef8d4edd 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-09-29 +date: 2024-09-30 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 71d8d44da240b..7c7700da55ecf 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-09-29 +date: 2024-09-30 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 1729228c97642..f1f893e0d71b3 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-09-29 +date: 2024-09-30 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 3df6a4ebeaab6..c7d4ca64056eb 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-09-29 +date: 2024-09-30 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 1425808ac367f..7151d0c7064f8 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-09-29 +date: 2024-09-30 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 c72dee342e26f..887ad618548af 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-09-29 +date: 2024-09-30 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 b2e272023ec39..e0d64a299f67c 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-09-29 +date: 2024-09-30 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 2a0b0964931a1..22ade16cda1c5 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-09-29 +date: 2024-09-30 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 c517968ae93a7..1cb7416ed99d7 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-09-29 +date: 2024-09-30 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 2caa5377f2e6d..d8784ac43a38c 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-09-29 +date: 2024-09-30 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 60ba28d8bfa77..e6f9e56968520 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-09-29 +date: 2024-09-30 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 8d48a266db8e1..479dd5f3916c4 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-09-29 +date: 2024-09-30 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 a728a16b1724d..c539b39499aae 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-09-29 +date: 2024-09-30 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 43ed563fbc0bf..70eefbb15b421 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-09-29 +date: 2024-09-30 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 fa543ea7a7b1e..99d7f64ec7892 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-09-29 +date: 2024-09-30 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 a31fa24bb09bd..4265005261b83 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-09-29 +date: 2024-09-30 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 2ff9367d65ef6..4076609dadde7 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-09-29 +date: 2024-09-30 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 2b1b7c3974bcf..6e8514c3b2a8f 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-09-29 +date: 2024-09-30 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 2ed5be5bfd5f0..2641966a6256d 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-09-29 +date: 2024-09-30 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 63c039fa04bf2..4e5e8a66bba3e 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-09-29 +date: 2024-09-30 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 e42fed0b83218..04b554c3ed8b2 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-09-29 +date: 2024-09-30 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 ce97df5b549f7..417aa62ace742 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-09-29 +date: 2024-09-30 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 849f75d84380c..8901b2e131883 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-09-29 +date: 2024-09-30 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 bf9088992becc..deee85cc12123 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-09-29 +date: 2024-09-30 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 02fa4cef22a77..c7cc1873ea0b6 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-09-29 +date: 2024-09-30 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 7e167b9871aec..b50fd885690e0 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-09-29 +date: 2024-09-30 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 bb4dccbba5547..8f729d0ea0416 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-09-29 +date: 2024-09-30 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 9726b1e9a36d4..ec54c0d1cf4d4 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-09-29 +date: 2024-09-30 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 32585bc2a251d..fa621d98db61e 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-09-29 +date: 2024-09-30 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 11798367c3a54..acfbfd4a95e8e 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-09-29 +date: 2024-09-30 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 a555d4798e16c..459d0c52df339 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-09-29 +date: 2024-09-30 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 fda0b8ec65de7..f76cc8e5e52f5 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-09-29 +date: 2024-09-30 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 98505e4e49a8c..bc1e7490b5d42 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-09-29 +date: 2024-09-30 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 4f6c97d0e6996..d8628c3b056ab 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-09-29 +date: 2024-09-30 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 abb89d93a64e8..544529663e8b2 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-09-29 +date: 2024-09-30 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 f37e2b8277bc3..b60fb3fdf1999 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-09-29 +date: 2024-09-30 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 f797f3a5d3cbb..a910976cbbd58 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-09-29 +date: 2024-09-30 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 d438a9a17fcaa..f963da2a15045 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-09-29 +date: 2024-09-30 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 a6dfc86125024..7441bb0c054e8 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-09-29 +date: 2024-09-30 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 e253ae3f4ae02..5ae8f40a318dd 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-09-29 +date: 2024-09-30 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 11d2746f93fc3..22d2b2644c7c4 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-09-29 +date: 2024-09-30 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 69c8e4471bc35..0687746b37051 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-09-29 +date: 2024-09-30 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 92b5466484470..d5b88c3cd5104 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-09-29 +date: 2024-09-30 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 01fb01d30d8b9..46c3ad39662cf 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-09-29 +date: 2024-09-30 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 d396fa2f72236..b8c4f1cf8714f 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-09-29 +date: 2024-09-30 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 069f096633d27..7bd69f4a905c6 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-09-29 +date: 2024-09-30 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 de13a1a532622..399b5e6edf012 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-09-29 +date: 2024-09-30 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 1e1320a4bf134..ab9cfd2210486 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-09-29 +date: 2024-09-30 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 b0b93d8c585a3..038b53e8c3e61 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-09-29 +date: 2024-09-30 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 a71e1d7826423..51c53d89a1b80 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-09-29 +date: 2024-09-30 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 c4b7411d430f9..5fc0f395e0323 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-09-29 +date: 2024-09-30 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 eaf0a630c95b1..b8cc529db80aa 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser.mdx b/api_docs/kbn_core_feature_flags_browser.mdx index df24fe7149ba6..51b51dc726db9 100644 --- a/api_docs/kbn_core_feature_flags_browser.mdx +++ b/api_docs/kbn_core_feature_flags_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser title: "@kbn/core-feature-flags-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser'] --- import kbnCoreFeatureFlagsBrowserObj from './kbn_core_feature_flags_browser.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_internal.mdx b/api_docs/kbn_core_feature_flags_browser_internal.mdx index bbb9fa3f81ebe..2f4938c766633 100644 --- a/api_docs/kbn_core_feature_flags_browser_internal.mdx +++ b/api_docs/kbn_core_feature_flags_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-internal title: "@kbn/core-feature-flags-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-internal plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-internal'] --- import kbnCoreFeatureFlagsBrowserInternalObj from './kbn_core_feature_flags_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_mocks.mdx b/api_docs/kbn_core_feature_flags_browser_mocks.mdx index 7dd616338c443..2bf157c950928 100644 --- a/api_docs/kbn_core_feature_flags_browser_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-mocks title: "@kbn/core-feature-flags-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-mocks plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-mocks'] --- import kbnCoreFeatureFlagsBrowserMocksObj from './kbn_core_feature_flags_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server.mdx b/api_docs/kbn_core_feature_flags_server.mdx index 7658ccbb01b27..dce024169a0c3 100644 --- a/api_docs/kbn_core_feature_flags_server.mdx +++ b/api_docs/kbn_core_feature_flags_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server title: "@kbn/core-feature-flags-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server'] --- import kbnCoreFeatureFlagsServerObj from './kbn_core_feature_flags_server.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_internal.mdx b/api_docs/kbn_core_feature_flags_server_internal.mdx index f07db1ac1d23b..866871c7cdd1b 100644 --- a/api_docs/kbn_core_feature_flags_server_internal.mdx +++ b/api_docs/kbn_core_feature_flags_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-internal title: "@kbn/core-feature-flags-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-internal plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-internal'] --- import kbnCoreFeatureFlagsServerInternalObj from './kbn_core_feature_flags_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_mocks.mdx b/api_docs/kbn_core_feature_flags_server_mocks.mdx index d1cfc511748a1..79b0e6384d9f4 100644 --- a/api_docs/kbn_core_feature_flags_server_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-mocks title: "@kbn/core-feature-flags-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-mocks plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-mocks'] --- import kbnCoreFeatureFlagsServerMocksObj from './kbn_core_feature_flags_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 0ddea17bb2852..230090ce59182 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-09-29 +date: 2024-09-30 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 c619755715791..8d0a6de9c71a4 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-09-29 +date: 2024-09-30 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 8b0c2aa84e47c..bb0bbd9d71a0f 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-09-29 +date: 2024-09-30 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 e40db024d0da5..9db29b0d955cc 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-09-29 +date: 2024-09-30 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 d52260dec40b2..01f456d5d96ea 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-09-29 +date: 2024-09-30 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 91f736d46d960..f981971a9dba2 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-09-29 +date: 2024-09-30 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 61493fe34e796..ea8cf5a283905 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-09-29 +date: 2024-09-30 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 6a91b9936cfd0..109263a7bf6f4 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-09-29 +date: 2024-09-30 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 757267b413cff..71332556de1fd 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-09-29 +date: 2024-09-30 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 bdbb596e7d020..5414a33b0e791 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-09-29 +date: 2024-09-30 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 0262d1d511bbd..213262e4421fa 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 0727c11568e5a..0548a36b3ba09 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-09-29 +date: 2024-09-30 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 7a68e71de8b79..10dee3fc5dd42 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-09-29 +date: 2024-09-30 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 2b486cfb92303..c2b597cc9c44c 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-09-29 +date: 2024-09-30 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 f2826ee14300d..f4239d7d333bf 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-09-29 +date: 2024-09-30 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 979d202b99f94..a59b9ce3d143a 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-09-29 +date: 2024-09-30 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 a91351ea725ea..d988ea5e2e501 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-09-29 +date: 2024-09-30 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 e51a1bcbc8fcd..22f0702cc9823 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-09-29 +date: 2024-09-30 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 d7b71ef221812..2d2b26eb1b5ba 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-09-29 +date: 2024-09-30 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 ad7c559d4a980..6af7e8b65fb46 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-09-29 +date: 2024-09-30 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 7bd68a0756f55..943d5b3510194 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-09-29 +date: 2024-09-30 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 2e89233aa87d7..1e17079951e9b 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-09-29 +date: 2024-09-30 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 a691a37fb0cce..134f0f91ce98e 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-09-29 +date: 2024-09-30 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 d0a1aad1cc9b8..2050a6be01d36 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-09-29 +date: 2024-09-30 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 30e9629a773ca..d63cdee34cc2f 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-09-29 +date: 2024-09-30 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 70af4932ea8fb..8ed31c8856538 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-09-29 +date: 2024-09-30 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 c90e460154f76..50c807aa0ab5d 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-09-29 +date: 2024-09-30 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 7b1fe0bd237d8..fcc3067607c60 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index fc1a44c7a2ddd..34e8dd7a2edda 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index b0d3c3ef381c6..3d3eccd8e1014 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-09-29 +date: 2024-09-30 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 89e4c53131a46..72e4efc783dc8 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-09-29 +date: 2024-09-30 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 81d664a91c592..fcef748b7adbc 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-09-29 +date: 2024-09-30 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 23d08154a06ab..e2efed966c022 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-09-29 +date: 2024-09-30 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 118e80a91716b..5f3f3985a299d 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-09-29 +date: 2024-09-30 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 e833d7caa83be..5b76f0f7d0cc2 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-09-29 +date: 2024-09-30 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 9c73df37168f5..69ece9f78d81a 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-09-29 +date: 2024-09-30 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 7501c18e50737..9889e6d05224c 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-09-29 +date: 2024-09-30 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 b650586f624fe..f70279ececb46 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-09-29 +date: 2024-09-30 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 c47f7d1df7de7..eb2347734804d 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-09-29 +date: 2024-09-30 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 08dbfb08203d7..bff7ce4550429 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-09-29 +date: 2024-09-30 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 377b5ae10f209..8e77587a94bae 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-09-29 +date: 2024-09-30 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 731c4c9ffda12..8ca26e2a5874b 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-09-29 +date: 2024-09-30 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 53f419b916a27..7768916db1a7b 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-09-29 +date: 2024-09-30 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 ddfa3a489713f..d1cf99186e20b 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-09-29 +date: 2024-09-30 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 0c421ebe33b53..9ead2b84f5a89 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-09-29 +date: 2024-09-30 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 fe9043092770f..086dc12bd09f5 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-09-29 +date: 2024-09-30 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 de33912824e82..bcadf9afc266e 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-09-29 +date: 2024-09-30 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 28b9e7fee359f..742f50f45f9cc 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-09-29 +date: 2024-09-30 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 a103dfdb56a1b..7013e7cb7a0dd 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-09-29 +date: 2024-09-30 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 b6cc000e94d93..1ce86f4285181 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-09-29 +date: 2024-09-30 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 3607258ff7769..d540bcc984aa2 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-09-29 +date: 2024-09-30 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 c371d2aec211f..e71ad52c32980 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-09-29 +date: 2024-09-30 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 ae54f14b93cbb..f3f434ade677c 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-09-29 +date: 2024-09-30 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 35b6ec7e17e46..73cf5fe0e0282 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-09-29 +date: 2024-09-30 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 185e9798b791d..6eb796b9fcb27 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-09-29 +date: 2024-09-30 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 3b0b9613fa886..b309ce2b38716 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-09-29 +date: 2024-09-30 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 23823e259ad5a..5d48afd33ae32 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-09-29 +date: 2024-09-30 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 4e57ecf16d936..83ba508ddb82c 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-09-29 +date: 2024-09-30 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 4b820736aba56..ad7685630af0c 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-09-29 +date: 2024-09-30 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 7e3b33d1b66fe..a4d820c6480ca 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-09-29 +date: 2024-09-30 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 8011c2737eb9b..b490a5dc1fe31 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-09-29 +date: 2024-09-30 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 92bbe8f46bbbc..e8dedb30689c5 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-09-29 +date: 2024-09-30 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 361c17899163b..a0dfe9aa9711c 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-09-29 +date: 2024-09-30 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 eb2bb417ad12c..7529f241a4cff 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-09-29 +date: 2024-09-30 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 e71c7a6c38293..6c48368df7788 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-09-29 +date: 2024-09-30 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 036b233361f53..8ebbef45ee0ce 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-09-29 +date: 2024-09-30 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 9d9d9e7ce4eb8..d7491716efe44 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-09-29 +date: 2024-09-30 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 ef77ad4881c7c..eeeb3f1bab68c 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-09-29 +date: 2024-09-30 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 22b70205416e1..b00a5acebc6ef 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-09-29 +date: 2024-09-30 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 e7192829a0c45..04253a4f02a8a 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-09-29 +date: 2024-09-30 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 586c8ccfc2283..3634c5cbb65cc 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-09-29 +date: 2024-09-30 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 d63a8c6872bcf..03792f4135333 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-09-29 +date: 2024-09-30 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 efb11a309d35a..2e39d810f9a35 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-09-29 +date: 2024-09-30 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 199c7586f6cd5..9e073bd9b1a27 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-09-29 +date: 2024-09-30 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 3188855160b08..074ad6734db47 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-09-29 +date: 2024-09-30 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 8f8b21a244313..9da787088d0c3 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-09-29 +date: 2024-09-30 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 deee7af4ab608..8b12709ff8c83 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-09-29 +date: 2024-09-30 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 885fe911c0d26..e8e702f056c80 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-09-29 +date: 2024-09-30 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 0a35e604ee12c..076f80f900eef 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-09-29 +date: 2024-09-30 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 f31713e59468e..8b38faf4646e9 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-09-29 +date: 2024-09-30 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 885d2a0c40e20..7177ec05c5c75 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-09-29 +date: 2024-09-30 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 baff4375b9771..256c41897ed66 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-09-29 +date: 2024-09-30 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 f4e9fd5e53694..3866aa57190ed 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-09-29 +date: 2024-09-30 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 72608a3375166..80dddb98a44d6 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-09-29 +date: 2024-09-30 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 6323d21fb65c7..b97429db2e558 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-09-29 +date: 2024-09-30 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 ef543ac3b1c1f..7483ed73530ac 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-09-29 +date: 2024-09-30 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 5146ce4324f89..f68cafb952495 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-09-29 +date: 2024-09-30 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 9ae6935bc5717..8d01fa7a3f848 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-09-29 +date: 2024-09-30 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 b1f9f05e86979..182d35b68040c 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-09-29 +date: 2024-09-30 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 bcfc79fb886b8..497a7b479bf0d 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-09-29 +date: 2024-09-30 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 de54b9d3a2d95..1571bc1837e47 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-09-29 +date: 2024-09-30 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 5d979d4511c97..24c5b6d2c5451 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-09-29 +date: 2024-09-30 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 5ab71544ed5d4..5c9ca0269a11b 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-09-29 +date: 2024-09-30 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 46bbf31f80749..d5436958c7001 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-09-29 +date: 2024-09-30 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 cf3dbec3f0906..3e80690ccea01 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-09-29 +date: 2024-09-30 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 a6d905c6032cf..75a19b1f819a0 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-09-29 +date: 2024-09-30 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 86a884bab4f03..ff4638e1ef6b6 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-09-29 +date: 2024-09-30 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 9c329b942da6d..4860843b3c16f 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-09-29 +date: 2024-09-30 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 50a6894cde245..ca4152c08924c 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-09-29 +date: 2024-09-30 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 a3abc1642adaf..65c7013c10b43 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-09-29 +date: 2024-09-30 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 c9c4e6beebe0d..e25f7e01bf3f7 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-09-29 +date: 2024-09-30 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 1a51b924fefac..d378db81842bb 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-09-29 +date: 2024-09-30 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 f58e7680c3441..7a0b7926bf624 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-09-29 +date: 2024-09-30 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 36585e802c6b4..44ab8e90ff5ef 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-09-29 +date: 2024-09-30 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 16941ef2fa9cc..6efacde3b9b57 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-09-29 +date: 2024-09-30 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 eccdcfc46eedb..fbf724dbe0552 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-09-29 +date: 2024-09-30 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 8b80daee6d0bc..634d44dbc62f5 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-09-29 +date: 2024-09-30 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 99ff0491f3ac1..5ff966a29fceb 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-09-29 +date: 2024-09-30 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 812374bdbd722..32eee801057f4 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-09-29 +date: 2024-09-30 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 bc0ae03a6c6f8..44f7b5fb1297b 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-09-29 +date: 2024-09-30 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 e097c7a181b38..c59a386708dad 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-09-29 +date: 2024-09-30 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 036379a76746d..3a17ff8acc281 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-09-29 +date: 2024-09-30 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 db93eed76c0f3..3bb9a91db3de5 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-09-29 +date: 2024-09-30 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 704b224be1433..6066275fd05ab 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-09-29 +date: 2024-09-30 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 688faaa35c440..8c3426fea3a6d 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-09-29 +date: 2024-09-30 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 c7a1918d92767..66ddecbb351e4 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-09-29 +date: 2024-09-30 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 52ec3e91b9b14..d10b857f988d6 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-09-29 +date: 2024-09-30 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 d06537c579f0c..0ea94eacfa6f0 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-09-29 +date: 2024-09-30 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 3c1017d5a1069..c55fd36a97b43 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-09-29 +date: 2024-09-30 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 af631312fb48d..132c108741fde 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-09-29 +date: 2024-09-30 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 511147f7614c9..f6e3c7a81b849 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-09-29 +date: 2024-09-30 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 53a481a81115d..1ef1c90a34eec 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-09-29 +date: 2024-09-30 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 61afd5fbb6544..9fa1be46a7963 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-09-29 +date: 2024-09-30 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 fa1b94bfcf0c9..cca3d82a93a38 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-09-29 +date: 2024-09-30 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 eb43bb9598e6c..6cb61b8ed9aa2 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-09-29 +date: 2024-09-30 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 b66cfeeff3ccf..a6126739b2a3b 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-09-29 +date: 2024-09-30 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 f95604c75635a..99836cf5375fa 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-09-29 +date: 2024-09-30 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 940c64edf7b10..d88e56ea131bf 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-09-29 +date: 2024-09-30 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 532ed85c3215d..72df570915250 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-09-29 +date: 2024-09-30 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 20b1538326a94..59a72f7f2234a 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-09-29 +date: 2024-09-30 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 c16ea65f7c4b5..952966dcaa2d0 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-09-29 +date: 2024-09-30 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 e0115b0afdeaa..dcb0a42832c6a 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-09-29 +date: 2024-09-30 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 8ac3ee1e909c6..f5c36d7e047a6 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-09-29 +date: 2024-09-30 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 ba4ab7a702a58..ee6bb00c8e187 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-09-29 +date: 2024-09-30 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 24ec74d84e17d..d49684a6a2186 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-09-29 +date: 2024-09-30 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 7e3dfa092f204..d4c6fb895d68a 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-09-29 +date: 2024-09-30 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 08cc87cb2e3bb..ace6be4fb5fa4 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-09-29 +date: 2024-09-30 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 b1e4bfaa04b73..15e82385ea530 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-09-29 +date: 2024-09-30 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 7133a8506f688..5066e51ebf209 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-09-29 +date: 2024-09-30 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 d1733b2b0d0b4..2c97807bf54d2 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-09-29 +date: 2024-09-30 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 2b23868d6a340..b619d4a83c272 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-09-29 +date: 2024-09-30 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 e8b91531a0410..3a6d3bbb49887 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-09-29 +date: 2024-09-30 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 97416acb0d8a1..a5794f0584ac3 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-09-29 +date: 2024-09-30 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 6c8d80a2ddbc4..9b1b3ea4f5908 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-09-29 +date: 2024-09-30 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 9817a95d6a826..c9adc253b6278 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-09-29 +date: 2024-09-30 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 b9656223a7109..6db98c94b5ae2 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-09-29 +date: 2024-09-30 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 9fd0cfb968c63..10ddfe6b1b645 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-09-29 +date: 2024-09-30 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 0a6357edc8cd6..5f8b4fdc363ca 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-09-29 +date: 2024-09-30 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 14f468d43b032..392aedccdc670 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-09-29 +date: 2024-09-30 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 f199767a45fe5..51d175e601a67 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 0390a0722ce18..18f63c088e8a4 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 01eaec80a845b..3e783a0265734 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-09-29 +date: 2024-09-30 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 4bf0237a14ef9..091a29f8d243b 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-09-29 +date: 2024-09-30 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 fcbf8b59cc690..d48b846bd5ff3 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-09-29 +date: 2024-09-30 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 e04e2ab5b9054..cd367c551378f 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-09-29 +date: 2024-09-30 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 9074723e5b033..411ddc1cd4b2f 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-09-29 +date: 2024-09-30 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 6b763fd8e1ed9..ce897efc284b7 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-09-29 +date: 2024-09-30 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 7878ac466c505..f538e4d51209b 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_editor.mdx b/api_docs/kbn_esql_editor.mdx index a83d88cc9b980..f5e51262bee96 100644 --- a/api_docs/kbn_esql_editor.mdx +++ b/api_docs/kbn_esql_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-editor title: "@kbn/esql-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-editor plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-editor'] --- import kbnEsqlEditorObj from './kbn_esql_editor.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 326da799d2f34..fe4344fc4280a 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 416f160528cb6..0bd81e7dafbd1 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-09-29 +date: 2024-09-30 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 fa782f215a63f..ed41cd2f52cca 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-09-29 +date: 2024-09-30 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 0d2aacb48405d..1fa1031fc246f 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-09-29 +date: 2024-09-30 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 8a62ae3b221e5..046dbbe245069 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-09-29 +date: 2024-09-30 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 3ad352bd80b38..a61e3e8d5f64f 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 8c9127fc8f5a1..4a53b5fc4ff01 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index b49e15d52f798..2eeccbd0ec0cf 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-09-29 +date: 2024-09-30 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 20c4d8a395a44..290a7eff0f7cf 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-09-29 +date: 2024-09-30 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 a3f3857af7d5f..52654a7f75451 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-09-29 +date: 2024-09-30 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 4eccc50c23c9e..5ee23b2719a68 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-09-29 +date: 2024-09-30 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 b6aee5e38f3ce..57e0f75170b94 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-09-29 +date: 2024-09-30 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 c1e5646c3707f..f977e2402cbf3 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-09-29 +date: 2024-09-30 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 9208b206cf6a3..8df97c078813b 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index 08365257d14d6..f354852248aef 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index 7ca2571056d36..8baa1a3401595 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 8f353d065c15c..5e4c939d953fc 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-09-29 +date: 2024-09-30 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 31231a334eb2c..78f5e7c63c45f 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-09-29 +date: 2024-09-30 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 ded3ed1237bb3..1fbeee682258c 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-09-29 +date: 2024-09-30 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 b5523747334fe..fc50746562c94 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-09-29 +date: 2024-09-30 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 398036601bf33..939bf3d0f06da 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-09-29 +date: 2024-09-30 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 6c6a9af67d7b9..affebd4ef6ef1 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-09-29 +date: 2024-09-30 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 ca9361c5ca54b..40fff90a10e89 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-09-29 +date: 2024-09-30 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 bcafa4d553db2..bfc6a850db5b8 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-09-29 +date: 2024-09-30 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 d6af9128474cc..a7f1c7d516719 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management_shared_types.mdx b/api_docs/kbn_index_management_shared_types.mdx index e673ef7bc7131..74b284e6e7d36 100644 --- a/api_docs/kbn_index_management_shared_types.mdx +++ b/api_docs/kbn_index_management_shared_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management-shared-types title: "@kbn/index-management-shared-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management-shared-types plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management-shared-types'] --- import kbnIndexManagementSharedTypesObj from './kbn_index_management_shared_types.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index fd589660f385c..61ca7d876ebe1 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-09-29 +date: 2024-09-30 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 0667854435a7d..b240f0f8b163c 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-09-29 +date: 2024-09-30 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 8e4ff89bcbb21..15550631e5943 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index 391eca83fd0a4..a54f19ffd54c3 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 8aa42204119ab..61ef22189b156 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-09-29 +date: 2024-09-30 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 fce7c237855c8..31274a24c6630 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-09-29 +date: 2024-09-30 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 f498591edad04..afd49c0c71ac1 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-09-29 +date: 2024-09-30 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 506f814814b51..bfd46bf124621 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-09-29 +date: 2024-09-30 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 c617f2f79192a..a852d3d10b734 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 93cebf7864f30..4d113127e5462 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index a4a1d58d9352f..4920f02bd4be1 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation.mdx b/api_docs/kbn_language_documentation.mdx index 7ef153bbd7cfd..c6b45c82e7a76 100644 --- a/api_docs/kbn_language_documentation.mdx +++ b/api_docs/kbn_language_documentation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation title: "@kbn/language-documentation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation'] --- import kbnLanguageDocumentationObj from './kbn_language_documentation.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 76beafed80104..b7248d0db484b 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-09-29 +date: 2024-09-30 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 80e15647ea293..48d7b9de8a0c9 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-09-29 +date: 2024-09-30 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 da9d0d155706a..15aa7db247687 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-09-29 +date: 2024-09-30 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 c7f90af586975..43f0fac47a531 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-09-29 +date: 2024-09-30 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 7022985c585fa..a5f2e3d5486db 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-09-29 +date: 2024-09-30 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 6abe08909214f..17f665ac54a66 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-09-29 +date: 2024-09-30 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 22d1a04fa7310..5c3b44aba3912 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-09-29 +date: 2024-09-30 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 604faa2f5cf41..d8397cb5613e5 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-09-29 +date: 2024-09-30 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 cb1aa2061c304..a9ec06acb5c6f 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-09-29 +date: 2024-09-30 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 38216ace92834..262683c5a4566 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-09-29 +date: 2024-09-30 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 99bfd92309468..ef04a1c04810a 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-09-29 +date: 2024-09-30 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 db8e074232dcd..51e9f5fbd55d5 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-09-29 +date: 2024-09-30 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 b2351ad086469..e08979aac3b8a 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-09-29 +date: 2024-09-30 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 5995d14fb4241..6c9ed97185515 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-09-29 +date: 2024-09-30 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 92b91680f3754..219b04228d993 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-09-29 +date: 2024-09-30 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 3d1307bed11e6..19b472c7eb39a 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-09-29 +date: 2024-09-30 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 0021ef433a865..8529a7107b253 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-09-29 +date: 2024-09-30 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 5c43aaf502ee2..b2d80783e167a 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-09-29 +date: 2024-09-30 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 9ebe8a27f37b2..b96aed922a5e0 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-09-29 +date: 2024-09-30 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 6dd3f00755575..3fed2eff0487b 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-09-29 +date: 2024-09-30 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 0023ac752aaa4..af6de3fb7f145 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-09-29 +date: 2024-09-30 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 3f0394dfc017f..34d0c0523b2c4 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-09-29 +date: 2024-09-30 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 8d99f2140cb53..397e3a83750d5 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-09-29 +date: 2024-09-30 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 b9e5549858f0b..f08b1249dbc48 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-09-29 +date: 2024-09-30 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 6ebcbe83723ec..c9388d07a7f87 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-09-29 +date: 2024-09-30 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 dac92c753498f..26b342495be4f 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-09-29 +date: 2024-09-30 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 590cbadbfa76a..c792818f55a3d 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-09-29 +date: 2024-09-30 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 e28e054cf6e74..f3de901060ce7 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-09-29 +date: 2024-09-30 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 a6d8680ccfbd6..42cc49610fb4e 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-09-29 +date: 2024-09-30 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 f133bdb2aecde..60490ccd3ee4d 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_field_stats_flyout.mdx b/api_docs/kbn_ml_field_stats_flyout.mdx index ff59e2adb48b9..a96cf26b39685 100644 --- a/api_docs/kbn_ml_field_stats_flyout.mdx +++ b/api_docs/kbn_ml_field_stats_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-field-stats-flyout title: "@kbn/ml-field-stats-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-field-stats-flyout plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-field-stats-flyout'] --- import kbnMlFieldStatsFlyoutObj from './kbn_ml_field_stats_flyout.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 6b8591f883172..31baf2994ba2e 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-09-29 +date: 2024-09-30 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 b15b672020fa0..a3e03e88dbde5 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-09-29 +date: 2024-09-30 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 45c5e27a97f47..217e792c4955b 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-09-29 +date: 2024-09-30 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 25285871bb55f..c524c9b83457a 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-09-29 +date: 2024-09-30 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 a11aa86a9e506..44a64004df2be 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-09-29 +date: 2024-09-30 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 fc673025014fb..6bdd3907aaefe 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-09-29 +date: 2024-09-30 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 c12b4b6cc5893..627d9eb11c196 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_parse_interval.mdx b/api_docs/kbn_ml_parse_interval.mdx index aa86ca0f73218..ea1cfa188ca0d 100644 --- a/api_docs/kbn_ml_parse_interval.mdx +++ b/api_docs/kbn_ml_parse_interval.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-parse-interval title: "@kbn/ml-parse-interval" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-parse-interval plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-parse-interval'] --- import kbnMlParseIntervalObj from './kbn_ml_parse_interval.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index f8c0d5db23813..60f9632f0fcfc 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-09-29 +date: 2024-09-30 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 eecbae422ea9e..f26760a1773fb 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-09-29 +date: 2024-09-30 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 9bfd9a605d4a7..ea665c53d213e 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-09-29 +date: 2024-09-30 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 268525cbd2e0c..fd67b1684e1b3 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-09-29 +date: 2024-09-30 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 7e83a0bea3dc9..3441cbe42fb0f 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-09-29 +date: 2024-09-30 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 f4b263d359da4..06c5b550ef879 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-09-29 +date: 2024-09-30 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 99c30aa8ba21f..f73a9778f45b1 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-09-29 +date: 2024-09-30 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 695c04f61bba9..39bf6c7789998 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-09-29 +date: 2024-09-30 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 07c8420a39c07..ae3be62c009a2 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_ml_validators.mdx b/api_docs/kbn_ml_validators.mdx index 1663d9d67b946..967d5d2e8709b 100644 --- a/api_docs/kbn_ml_validators.mdx +++ b/api_docs/kbn_ml_validators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-validators title: "@kbn/ml-validators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-validators plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-validators'] --- import kbnMlValidatorsObj from './kbn_ml_validators.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 6f0e37b977779..9fe74b64330f9 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-09-29 +date: 2024-09-30 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 64b3c5fc8a12a..7a03275e453e5 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-09-29 +date: 2024-09-30 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 9c73ad6ee9f2e..894c246d5b897 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index 2b337e520f069..4fb7513525d72 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 89dc3e902a350..a3a300c635dd7 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index 5f9712c3b904c..437adb49792c0 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index a9c2624b057e6..f5bf83a6f3dc9 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-09-29 +date: 2024-09-30 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 56566dd5bc94e..b866ba02496b9 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-09-29 +date: 2024-09-30 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 e6a709f4fa1ee..d59b23cc65fd9 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-09-29 +date: 2024-09-30 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 809314697781d..2d12ca3da2796 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-09-29 +date: 2024-09-30 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 d4073015400ca..1cdc98385b65d 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-09-29 +date: 2024-09-30 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 0517d79090a48..468f53c28db96 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-09-29 +date: 2024-09-30 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 0b7aebc7ef410..062a65af7f3a7 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-09-29 +date: 2024-09-30 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 61aa87c994775..2efd1db56aca0 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-09-29 +date: 2024-09-30 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 6e7a5ab2f8f0b..1b1cf32a7fa1d 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-09-29 +date: 2024-09-30 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 e2ada7729d15e..5cd4db6a9fc27 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-09-29 +date: 2024-09-30 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 76ba032a10318..e9f51f3b3c474 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-09-29 +date: 2024-09-30 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 bb446a798c6f5..fdd8dc355981b 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-09-29 +date: 2024-09-30 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 931e1eb02aea0..640a6910cee92 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-09-29 +date: 2024-09-30 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 b825530a5c71a..5af98de8c35ce 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-09-29 +date: 2024-09-30 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 a84d3c4d9d532..5f3c2760ef0bf 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-09-29 +date: 2024-09-30 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 8bda0c14c7419..f09d4be3143e2 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-09-29 +date: 2024-09-30 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 a9f46e50007a7..302cff21763c2 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-09-29 +date: 2024-09-30 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 e2720ec8be21a..860f5b5e25301 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-09-29 +date: 2024-09-30 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 a2375005f0862..40adbf08d705e 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-09-29 +date: 2024-09-30 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 6912e36cee3a6..7edc2205e8383 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-09-29 +date: 2024-09-30 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 40a002659da04..674c5dd440b31 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-09-29 +date: 2024-09-30 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 300f64e2983d5..872f8eb82da88 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-09-29 +date: 2024-09-30 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 74749d3705844..3eace9bfed7d3 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-09-29 +date: 2024-09-30 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 992e8e605a9a8..2dc3734b14e3f 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 750db61641c89..7af4d042fc4de 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 2898564513f3a..c1d788e323ac6 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-09-29 +date: 2024-09-30 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 498bfc505d577..680dc7d0ab64c 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-09-29 +date: 2024-09-30 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 fc204c914dfcb..ef849b87ec8aa 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-09-29 +date: 2024-09-30 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 be537e0a20f17..11f0dbc22fa41 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-09-29 +date: 2024-09-30 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 42ab0d70196f2..fcc64f7c3f21d 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-09-29 +date: 2024-09-30 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 f4a07d7ec5de2..95c555c527255 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-09-29 +date: 2024-09-30 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 2340516a33592..ba040c0c67725 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-09-29 +date: 2024-09-30 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 de402ddfd47b8..08d173360ab59 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-09-29 +date: 2024-09-30 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 6da98d8401dc5..18a956b435370 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-09-29 +date: 2024-09-30 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 7568c9dfcbec2..55711ffbe68f2 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-09-29 +date: 2024-09-30 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 eae23e43c0467..bd122073117cd 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-09-29 +date: 2024-09-30 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 7cb5bc771b302..42531868ba1a4 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-09-29 +date: 2024-09-30 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 80515e37741bd..60e495fd7a4b3 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-09-29 +date: 2024-09-30 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 dca693d9c65db..3e28d2d66e37f 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-09-29 +date: 2024-09-30 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 578811116797a..b8f8188761e4b 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-09-29 +date: 2024-09-30 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 6b944c3113845..9b2967457bdb1 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index 7c3b843857b9e..202fb4ae1cf0e 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 0e6a0c89dd64a..fc879a29d0eae 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 73ebf4cf909bf..69f563a37c50c 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 50178b935cf37..f7752cf80c5f9 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-09-29 +date: 2024-09-30 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 a750e87de5080..370785836306d 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-09-29 +date: 2024-09-30 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 859b29f9adfde..102cb196e6170 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-09-29 +date: 2024-09-30 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 7cd10fd751eb4..0d7c7f4365346 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-09-29 +date: 2024-09-30 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 902ae2974b278..814d03e40befd 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index 1924997c5cc98..f8a40a7db4a57 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index cd4f18e873893..f194322e6e8c4 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-09-29 +date: 2024-09-30 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 3dc11c79caac8..6a7cc2e2b67db 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-09-29 +date: 2024-09-30 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 a7a2aba663d06..bfb3f502ef731 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-09-29 +date: 2024-09-30 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 469008ce48694..cebb3ede3e7bc 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-09-29 +date: 2024-09-30 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 4b89083b2cd44..3c2291f41430d 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-09-29 +date: 2024-09-30 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 70e8a541e9d06..483729522beec 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index f35e105ded651..4d593ad366990 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index 95443001673d5..fc3f7cffc4357 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index 60b4a3ab53625..0b445960272c2 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 7f87607fb5275..2d2755c163eed 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-09-29 +date: 2024-09-30 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 7e5a719c9810d..0835ccb589a9a 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-09-29 +date: 2024-09-30 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 f6ae668481586..5f93b46e5b6fe 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-09-29 +date: 2024-09-30 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 2f6337eb88c80..1bb2681789148 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index 2b202b50070f9..68632f9caa071 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_common.mdx b/api_docs/kbn_security_solution_common.mdx index b8e72f2814f8c..1ea0f279e61eb 100644 --- a/api_docs/kbn_security_solution_common.mdx +++ b/api_docs/kbn_security_solution_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-common title: "@kbn/security-solution-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-common plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-common'] --- import kbnSecuritySolutionCommonObj from './kbn_security_solution_common.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index a376af8263ca3..38edb09102e41 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 3bd61005a6a60..99e1a97de911f 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-09-29 +date: 2024-09-30 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 ee1859a637c1d..c4e3a39139850 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-09-29 +date: 2024-09-30 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 198ed3ec7b8ae..59af464dbe3da 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-09-29 +date: 2024-09-30 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 368c1c90c05d6..ae68011b424fd 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index a06a28573abcb..068eed0662437 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index f34abad1da03d..c552c2166744a 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-09-29 +date: 2024-09-30 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 0dd1a2b243d5d..ec9536e8b59bf 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-09-29 +date: 2024-09-30 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 2b799ab3f9ac3..e0ba10db97a98 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-09-29 +date: 2024-09-30 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 0653295e4a484..a6b621e2e3c28 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-09-29 +date: 2024-09-30 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 313635a6869d3..f30827086ad7c 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 7484f2b9f35d1..2e120754e0e24 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-09-29 +date: 2024-09-30 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 751f469ac74d7..6193050520d44 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-09-29 +date: 2024-09-30 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 3da8fdf72eb18..e657674156692 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-09-29 +date: 2024-09-30 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 114d60b34625f..de593d9b62462 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-09-29 +date: 2024-09-30 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 46eaea09da716..4fb04972255b2 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-09-29 +date: 2024-09-30 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 29f2375cc20f0..0244a63ad147b 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-09-29 +date: 2024-09-30 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 6cb99082cccb6..c8c8ed77a4741 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-09-29 +date: 2024-09-30 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 f39b38305b747..63c323808cb2e 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-09-29 +date: 2024-09-30 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 14f43e4af08e3..a022cd1d7a0a4 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-09-29 +date: 2024-09-30 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 5a3e5c2bf9ac0..dc2ee45d3fbda 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-09-29 +date: 2024-09-30 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 f04492a0494ae..38ee726adb11e 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-09-29 +date: 2024-09-30 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 ae5166089ecd2..7ca3d040b2aa8 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-09-29 +date: 2024-09-30 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 8b452d5bc5bba..273d2e2a2de1f 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-09-29 +date: 2024-09-30 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 801f02d76a422..bf23a5f788be6 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index 85c82e6a48652..0332c32f44f44 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index 0dd55b2c17d78..38ba5ccc0c3c2 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 9d2df07ae0d6d..fa2eb55d7a3e7 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-09-29 +date: 2024-09-30 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 070e0c997174d..589fa2f0e6b59 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-09-29 +date: 2024-09-30 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 85a0134581263..f6c2ee0a17a29 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-09-29 +date: 2024-09-30 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 26d0ec1ada773..9741a05e5f05f 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-09-29 +date: 2024-09-30 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 bafd74a6f0343..bd255ffdb18fc 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-09-29 +date: 2024-09-30 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 2e91b4f8c5c9b..37beb69198437 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-09-29 +date: 2024-09-30 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 09c79bbe37466..346ee4a630045 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-09-29 +date: 2024-09-30 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 2b7bde3fbfbe2..a8f4fe4cbb2fa 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-09-29 +date: 2024-09-30 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 339868aa9f53f..3c21ce35f2ad3 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-09-29 +date: 2024-09-30 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 e16dd1ea8f50a..344eaa215314f 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-09-29 +date: 2024-09-30 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 959bacf51ff01..562f1943d0cd6 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-09-29 +date: 2024-09-30 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 4f5c8bef2f293..4c690ff6019c9 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-09-29 +date: 2024-09-30 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 674516183544b..6f94d956b975d 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-09-29 +date: 2024-09-30 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 660fa28503e5c..9a9c42806c0f7 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-09-29 +date: 2024-09-30 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 dea16bc76395e..e831d7262343f 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-09-29 +date: 2024-09-30 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 6f71af30e7c4d..e091fb20ae3b6 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-09-29 +date: 2024-09-30 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 56901fd9a35ca..bbb55c8fc323f 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-09-29 +date: 2024-09-30 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 a102779dd73ed..4da3dd6ffe07b 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-09-29 +date: 2024-09-30 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 99b3e45d9c247..163fb05948cb8 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-09-29 +date: 2024-09-30 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 27661bd44b301..6d2157f6a7c90 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-09-29 +date: 2024-09-30 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 bde78887b442b..09a8c47c3ac35 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-09-29 +date: 2024-09-30 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 00c479913d014..a83b00b3ea25d 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-09-29 +date: 2024-09-30 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 47c350a1d1af3..39417ad1ff129 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-09-29 +date: 2024-09-30 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 aa1181665c78c..55f1894663209 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-09-29 +date: 2024-09-30 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 df5c2c26b96e9..b8a587bd7a17b 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-09-29 +date: 2024-09-30 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 d070e39c044cc..1dcbf3f99c810 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-09-29 +date: 2024-09-30 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 37575b6a7633f..5061965a38bc6 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-09-29 +date: 2024-09-30 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 cfb54dd927500..6c21fc625ad2a 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-09-29 +date: 2024-09-30 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 bc2efdfcc33d2..12fe90544d7da 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-09-29 +date: 2024-09-30 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 d527b68a0194e..65be20d693c3d 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-09-29 +date: 2024-09-30 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 3c44c06b0696b..18eb84c9a2571 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-09-29 +date: 2024-09-30 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 96bc740cca98f..bf18348ffff45 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-09-29 +date: 2024-09-30 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 f5a5091450e08..8d40dc49fa606 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-09-29 +date: 2024-09-30 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 a694e1207a067..92bfc86952f73 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-09-29 +date: 2024-09-30 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 67049438be36d..6780b84958e3e 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-09-29 +date: 2024-09-30 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 0e13524a7b04e..f5a7fd486dec9 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-09-29 +date: 2024-09-30 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 77e32fbbf6db0..0bdc472f330c2 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-09-29 +date: 2024-09-30 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 7bf20aa1d6587..35c51a4176744 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-09-29 +date: 2024-09-30 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 33006c09653c5..7fb7836849ca0 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-09-29 +date: 2024-09-30 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 daf2c86c0ad93..f921776f27222 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-09-29 +date: 2024-09-30 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 5ea9cdf22917e..0924a2d674588 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-09-29 +date: 2024-09-30 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 fd444b28a1f81..1f3d7b390e249 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-09-29 +date: 2024-09-30 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 e851a15a45353..0d49dbc9cc673 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-09-29 +date: 2024-09-30 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 16e8533d6d537..5d07401a58ad8 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-09-29 +date: 2024-09-30 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 ef41d105ed8cb..76c8c00c2811e 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index e4e8eb98edfe2..b00e412647737 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index a018500505c1a..0d6d96e54a118 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-09-29 +date: 2024-09-30 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 670413d841774..21884042eb227 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index df380c584f855..1856c7b09f4cf 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-09-29 +date: 2024-09-30 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 6295cb6743e69..193b5f114c2fe 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_sse_utils.mdx b/api_docs/kbn_sse_utils.mdx index 33177ee00a715..354c7a537bcbc 100644 --- a/api_docs/kbn_sse_utils.mdx +++ b/api_docs/kbn_sse_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils title: "@kbn/sse-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils'] --- import kbnSseUtilsObj from './kbn_sse_utils.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_client.mdx b/api_docs/kbn_sse_utils_client.mdx index 06e7afaa2a116..5002f3ad27535 100644 --- a/api_docs/kbn_sse_utils_client.mdx +++ b/api_docs/kbn_sse_utils_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-client title: "@kbn/sse-utils-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-client plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-client'] --- import kbnSseUtilsClientObj from './kbn_sse_utils_client.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_server.mdx b/api_docs/kbn_sse_utils_server.mdx index 22441b158bb6d..e342bd1b1ca0d 100644 --- a/api_docs/kbn_sse_utils_server.mdx +++ b/api_docs/kbn_sse_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-server title: "@kbn/sse-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-server plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-server'] --- import kbnSseUtilsServerObj from './kbn_sse_utils_server.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index e647e4354b587..ddd48d3684709 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-09-29 +date: 2024-09-30 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 92a60a547f575..5cfd9a7bf8574 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-09-29 +date: 2024-09-30 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 b70b5ab1335a6..42ea8e5259cf5 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index bcd087f255867..6f18bc079e06e 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index 776e7d7a61d04..922024cd586ad 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index aad19406ce9f3..3a699877ba849 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-09-29 +date: 2024-09-30 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 38346a129b051..087b39638a077 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-09-29 +date: 2024-09-30 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 dfb376ee9ab39..83500b2e84702 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-09-29 +date: 2024-09-30 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 43dd9ead683a7..ff05e3f7f5e53 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-09-29 +date: 2024-09-30 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 f726174d80730..2f3e8848dc798 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 6ec41c579c419..afa75182c343b 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-09-29 +date: 2024-09-30 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 286fe63c6f9ea..a6c59436bf8fa 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-09-29 +date: 2024-09-30 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 fb8a53a49fba9..c380e82b60b58 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 9e63caa83f2b3..1784b9d0fd831 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 8208a95bbaf06..13e0a46279cd4 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-09-29 +date: 2024-09-30 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 34eec6c7b545e..88388edc2f007 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-09-29 +date: 2024-09-30 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 2e0975f6cdc09..cb42effffee9d 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-09-29 +date: 2024-09-30 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 dc5a2bdd08f02..a33f732fe5a63 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-09-29 +date: 2024-09-30 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 beed23d69da24..76a75c8cf1b2d 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-09-29 +date: 2024-09-30 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 4dce038629a45..0df7a92d3e807 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-09-29 +date: 2024-09-30 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 7d6a372b425cf..490b379b3e8f3 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-09-29 +date: 2024-09-30 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 4ab72e1db842a..2be4019f471a0 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-09-29 +date: 2024-09-30 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 bdd274a78dca1..a9a945bbd644d 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index 3dea74d77b408..5d7c4b50c4ecb 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index efb85730f908c..ba709ffc87e28 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-09-29 +date: 2024-09-30 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 fd842182daae1..a7e60d264c71c 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-09-29 +date: 2024-09-30 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 fbcb80188fc65..6fe9c03c1ab83 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-09-29 +date: 2024-09-30 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 be24e7d0784a4..36a1c1e332704 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-09-29 +date: 2024-09-30 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 80d14a7d5b786..0434d38389775 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-09-29 +date: 2024-09-30 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 d303d5457fdb8..3c0472c036d06 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-09-29 +date: 2024-09-30 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 5d3f978e09851..30601fb671e54 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-09-29 +date: 2024-09-30 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 5523c6913c19c..214e50366c8dd 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-09-29 +date: 2024-09-30 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 10c2f81a3a691..46609dddd0d44 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index 1ab5d167a40ca..3edc5fd608a3d 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 1dcfb72ab40ff..f4a4ce5a2907f 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-09-29 +date: 2024-09-30 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 7fc94c5499bfb..e7970204f2717 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 1190cfa6fbefc..69985044c2667 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-09-29 +date: 2024-09-30 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 5d23508909c40..7470e26f8df42 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-09-29 +date: 2024-09-30 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 5a53f3c9e0d1b..9f01614eab5f3 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-09-29 +date: 2024-09-30 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 fabad66f612e4..be2530bcdc508 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-09-29 +date: 2024-09-30 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 c2c7f502fbd96..376b4adf15032 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-09-29 +date: 2024-09-30 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 fd0b335d1693f..7a4b23f08a0ef 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-09-29 +date: 2024-09-30 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 a37b232014075..9cc9fcf4834a5 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-09-29 +date: 2024-09-30 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 4b6326165ad64..c96b66e32f9f5 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-09-29 +date: 2024-09-30 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 f812d48ad582f..954d946e0d280 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index 4356c202b0990..46c3496f4ce15 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 00bd6cd59a129..1d82ca228ab8a 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-09-29 +date: 2024-09-30 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 c676cecbc44e7..3c21db5160fe2 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-09-29 +date: 2024-09-30 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 a4fcfe1d7652a..e8b0da57f1164 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index e3ac1f74145dc..2dc705d16f3ff 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 6b68f3b39e5b3..d7394cb0ba45d 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-09-29 +date: 2024-09-30 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 c8cbe9ef262d3..5245f77603d4a 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-09-29 +date: 2024-09-30 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 1f08a1bcaf145..39418c0a212b5 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-09-29 +date: 2024-09-30 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 76f11123e546b..0a1cebec9624b 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-09-29 +date: 2024-09-30 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 e2501c7dc7797..ec09caeeb8376 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-09-29 +date: 2024-09-30 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 c2db762832fb2..1b025cd8be5c6 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-09-29 +date: 2024-09-30 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 02ed9df5acecb..6c1a9ddad4ed6 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-09-29 +date: 2024-09-30 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 cabcf4d19d2fb..fe466f0106497 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-09-29 +date: 2024-09-30 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 f00868e6b5f9e..271ef9cb39d7f 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-09-29 +date: 2024-09-30 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 ce53c854d21ce..b57aec54fb781 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-09-29 +date: 2024-09-30 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 10ef6e9e9386b..b12159bcddf8c 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index ea92905ce7413..6e48bd5310892 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-09-29 +date: 2024-09-30 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 197e680d591b2..478d83805ded2 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-09-29 +date: 2024-09-30 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 d773defee8c26..09e3b37e0994b 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-09-29 +date: 2024-09-30 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 1b016bf6dcb67..af5d9242498fb 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-09-29 +date: 2024-09-30 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 753122098fcd5..a8d754fb07def 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-09-29 +date: 2024-09-30 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 afff6089e8b62..41b83f009305c 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index a28a3d4680da9..e60a1f050046c 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-09-29 +date: 2024-09-30 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 b18f1af44cb85..0759edc108820 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-09-29 +date: 2024-09-30 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 2077c102bc5bb..a812ec47c62d5 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index fba31a8a9dca8..3c411143e6bc2 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-09-29 +date: 2024-09-30 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 a01b804631857..c37ae92418cc0 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-09-29 +date: 2024-09-30 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 2f2557be2e243..3930932cd4559 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-09-29 +date: 2024-09-30 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 7d4ba0744acf5..71138344d5303 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-09-29 +date: 2024-09-30 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 1907227a8f88a..165ec64f812b9 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-09-29 +date: 2024-09-30 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 67c8b14fc4a43..ed8f82d1e1fda 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-09-29 +date: 2024-09-30 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 97e864cf9099f..ecfd27575404a 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index eb6681963e5aa..d574c84e8ff7f 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-09-29 +date: 2024-09-30 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 15441e9cc41f9..c5ff2853c1f1b 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-09-29 +date: 2024-09-30 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 0fc762a72aafd..e085f0ff58bef 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-09-29 +date: 2024-09-30 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 71f8f29c928fc..152443f911f7e 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-09-29 +date: 2024-09-30 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 93b0c1cf6091a..cb85671033386 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-09-29 +date: 2024-09-30 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 03f1d3bcd593b..0f70d48b862eb 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-09-29 +date: 2024-09-30 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 ba8af191914fd..5a38434868201 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-09-29 +date: 2024-09-30 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 dfba0a8274d46..0666295dde691 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-09-29 +date: 2024-09-30 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 0416bd8252d87..8c9a9d5f008f4 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-09-29 +date: 2024-09-30 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 21ab44e05decb..8929a01aae630 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index f55d34813956a..7e024597324a0 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 67cfef094e022..63808cbaa0891 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index b927de8eb18b0..dc80035f89f06 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index ebca0b819ed55..8a8c3d1642603 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 94b2de45c04d1..55de2c0c3aeb7 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 00ccb060096d5..e4f8e7aa5e196 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-09-29 +date: 2024-09-30 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 43443bfff2061..0a6409f98ae58 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-09-29 +date: 2024-09-30 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 dea693c6e7012..23cda2a61ce08 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 439ebd3c5e21c..e2dfdd33a7dab 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-09-29 +date: 2024-09-30 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 944168c8e696c..5523c1f940f06 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-09-29 +date: 2024-09-30 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 5e2802960a9b0..8383709fc6b3c 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-09-29 +date: 2024-09-30 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 7a98c3e83d390..eeae132ef6b53 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-09-29 +date: 2024-09-30 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 8cb33e6107ff1..5cbd6e28cce7f 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-09-29 +date: 2024-09-30 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 3f295d87faac1..2ee08bacffcd0 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-09-29 +date: 2024-09-30 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 60580e4fdaff4..1fab24248e431 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-09-29 +date: 2024-09-30 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 2a295137064c9..1479191871765 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-09-29 +date: 2024-09-30 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 890873f34546e..34e14029dea76 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-09-29 +date: 2024-09-30 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 91b05fed20347..3aa01b4222dc2 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-09-29 +date: 2024-09-30 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 e8755571d0dc3..5e1e89c153ade 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-09-29 +date: 2024-09-30 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 9bbfc58663f85..45f32f25805a1 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-09-29 +date: 2024-09-30 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 25295085caff0..8334becb04701 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-09-29 +date: 2024-09-30 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 8753ee37c761d..653094e76024d 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-09-29 +date: 2024-09-30 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 13516c8dd718e..a596cca06552a 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-09-29 +date: 2024-09-30 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 2db3c43a20bea..2529c1593ee0b 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-09-29 +date: 2024-09-30 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 2cfc6e7ba6ff8..b3ae5fe918f3c 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-09-29 +date: 2024-09-30 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 eb2ace6a25731..ed97be0e59a5e 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 65c0580f91b4d..43bd1340c50d0 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-09-29 +date: 2024-09-30 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 5f6272c9873c9..ed514a70e8f63 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-09-29 +date: 2024-09-30 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 3a1d797e36bf2..71e722b0117b1 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-09-29 +date: 2024-09-30 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 4b44a23dda409..9159ed2e6dcbb 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-09-29 +date: 2024-09-30 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 727e50442ef00..52df3b914b3be 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-09-29 +date: 2024-09-30 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 93b00c28f7831..1d5f7cd653be8 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-09-29 +date: 2024-09-30 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 00dac496e7775..45317d8df3425 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-09-29 +date: 2024-09-30 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 1303b13b9b7d0..fd319eafe595b 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-09-29 +date: 2024-09-30 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 5d34401628db1..42b11395fead7 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-09-29 +date: 2024-09-30 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 d8b2736cbd36f..8033db5116988 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-09-29 +date: 2024-09-30 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 e49efdec99827..04f3c093e845d 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-09-29 +date: 2024-09-30 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 85c2ef8dc96b5..81eb182c0e99f 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-09-29 +date: 2024-09-30 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 29a181dc790d1..530ef57462fa5 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-09-29 +date: 2024-09-30 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 6a5c32739c546..066241addf6bd 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-09-29 +date: 2024-09-30 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 5794f61674115..d5fb3191150ee 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-09-29 +date: 2024-09-30 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 36ceda9458dc9..7cf44073fabb9 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-09-29 +date: 2024-09-30 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 0ac17deb246d9..d2413ede759a6 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-09-29 +date: 2024-09-30 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 e9ffb88989c44..5d918e9b65c99 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-09-29 +date: 2024-09-30 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 6e163278b3d3f..28b74ac21f59f 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-09-29 +date: 2024-09-30 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 634552b1c3bbd..1042bc5052d61 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-09-29 +date: 2024-09-30 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 6ef6f687fe17a..2a83e18fa1fcc 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-09-29 +date: 2024-09-30 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 ac9e492326f89..54383966923b4 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-09-29 +date: 2024-09-30 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 6da3907aa9dd5..eddfd2633ba70 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-09-29 +date: 2024-09-30 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 46181168947f8..5543b5f15529f 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-09-29 +date: 2024-09-30 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 9f5a532dbbec8..bd2f8ad01e6f6 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-09-29 +date: 2024-09-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 4994e4141d45db4c404bafa034589b14262ef497 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Mon, 30 Sep 2024 10:10:23 +0300 Subject: [PATCH 05/60] fix: [Obs Alerts > Alert Detail][SCREEN READER]: H1 tag should not include secondary information: 0002 (#193958) Closes: https://github.com/elastic/observability-accessibility/issues/60 # Description Observability has a few pages that wrap related information like alert counts in the H1 tag. This presents a challenge to screen readers because all of that information now becomes the heading level one. It clogs up the Headings menu and makes it harder to reason about the page and what's primary information vs. secondary. # What was changed?: - `pageTitle` was renamed to `pageTitleContent`. The title portion was moved out of that component. - `ObservabilityPageTemplate.pageHeader` for the `Alert Detail` page was updated to separate the title from the other content. > [!NOTE] > Related PR: https://github.com/elastic/kibana/pull/193961 for `Rule Detail` # Screen: image --- .../alert_details/alert_details.test.tsx | 30 +++- .../pages/alert_details/alert_details.tsx | 24 +++- .../components/page_title.stories.tsx | 30 ++-- .../alert_details/components/page_title.tsx | 128 ------------------ ...e.test.tsx => page_title_content.test.tsx} | 51 +------ .../components/page_title_content.tsx | 101 ++++++++++++++ 6 files changed, 163 insertions(+), 201 deletions(-) delete mode 100644 x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title.tsx rename x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/{page_title.test.tsx => page_title_content.test.tsx} (58%) create mode 100644 x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title_content.tsx diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.test.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.test.tsx index 1089bb52b7ed4..877b0b965d1ce 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.test.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.test.tsx @@ -23,7 +23,7 @@ import { Subset } from '../../typings'; import { useKibana } from '../../utils/kibana_react'; import { kibanaStartMock } from '../../utils/kibana_react.mock'; import { render } from '../../utils/test_helper'; -import { AlertDetails } from './alert_details'; +import { AlertDetails, getPageTitle } from './alert_details'; import { alertDetail, alertWithNoData } from './mock/alert'; jest.mock('react-router-dom', () => ({ @@ -128,6 +128,34 @@ describe('Alert details', () => { config ); + describe('getPageTitle', () => { + const renderPageTitle = (ruleCategory: string) => + render( + + {getPageTitle(ruleCategory)} + , + config + ); + + it('should display Log threshold title', () => { + const { getByTestId } = renderPageTitle('Log threshold'); + + expect(getByTestId('title').textContent).toContain('Log threshold breached'); + }); + + it('should display Anomaly title', () => { + const { getByTestId } = renderPageTitle('Anomaly'); + + expect(getByTestId('title').textContent).toContain('Anomaly detected'); + }); + + it('should display Inventory title', () => { + const { getByTestId } = renderPageTitle('Inventory'); + + expect(getByTestId('title').textContent).toContain('Inventory threshold breached'); + }); + }); + it('should show the alert detail page with all necessary components', async () => { useFetchAlertDetailMock.mockReturnValue([false, alertDetail]); diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.tsx index 9561dc37b3e7f..e7533c226df58 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.tsx @@ -13,6 +13,7 @@ import { EuiPanel, EuiSpacer, EuiTabbedContent, + EuiLoadingSpinner, EuiTabbedContentTab, useEuiTheme, } from '@elastic/eui'; @@ -36,7 +37,7 @@ import { useKibana } from '../../utils/kibana_react'; import { useFetchRule } from '../../hooks/use_fetch_rule'; import { usePluginContext } from '../../hooks/use_plugin_context'; import { AlertData, useFetchAlertDetail } from '../../hooks/use_fetch_alert_detail'; -import { PageTitle, pageTitleContent } from './components/page_title'; +import { PageTitleContent } from './components/page_title_content'; import { HeaderActions } from './components/header_actions'; import { AlertSummary, AlertSummaryField } from './components/alert_summary'; import { CenterJustifiedSpinner } from '../../components/center_justified_spinner'; @@ -68,6 +69,16 @@ const RELATED_ALERTS_TAB_ID = 'related_alerts'; const ALERT_DETAILS_TAB_URL_STORAGE_KEY = 'tabId'; type TabId = typeof OVERVIEW_TAB_ID | typeof METADATA_TAB_ID | typeof RELATED_ALERTS_TAB_ID; +export const getPageTitle = (ruleCategory: string) => { + return i18n.translate('xpack.observability.pages.alertDetails.pageTitle.title', { + defaultMessage: + '{ruleCategory} {ruleCategory, select, Anomaly {detected} Inventory {threshold breached} other {breached}}', + values: { + ruleCategory, + }, + }); +}; + export function AlertDetails() { const { cases: { @@ -154,7 +165,7 @@ export function AlertDetails() { }, { text: alertDetail - ? pageTitleContent(alertDetail.formatted.fields[ALERT_RULE_CATEGORY]) + ? getPageTitle(alertDetail.formatted.fields[ALERT_RULE_CATEGORY]) : defaultBreadcrumb, }, ]); @@ -274,8 +285,13 @@ export function AlertDetails() { return ( + ), + children: ( + = (props: PageTitleProps) => ( +const Template: ComponentStory = (props: PageTitleContentProps) => ( ); -const TemplateWithPageTemplate: ComponentStory = (props: PageTitleProps) => ( +const TemplateWithPageTemplate: ComponentStory = ( + props: PageTitleContentProps +) => ( - } bottomBorder={false} /> + } bottomBorder={false} /> ); @@ -33,21 +34,8 @@ const defaultProps = { alert, }; -export const PageTitle = Template.bind({}); -PageTitle.args = defaultProps; - -export const PageTitleForAnomaly = Template.bind({}); -PageTitleForAnomaly.args = { - ...{ - alert: { - ...defaultProps.alert, - fields: { - ...defaultProps.alert.fields, - [ALERT_RULE_CATEGORY]: 'Anomaly', - }, - }, - }, -}; +export const PageTitleContent = Template.bind({}); +PageTitleContent.args = defaultProps; export const PageTitleUsedWithinPageTemplate = TemplateWithPageTemplate.bind({}); PageTitleUsedWithinPageTemplate.args = { diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title.tsx deleted file mode 100644 index 91ba564df7216..0000000000000 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title.tsx +++ /dev/null @@ -1,128 +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 moment from 'moment'; -import React from 'react'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiLoadingSpinner, - EuiSpacer, - EuiText, - useEuiTheme, -} from '@elastic/eui'; -import { AlertLifecycleStatusBadge } from '@kbn/alerts-ui-shared'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { - AlertStatus, - ALERT_DURATION, - ALERT_FLAPPING, - ALERT_RULE_CATEGORY, - TIMESTAMP, -} from '@kbn/rule-data-utils'; -import { css } from '@emotion/react'; -import { asDuration } from '../../../../common/utils/formatters'; -import { TopAlert } from '../../../typings/alerts'; - -export interface PageTitleProps { - alert: TopAlert | null; - alertStatus?: AlertStatus; - dataTestSubj: string; -} - -export function pageTitleContent(ruleCategory: string) { - return i18n.translate('xpack.observability.pages.alertDetails.pageTitle.title', { - defaultMessage: - '{ruleCategory} {ruleCategory, select, Anomaly {detected} Inventory {threshold breached} other {breached}}', - values: { - ruleCategory, - }, - }); -} - -export function PageTitle({ alert, alertStatus, dataTestSubj }: PageTitleProps) { - const { euiTheme } = useEuiTheme(); - - if (!alert) return ; - - return ( -
- - {pageTitleContent(alert.fields[ALERT_RULE_CATEGORY])} - - - - - {alertStatus && ( - - )} - - - - - - :  - - - {moment(Number(alert.start)).locale(i18n.getLocale()).fromNow()} - - - - - - - - :  - - - {asDuration(Number(alert.fields[ALERT_DURATION]))} - - - - - - - - :  - - - {moment(alert.fields[TIMESTAMP]?.toString()).locale(i18n.getLocale()).fromNow()} - - - - -
- ); -} diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title.test.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title_content.test.tsx similarity index 58% rename from x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title.test.tsx rename to x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title_content.test.tsx index d22e60eeef4d0..d65c4f84c99dd 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title.test.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title_content.test.tsx @@ -10,72 +10,29 @@ import { render } from '@testing-library/react'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { AlertStatus, - ALERT_RULE_CATEGORY, ALERT_STATUS, ALERT_STATUS_ACTIVE, ALERT_STATUS_RECOVERED, ALERT_STATUS_UNTRACKED, } from '@kbn/rule-data-utils'; -import { PageTitle, PageTitleProps } from './page_title'; +import { PageTitleContent, PageTitleContentProps } from './page_title_content'; import { alert } from '../mock/alert'; -describe('Page Title', () => { +describe('Page Title Content', () => { const defaultProps = { alert, alertStatus: ALERT_STATUS_ACTIVE as AlertStatus, dataTestSubj: 'ruleTypeId', }; - const renderComp = (props: PageTitleProps) => { + const renderComp = (props: PageTitleContentProps) => { return render( - + ); }; - it('should display Log threshold title', () => { - const { getByTestId } = renderComp(defaultProps); - - expect(getByTestId('ruleTypeId').textContent).toContain('Log threshold breached'); - }); - - it('should display Anomaly title', () => { - const props: PageTitleProps = { - alert: { - ...defaultProps.alert, - fields: { - ...defaultProps.alert.fields, - [ALERT_RULE_CATEGORY]: 'Anomaly', - }, - }, - alertStatus: defaultProps.alertStatus as AlertStatus, - dataTestSubj: defaultProps.dataTestSubj, - }; - - const { getByTestId } = renderComp(props); - - expect(getByTestId('ruleTypeId').textContent).toContain('Anomaly detected'); - }); - - it('should display Inventory title', () => { - const props: PageTitleProps = { - alert: { - ...defaultProps.alert, - fields: { - ...defaultProps.alert.fields, - [ALERT_RULE_CATEGORY]: 'Inventory', - }, - }, - alertStatus: defaultProps.alertStatus as AlertStatus, - dataTestSubj: defaultProps.dataTestSubj, - }; - - const { getByTestId } = renderComp(props); - - expect(getByTestId('ruleTypeId').textContent).toContain('Inventory threshold breached'); - }); - it('should display an active badge when alert is active', async () => { const { getByText } = renderComp(defaultProps); expect(getByText('Active')).toBeTruthy(); diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title_content.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title_content.tsx new file mode 100644 index 0000000000000..11fc6d0a476bb --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/page_title_content.tsx @@ -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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import moment from 'moment'; +import { EuiFlexGroup, EuiFlexItem, EuiText, useEuiTheme } from '@elastic/eui'; +import { AlertLifecycleStatusBadge } from '@kbn/alerts-ui-shared'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { AlertStatus, ALERT_DURATION, ALERT_FLAPPING, TIMESTAMP } from '@kbn/rule-data-utils'; +import { css } from '@emotion/react'; +import { asDuration } from '../../../../common/utils/formatters'; +import { TopAlert } from '../../../typings/alerts'; + +export interface PageTitleContentProps { + alert: TopAlert | null; + alertStatus?: AlertStatus; + dataTestSubj: string; +} + +export function PageTitleContent({ alert, alertStatus, dataTestSubj }: PageTitleContentProps) { + const { euiTheme } = useEuiTheme(); + + if (!alert) { + return null; + } + + return ( + + + {alertStatus && ( + + )} + + + + + + :  + + + {moment(Number(alert.start)).locale(i18n.getLocale()).fromNow()} + + + + + + + + :  + + + {asDuration(Number(alert.fields[ALERT_DURATION]))} + + + + + + + + :  + + + {moment(alert.fields[TIMESTAMP]?.toString()).locale(i18n.getLocale()).fromNow()} + + + + + ); +} From 35fea77bf12f23508d2802f152f6d13b05ac28d5 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Mon, 30 Sep 2024 17:35:13 +1000 Subject: [PATCH 06/60] [ES|QL] Update function metadata (#194371) This PR updates the function definitions and inline docs based on the latest metadata from Elasticsearch. Co-authored-by: Stratoula Kalafateli --- .../generated/aggregation_functions.ts | 42 ++++++++++++++++++- .../definitions/generated/scalar_functions.ts | 18 +++++++- .../sections/generated/scalar_functions.tsx | 36 ++++++++++++++-- 3 files changed, 91 insertions(+), 5 deletions(-) diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/generated/aggregation_functions.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/generated/aggregation_functions.ts index 210eec36811de..28b4cd4f66443 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/generated/aggregation_functions.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/generated/aggregation_functions.ts @@ -1434,7 +1434,7 @@ const topDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'long', + type: 'keyword', optional: false, }, { @@ -1451,8 +1451,48 @@ const topDefinition: FunctionDefinition = { acceptedValues: ['asc', 'desc'], }, ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + { + name: 'limit', + type: 'integer', + optional: false, + }, + { + name: 'order', + type: 'keyword', + optional: false, + }, + ], returnType: 'long', }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + { + name: 'limit', + type: 'integer', + optional: false, + }, + { + name: 'order', + type: 'keyword', + optional: false, + }, + ], + returnType: 'text', + }, ], supportedCommands: ['stats', 'inlinestats', 'metrics'], supportedOptions: undefined, diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/generated/scalar_functions.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/generated/scalar_functions.ts index aaf6929a4bccf..c0556db33db37 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/generated/scalar_functions.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/generated/scalar_functions.ts @@ -1421,7 +1421,7 @@ const dateFormatDefinition: FunctionDefinition = { supportedOptions: ['by'], validate: undefined, examples: [ - 'FROM employees\n| KEEP first_name, last_name, hire_date\n| EVAL hired = DATE_FORMAT("YYYY-MM-dd", hire_date)', + 'FROM employees\n| KEEP first_name, last_name, hire_date\n| EVAL hired = DATE_FORMAT("yyyy-MM-dd", hire_date)', ], }; @@ -7443,6 +7443,21 @@ const toCartesianshapeDefinition: FunctionDefinition = { ], }; +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const toDateNanosDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_date_nanos', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_date_nanos', { + defaultMessage: 'Converts an input to a nanosecond-resolution date value (aka date_nanos).', + }), + alias: undefined, + signatures: [], + supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [], +}; + // Do not edit this manually... generated by scripts/generate_function_definitions.ts const toDateperiodDefinition: FunctionDefinition = { type: 'eval', @@ -8777,6 +8792,7 @@ export const scalarFunctionDefinitions = [ toBooleanDefinition, toCartesianpointDefinition, toCartesianshapeDefinition, + toDateNanosDefinition, toDateperiodDefinition, toDatetimeDefinition, toDegreesDefinition, diff --git a/packages/kbn-language-documentation/src/sections/generated/scalar_functions.tsx b/packages/kbn-language-documentation/src/sections/generated/scalar_functions.tsx index 21d11e9c22a90..30e0de8fa8ac3 100644 --- a/packages/kbn-language-documentation/src/sections/generated/scalar_functions.tsx +++ b/packages/kbn-language-documentation/src/sections/generated/scalar_functions.tsx @@ -597,7 +597,7 @@ export const functions = { \`\`\` FROM employees | KEEP first_name, last_name, hire_date - | EVAL hired = DATE_FORMAT("YYYY-MM-dd", hire_date) + | EVAL hired = DATE_FORMAT("yyyy-MM-dd", hire_date) \`\`\` `, description: @@ -1190,7 +1190,7 @@ export const functions = { --> ### MV_AVG - Converts a multivalued field into a single valued field containing the average of all the values. + Converts a multivalued field into a single valued field containing the average of all of the values. \`\`\` ROW a=[3, 5, 1, 6] @@ -1676,7 +1676,7 @@ export const functions = { --> ### MV_SUM - Converts a multivalued field into a single valued field containing the sum of all the values. + Converts a multivalued field into a single valued field containing the sum of all of the values. \`\`\` ROW a=[3, 5, 6] @@ -2743,6 +2743,36 @@ export const functions = { | MV_EXPAND wkt | EVAL geom = TO_CARTESIANSHAPE(wkt) \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate('languageDocumentation.documentationESQL.to_date_nanos', { + defaultMessage: 'TO_DATE_NANOS', + }), + description: ( + + + ### TO_DATE_NANOS + Converts an input to a nanosecond-resolution date value (aka date_nanos). + + Note: The range for date nanos is 1970-01-01T00:00:00.000000000Z to 2262-04-11T23:47:16.854775807Z. Additionally, integers cannot be converted into date nanos, as the range of integer nanoseconds only covers about 2 seconds after epoch. `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', From 94120d9e40014fb82c82a1621321e12f65482e04 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Mon, 30 Sep 2024 17:39:17 +1000 Subject: [PATCH 07/60] [ES|QL] Update grammars (#194370) This PR updates the ES|QL grammars (lexer and parser) to match the latest version in Elasticsearch. Co-authored-by: Stratoula Kalafateli --- .../kbn-esql-ast/src/antlr/esql_parser.g4 | 9 - .../kbn-esql-ast/src/antlr/esql_parser.interp | 4 +- .../kbn-esql-ast/src/antlr/esql_parser.ts | 1144 ++++++++--------- .../src/antlr/esql_parser_listener.ts | 22 - 4 files changed, 510 insertions(+), 669 deletions(-) diff --git a/packages/kbn-esql-ast/src/antlr/esql_parser.g4 b/packages/kbn-esql-ast/src/antlr/esql_parser.g4 index 6e6858c8f7328..9fbfefb0a7c75 100644 --- a/packages/kbn-esql-ast/src/antlr/esql_parser.g4 +++ b/packages/kbn-esql-ast/src/antlr/esql_parser.g4 @@ -57,7 +57,6 @@ processingCommand // in development | {this.isDevVersion()}? inlinestatsCommand | {this.isDevVersion()}? lookupCommand - | {this.isDevVersion()}? matchCommand ; whereCommand @@ -313,12 +312,4 @@ lookupCommand inlinestatsCommand : DEV_INLINESTATS stats=fields (BY grouping=fields)? - ; - -matchCommand - : DEV_MATCH matchQuery - ; - -matchQuery - : QUOTED_STRING ; \ No newline at end of file diff --git a/packages/kbn-esql-ast/src/antlr/esql_parser.interp b/packages/kbn-esql-ast/src/antlr/esql_parser.interp index d1d6aae8c3f52..f7eed3e9be796 100644 --- a/packages/kbn-esql-ast/src/antlr/esql_parser.interp +++ b/packages/kbn-esql-ast/src/antlr/esql_parser.interp @@ -314,9 +314,7 @@ enrichCommand enrichWithClause lookupCommand inlinestatsCommand -matchCommand -matchQuery atn: -[4, 1, 125, 589, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 132, 8, 1, 10, 1, 12, 1, 135, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 144, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 164, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 176, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 183, 8, 5, 10, 5, 12, 5, 186, 9, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 193, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 199, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 207, 8, 5, 10, 5, 12, 5, 210, 9, 5, 1, 6, 1, 6, 3, 6, 214, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 221, 8, 6, 1, 6, 1, 6, 1, 6, 3, 6, 226, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 237, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 243, 8, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 5, 9, 251, 8, 9, 10, 9, 12, 9, 254, 9, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 264, 8, 10, 1, 10, 1, 10, 1, 10, 5, 10, 269, 8, 10, 10, 10, 12, 10, 272, 9, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 280, 8, 11, 10, 11, 12, 11, 283, 9, 11, 3, 11, 285, 8, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 5, 14, 297, 8, 14, 10, 14, 12, 14, 300, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 307, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 313, 8, 16, 10, 16, 12, 16, 316, 9, 16, 1, 16, 3, 16, 319, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 326, 8, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 3, 20, 334, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 340, 8, 21, 10, 21, 12, 21, 343, 9, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 353, 8, 23, 10, 23, 12, 23, 356, 9, 23, 1, 23, 3, 23, 359, 8, 23, 1, 23, 1, 23, 3, 23, 363, 8, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 3, 25, 370, 8, 25, 1, 25, 1, 25, 3, 25, 374, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 379, 8, 26, 10, 26, 12, 26, 382, 9, 26, 1, 27, 1, 27, 1, 27, 5, 27, 387, 8, 27, 10, 27, 12, 27, 390, 9, 27, 1, 28, 1, 28, 1, 28, 5, 28, 395, 8, 28, 10, 28, 12, 28, 398, 9, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 417, 8, 31, 10, 31, 12, 31, 420, 9, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 428, 8, 31, 10, 31, 12, 31, 431, 9, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 439, 8, 31, 10, 31, 12, 31, 442, 9, 31, 1, 31, 1, 31, 3, 31, 446, 8, 31, 1, 32, 1, 32, 3, 32, 450, 8, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 5, 34, 459, 8, 34, 10, 34, 12, 34, 462, 9, 34, 1, 35, 1, 35, 3, 35, 466, 8, 35, 1, 35, 1, 35, 3, 35, 470, 8, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 5, 38, 482, 8, 38, 10, 38, 12, 38, 485, 9, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 495, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 5, 43, 507, 8, 43, 10, 43, 12, 43, 510, 9, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 3, 46, 520, 8, 46, 1, 47, 3, 47, 523, 8, 47, 1, 47, 1, 47, 1, 48, 3, 48, 528, 8, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 553, 8, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 559, 8, 55, 10, 55, 12, 55, 562, 9, 55, 3, 55, 564, 8, 55, 1, 56, 1, 56, 1, 56, 3, 56, 569, 8, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 582, 8, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 0, 4, 2, 10, 18, 20, 61, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 0, 8, 1, 0, 60, 61, 1, 0, 62, 64, 2, 0, 27, 27, 77, 77, 1, 0, 68, 69, 2, 0, 32, 32, 36, 36, 2, 0, 39, 39, 42, 42, 2, 0, 38, 38, 52, 52, 2, 0, 53, 53, 55, 59, 613, 0, 122, 1, 0, 0, 0, 2, 125, 1, 0, 0, 0, 4, 143, 1, 0, 0, 0, 6, 163, 1, 0, 0, 0, 8, 165, 1, 0, 0, 0, 10, 198, 1, 0, 0, 0, 12, 225, 1, 0, 0, 0, 14, 227, 1, 0, 0, 0, 16, 236, 1, 0, 0, 0, 18, 242, 1, 0, 0, 0, 20, 263, 1, 0, 0, 0, 22, 273, 1, 0, 0, 0, 24, 288, 1, 0, 0, 0, 26, 290, 1, 0, 0, 0, 28, 293, 1, 0, 0, 0, 30, 306, 1, 0, 0, 0, 32, 308, 1, 0, 0, 0, 34, 325, 1, 0, 0, 0, 36, 327, 1, 0, 0, 0, 38, 329, 1, 0, 0, 0, 40, 333, 1, 0, 0, 0, 42, 335, 1, 0, 0, 0, 44, 344, 1, 0, 0, 0, 46, 348, 1, 0, 0, 0, 48, 364, 1, 0, 0, 0, 50, 367, 1, 0, 0, 0, 52, 375, 1, 0, 0, 0, 54, 383, 1, 0, 0, 0, 56, 391, 1, 0, 0, 0, 58, 399, 1, 0, 0, 0, 60, 401, 1, 0, 0, 0, 62, 445, 1, 0, 0, 0, 64, 449, 1, 0, 0, 0, 66, 451, 1, 0, 0, 0, 68, 454, 1, 0, 0, 0, 70, 463, 1, 0, 0, 0, 72, 471, 1, 0, 0, 0, 74, 474, 1, 0, 0, 0, 76, 477, 1, 0, 0, 0, 78, 486, 1, 0, 0, 0, 80, 490, 1, 0, 0, 0, 82, 496, 1, 0, 0, 0, 84, 500, 1, 0, 0, 0, 86, 503, 1, 0, 0, 0, 88, 511, 1, 0, 0, 0, 90, 515, 1, 0, 0, 0, 92, 519, 1, 0, 0, 0, 94, 522, 1, 0, 0, 0, 96, 527, 1, 0, 0, 0, 98, 531, 1, 0, 0, 0, 100, 533, 1, 0, 0, 0, 102, 535, 1, 0, 0, 0, 104, 538, 1, 0, 0, 0, 106, 542, 1, 0, 0, 0, 108, 545, 1, 0, 0, 0, 110, 548, 1, 0, 0, 0, 112, 568, 1, 0, 0, 0, 114, 572, 1, 0, 0, 0, 116, 577, 1, 0, 0, 0, 118, 583, 1, 0, 0, 0, 120, 586, 1, 0, 0, 0, 122, 123, 3, 2, 1, 0, 123, 124, 5, 0, 0, 1, 124, 1, 1, 0, 0, 0, 125, 126, 6, 1, -1, 0, 126, 127, 3, 4, 2, 0, 127, 133, 1, 0, 0, 0, 128, 129, 10, 1, 0, 0, 129, 130, 5, 26, 0, 0, 130, 132, 3, 6, 3, 0, 131, 128, 1, 0, 0, 0, 132, 135, 1, 0, 0, 0, 133, 131, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 3, 1, 0, 0, 0, 135, 133, 1, 0, 0, 0, 136, 144, 3, 102, 51, 0, 137, 144, 3, 32, 16, 0, 138, 144, 3, 108, 54, 0, 139, 144, 3, 26, 13, 0, 140, 144, 3, 106, 53, 0, 141, 142, 4, 2, 1, 0, 142, 144, 3, 46, 23, 0, 143, 136, 1, 0, 0, 0, 143, 137, 1, 0, 0, 0, 143, 138, 1, 0, 0, 0, 143, 139, 1, 0, 0, 0, 143, 140, 1, 0, 0, 0, 143, 141, 1, 0, 0, 0, 144, 5, 1, 0, 0, 0, 145, 164, 3, 48, 24, 0, 146, 164, 3, 8, 4, 0, 147, 164, 3, 72, 36, 0, 148, 164, 3, 66, 33, 0, 149, 164, 3, 50, 25, 0, 150, 164, 3, 68, 34, 0, 151, 164, 3, 74, 37, 0, 152, 164, 3, 76, 38, 0, 153, 164, 3, 80, 40, 0, 154, 164, 3, 82, 41, 0, 155, 164, 3, 110, 55, 0, 156, 164, 3, 84, 42, 0, 157, 158, 4, 3, 2, 0, 158, 164, 3, 116, 58, 0, 159, 160, 4, 3, 3, 0, 160, 164, 3, 114, 57, 0, 161, 162, 4, 3, 4, 0, 162, 164, 3, 118, 59, 0, 163, 145, 1, 0, 0, 0, 163, 146, 1, 0, 0, 0, 163, 147, 1, 0, 0, 0, 163, 148, 1, 0, 0, 0, 163, 149, 1, 0, 0, 0, 163, 150, 1, 0, 0, 0, 163, 151, 1, 0, 0, 0, 163, 152, 1, 0, 0, 0, 163, 153, 1, 0, 0, 0, 163, 154, 1, 0, 0, 0, 163, 155, 1, 0, 0, 0, 163, 156, 1, 0, 0, 0, 163, 157, 1, 0, 0, 0, 163, 159, 1, 0, 0, 0, 163, 161, 1, 0, 0, 0, 164, 7, 1, 0, 0, 0, 165, 166, 5, 17, 0, 0, 166, 167, 3, 10, 5, 0, 167, 9, 1, 0, 0, 0, 168, 169, 6, 5, -1, 0, 169, 170, 5, 45, 0, 0, 170, 199, 3, 10, 5, 8, 171, 199, 3, 16, 8, 0, 172, 199, 3, 12, 6, 0, 173, 175, 3, 16, 8, 0, 174, 176, 5, 45, 0, 0, 175, 174, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 178, 5, 40, 0, 0, 178, 179, 5, 44, 0, 0, 179, 184, 3, 16, 8, 0, 180, 181, 5, 35, 0, 0, 181, 183, 3, 16, 8, 0, 182, 180, 1, 0, 0, 0, 183, 186, 1, 0, 0, 0, 184, 182, 1, 0, 0, 0, 184, 185, 1, 0, 0, 0, 185, 187, 1, 0, 0, 0, 186, 184, 1, 0, 0, 0, 187, 188, 5, 51, 0, 0, 188, 199, 1, 0, 0, 0, 189, 190, 3, 16, 8, 0, 190, 192, 5, 41, 0, 0, 191, 193, 5, 45, 0, 0, 192, 191, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, 194, 195, 5, 46, 0, 0, 195, 199, 1, 0, 0, 0, 196, 197, 4, 5, 5, 0, 197, 199, 3, 14, 7, 0, 198, 168, 1, 0, 0, 0, 198, 171, 1, 0, 0, 0, 198, 172, 1, 0, 0, 0, 198, 173, 1, 0, 0, 0, 198, 189, 1, 0, 0, 0, 198, 196, 1, 0, 0, 0, 199, 208, 1, 0, 0, 0, 200, 201, 10, 5, 0, 0, 201, 202, 5, 31, 0, 0, 202, 207, 3, 10, 5, 6, 203, 204, 10, 4, 0, 0, 204, 205, 5, 48, 0, 0, 205, 207, 3, 10, 5, 5, 206, 200, 1, 0, 0, 0, 206, 203, 1, 0, 0, 0, 207, 210, 1, 0, 0, 0, 208, 206, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, 11, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 211, 213, 3, 16, 8, 0, 212, 214, 5, 45, 0, 0, 213, 212, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, 215, 1, 0, 0, 0, 215, 216, 5, 43, 0, 0, 216, 217, 3, 98, 49, 0, 217, 226, 1, 0, 0, 0, 218, 220, 3, 16, 8, 0, 219, 221, 5, 45, 0, 0, 220, 219, 1, 0, 0, 0, 220, 221, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 223, 5, 50, 0, 0, 223, 224, 3, 98, 49, 0, 224, 226, 1, 0, 0, 0, 225, 211, 1, 0, 0, 0, 225, 218, 1, 0, 0, 0, 226, 13, 1, 0, 0, 0, 227, 228, 3, 16, 8, 0, 228, 229, 5, 20, 0, 0, 229, 230, 3, 98, 49, 0, 230, 15, 1, 0, 0, 0, 231, 237, 3, 18, 9, 0, 232, 233, 3, 18, 9, 0, 233, 234, 3, 100, 50, 0, 234, 235, 3, 18, 9, 0, 235, 237, 1, 0, 0, 0, 236, 231, 1, 0, 0, 0, 236, 232, 1, 0, 0, 0, 237, 17, 1, 0, 0, 0, 238, 239, 6, 9, -1, 0, 239, 243, 3, 20, 10, 0, 240, 241, 7, 0, 0, 0, 241, 243, 3, 18, 9, 3, 242, 238, 1, 0, 0, 0, 242, 240, 1, 0, 0, 0, 243, 252, 1, 0, 0, 0, 244, 245, 10, 2, 0, 0, 245, 246, 7, 1, 0, 0, 246, 251, 3, 18, 9, 3, 247, 248, 10, 1, 0, 0, 248, 249, 7, 0, 0, 0, 249, 251, 3, 18, 9, 2, 250, 244, 1, 0, 0, 0, 250, 247, 1, 0, 0, 0, 251, 254, 1, 0, 0, 0, 252, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 19, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 255, 256, 6, 10, -1, 0, 256, 264, 3, 62, 31, 0, 257, 264, 3, 52, 26, 0, 258, 264, 3, 22, 11, 0, 259, 260, 5, 44, 0, 0, 260, 261, 3, 10, 5, 0, 261, 262, 5, 51, 0, 0, 262, 264, 1, 0, 0, 0, 263, 255, 1, 0, 0, 0, 263, 257, 1, 0, 0, 0, 263, 258, 1, 0, 0, 0, 263, 259, 1, 0, 0, 0, 264, 270, 1, 0, 0, 0, 265, 266, 10, 1, 0, 0, 266, 267, 5, 34, 0, 0, 267, 269, 3, 24, 12, 0, 268, 265, 1, 0, 0, 0, 269, 272, 1, 0, 0, 0, 270, 268, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 21, 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, 273, 274, 3, 58, 29, 0, 274, 284, 5, 44, 0, 0, 275, 285, 5, 62, 0, 0, 276, 281, 3, 10, 5, 0, 277, 278, 5, 35, 0, 0, 278, 280, 3, 10, 5, 0, 279, 277, 1, 0, 0, 0, 280, 283, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 285, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 284, 275, 1, 0, 0, 0, 284, 276, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 287, 5, 51, 0, 0, 287, 23, 1, 0, 0, 0, 288, 289, 3, 58, 29, 0, 289, 25, 1, 0, 0, 0, 290, 291, 5, 13, 0, 0, 291, 292, 3, 28, 14, 0, 292, 27, 1, 0, 0, 0, 293, 298, 3, 30, 15, 0, 294, 295, 5, 35, 0, 0, 295, 297, 3, 30, 15, 0, 296, 294, 1, 0, 0, 0, 297, 300, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 29, 1, 0, 0, 0, 300, 298, 1, 0, 0, 0, 301, 307, 3, 10, 5, 0, 302, 303, 3, 52, 26, 0, 303, 304, 5, 33, 0, 0, 304, 305, 3, 10, 5, 0, 305, 307, 1, 0, 0, 0, 306, 301, 1, 0, 0, 0, 306, 302, 1, 0, 0, 0, 307, 31, 1, 0, 0, 0, 308, 309, 5, 6, 0, 0, 309, 314, 3, 34, 17, 0, 310, 311, 5, 35, 0, 0, 311, 313, 3, 34, 17, 0, 312, 310, 1, 0, 0, 0, 313, 316, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 318, 1, 0, 0, 0, 316, 314, 1, 0, 0, 0, 317, 319, 3, 40, 20, 0, 318, 317, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 33, 1, 0, 0, 0, 320, 321, 3, 36, 18, 0, 321, 322, 5, 109, 0, 0, 322, 323, 3, 38, 19, 0, 323, 326, 1, 0, 0, 0, 324, 326, 3, 38, 19, 0, 325, 320, 1, 0, 0, 0, 325, 324, 1, 0, 0, 0, 326, 35, 1, 0, 0, 0, 327, 328, 5, 77, 0, 0, 328, 37, 1, 0, 0, 0, 329, 330, 7, 2, 0, 0, 330, 39, 1, 0, 0, 0, 331, 334, 3, 42, 21, 0, 332, 334, 3, 44, 22, 0, 333, 331, 1, 0, 0, 0, 333, 332, 1, 0, 0, 0, 334, 41, 1, 0, 0, 0, 335, 336, 5, 76, 0, 0, 336, 341, 5, 77, 0, 0, 337, 338, 5, 35, 0, 0, 338, 340, 5, 77, 0, 0, 339, 337, 1, 0, 0, 0, 340, 343, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 43, 1, 0, 0, 0, 343, 341, 1, 0, 0, 0, 344, 345, 5, 66, 0, 0, 345, 346, 3, 42, 21, 0, 346, 347, 5, 67, 0, 0, 347, 45, 1, 0, 0, 0, 348, 349, 5, 21, 0, 0, 349, 354, 3, 34, 17, 0, 350, 351, 5, 35, 0, 0, 351, 353, 3, 34, 17, 0, 352, 350, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 358, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 359, 3, 28, 14, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 362, 1, 0, 0, 0, 360, 361, 5, 30, 0, 0, 361, 363, 3, 28, 14, 0, 362, 360, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 47, 1, 0, 0, 0, 364, 365, 5, 4, 0, 0, 365, 366, 3, 28, 14, 0, 366, 49, 1, 0, 0, 0, 367, 369, 5, 16, 0, 0, 368, 370, 3, 28, 14, 0, 369, 368, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 373, 1, 0, 0, 0, 371, 372, 5, 30, 0, 0, 372, 374, 3, 28, 14, 0, 373, 371, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 51, 1, 0, 0, 0, 375, 380, 3, 58, 29, 0, 376, 377, 5, 37, 0, 0, 377, 379, 3, 58, 29, 0, 378, 376, 1, 0, 0, 0, 379, 382, 1, 0, 0, 0, 380, 378, 1, 0, 0, 0, 380, 381, 1, 0, 0, 0, 381, 53, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 383, 388, 3, 60, 30, 0, 384, 385, 5, 37, 0, 0, 385, 387, 3, 60, 30, 0, 386, 384, 1, 0, 0, 0, 387, 390, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 55, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 391, 396, 3, 54, 27, 0, 392, 393, 5, 35, 0, 0, 393, 395, 3, 54, 27, 0, 394, 392, 1, 0, 0, 0, 395, 398, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 57, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 399, 400, 7, 3, 0, 0, 400, 59, 1, 0, 0, 0, 401, 402, 5, 81, 0, 0, 402, 61, 1, 0, 0, 0, 403, 446, 5, 46, 0, 0, 404, 405, 3, 96, 48, 0, 405, 406, 5, 68, 0, 0, 406, 446, 1, 0, 0, 0, 407, 446, 3, 94, 47, 0, 408, 446, 3, 96, 48, 0, 409, 446, 3, 90, 45, 0, 410, 446, 3, 64, 32, 0, 411, 446, 3, 98, 49, 0, 412, 413, 5, 66, 0, 0, 413, 418, 3, 92, 46, 0, 414, 415, 5, 35, 0, 0, 415, 417, 3, 92, 46, 0, 416, 414, 1, 0, 0, 0, 417, 420, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 421, 1, 0, 0, 0, 420, 418, 1, 0, 0, 0, 421, 422, 5, 67, 0, 0, 422, 446, 1, 0, 0, 0, 423, 424, 5, 66, 0, 0, 424, 429, 3, 90, 45, 0, 425, 426, 5, 35, 0, 0, 426, 428, 3, 90, 45, 0, 427, 425, 1, 0, 0, 0, 428, 431, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 432, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 432, 433, 5, 67, 0, 0, 433, 446, 1, 0, 0, 0, 434, 435, 5, 66, 0, 0, 435, 440, 3, 98, 49, 0, 436, 437, 5, 35, 0, 0, 437, 439, 3, 98, 49, 0, 438, 436, 1, 0, 0, 0, 439, 442, 1, 0, 0, 0, 440, 438, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 443, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 443, 444, 5, 67, 0, 0, 444, 446, 1, 0, 0, 0, 445, 403, 1, 0, 0, 0, 445, 404, 1, 0, 0, 0, 445, 407, 1, 0, 0, 0, 445, 408, 1, 0, 0, 0, 445, 409, 1, 0, 0, 0, 445, 410, 1, 0, 0, 0, 445, 411, 1, 0, 0, 0, 445, 412, 1, 0, 0, 0, 445, 423, 1, 0, 0, 0, 445, 434, 1, 0, 0, 0, 446, 63, 1, 0, 0, 0, 447, 450, 5, 49, 0, 0, 448, 450, 5, 65, 0, 0, 449, 447, 1, 0, 0, 0, 449, 448, 1, 0, 0, 0, 450, 65, 1, 0, 0, 0, 451, 452, 5, 9, 0, 0, 452, 453, 5, 28, 0, 0, 453, 67, 1, 0, 0, 0, 454, 455, 5, 15, 0, 0, 455, 460, 3, 70, 35, 0, 456, 457, 5, 35, 0, 0, 457, 459, 3, 70, 35, 0, 458, 456, 1, 0, 0, 0, 459, 462, 1, 0, 0, 0, 460, 458, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 69, 1, 0, 0, 0, 462, 460, 1, 0, 0, 0, 463, 465, 3, 10, 5, 0, 464, 466, 7, 4, 0, 0, 465, 464, 1, 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 469, 1, 0, 0, 0, 467, 468, 5, 47, 0, 0, 468, 470, 7, 5, 0, 0, 469, 467, 1, 0, 0, 0, 469, 470, 1, 0, 0, 0, 470, 71, 1, 0, 0, 0, 471, 472, 5, 8, 0, 0, 472, 473, 3, 56, 28, 0, 473, 73, 1, 0, 0, 0, 474, 475, 5, 2, 0, 0, 475, 476, 3, 56, 28, 0, 476, 75, 1, 0, 0, 0, 477, 478, 5, 12, 0, 0, 478, 483, 3, 78, 39, 0, 479, 480, 5, 35, 0, 0, 480, 482, 3, 78, 39, 0, 481, 479, 1, 0, 0, 0, 482, 485, 1, 0, 0, 0, 483, 481, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 77, 1, 0, 0, 0, 485, 483, 1, 0, 0, 0, 486, 487, 3, 54, 27, 0, 487, 488, 5, 85, 0, 0, 488, 489, 3, 54, 27, 0, 489, 79, 1, 0, 0, 0, 490, 491, 5, 1, 0, 0, 491, 492, 3, 20, 10, 0, 492, 494, 3, 98, 49, 0, 493, 495, 3, 86, 43, 0, 494, 493, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 81, 1, 0, 0, 0, 496, 497, 5, 7, 0, 0, 497, 498, 3, 20, 10, 0, 498, 499, 3, 98, 49, 0, 499, 83, 1, 0, 0, 0, 500, 501, 5, 11, 0, 0, 501, 502, 3, 52, 26, 0, 502, 85, 1, 0, 0, 0, 503, 508, 3, 88, 44, 0, 504, 505, 5, 35, 0, 0, 505, 507, 3, 88, 44, 0, 506, 504, 1, 0, 0, 0, 507, 510, 1, 0, 0, 0, 508, 506, 1, 0, 0, 0, 508, 509, 1, 0, 0, 0, 509, 87, 1, 0, 0, 0, 510, 508, 1, 0, 0, 0, 511, 512, 3, 58, 29, 0, 512, 513, 5, 33, 0, 0, 513, 514, 3, 62, 31, 0, 514, 89, 1, 0, 0, 0, 515, 516, 7, 6, 0, 0, 516, 91, 1, 0, 0, 0, 517, 520, 3, 94, 47, 0, 518, 520, 3, 96, 48, 0, 519, 517, 1, 0, 0, 0, 519, 518, 1, 0, 0, 0, 520, 93, 1, 0, 0, 0, 521, 523, 7, 0, 0, 0, 522, 521, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 524, 1, 0, 0, 0, 524, 525, 5, 29, 0, 0, 525, 95, 1, 0, 0, 0, 526, 528, 7, 0, 0, 0, 527, 526, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 530, 5, 28, 0, 0, 530, 97, 1, 0, 0, 0, 531, 532, 5, 27, 0, 0, 532, 99, 1, 0, 0, 0, 533, 534, 7, 7, 0, 0, 534, 101, 1, 0, 0, 0, 535, 536, 5, 5, 0, 0, 536, 537, 3, 104, 52, 0, 537, 103, 1, 0, 0, 0, 538, 539, 5, 66, 0, 0, 539, 540, 3, 2, 1, 0, 540, 541, 5, 67, 0, 0, 541, 105, 1, 0, 0, 0, 542, 543, 5, 14, 0, 0, 543, 544, 5, 101, 0, 0, 544, 107, 1, 0, 0, 0, 545, 546, 5, 10, 0, 0, 546, 547, 5, 105, 0, 0, 547, 109, 1, 0, 0, 0, 548, 549, 5, 3, 0, 0, 549, 552, 5, 91, 0, 0, 550, 551, 5, 89, 0, 0, 551, 553, 3, 54, 27, 0, 552, 550, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 563, 1, 0, 0, 0, 554, 555, 5, 90, 0, 0, 555, 560, 3, 112, 56, 0, 556, 557, 5, 35, 0, 0, 557, 559, 3, 112, 56, 0, 558, 556, 1, 0, 0, 0, 559, 562, 1, 0, 0, 0, 560, 558, 1, 0, 0, 0, 560, 561, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 563, 554, 1, 0, 0, 0, 563, 564, 1, 0, 0, 0, 564, 111, 1, 0, 0, 0, 565, 566, 3, 54, 27, 0, 566, 567, 5, 33, 0, 0, 567, 569, 1, 0, 0, 0, 568, 565, 1, 0, 0, 0, 568, 569, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 571, 3, 54, 27, 0, 571, 113, 1, 0, 0, 0, 572, 573, 5, 19, 0, 0, 573, 574, 3, 34, 17, 0, 574, 575, 5, 89, 0, 0, 575, 576, 3, 56, 28, 0, 576, 115, 1, 0, 0, 0, 577, 578, 5, 18, 0, 0, 578, 581, 3, 28, 14, 0, 579, 580, 5, 30, 0, 0, 580, 582, 3, 28, 14, 0, 581, 579, 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 117, 1, 0, 0, 0, 583, 584, 5, 20, 0, 0, 584, 585, 3, 120, 60, 0, 585, 119, 1, 0, 0, 0, 586, 587, 5, 27, 0, 0, 587, 121, 1, 0, 0, 0, 54, 133, 143, 163, 175, 184, 192, 198, 206, 208, 213, 220, 225, 236, 242, 250, 252, 263, 270, 281, 284, 298, 306, 314, 318, 325, 333, 341, 354, 358, 362, 369, 373, 380, 388, 396, 418, 429, 440, 445, 449, 460, 465, 469, 483, 494, 508, 519, 522, 527, 552, 560, 563, 568, 581] \ No newline at end of file +[4, 1, 125, 578, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 128, 8, 1, 10, 1, 12, 1, 131, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 140, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 158, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 170, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 177, 8, 5, 10, 5, 12, 5, 180, 9, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 187, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 193, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 201, 8, 5, 10, 5, 12, 5, 204, 9, 5, 1, 6, 1, 6, 3, 6, 208, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 215, 8, 6, 1, 6, 1, 6, 1, 6, 3, 6, 220, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 231, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 237, 8, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 5, 9, 245, 8, 9, 10, 9, 12, 9, 248, 9, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 258, 8, 10, 1, 10, 1, 10, 1, 10, 5, 10, 263, 8, 10, 10, 10, 12, 10, 266, 9, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 274, 8, 11, 10, 11, 12, 11, 277, 9, 11, 3, 11, 279, 8, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 5, 14, 291, 8, 14, 10, 14, 12, 14, 294, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 301, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 307, 8, 16, 10, 16, 12, 16, 310, 9, 16, 1, 16, 3, 16, 313, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 320, 8, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 3, 20, 328, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 334, 8, 21, 10, 21, 12, 21, 337, 9, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 347, 8, 23, 10, 23, 12, 23, 350, 9, 23, 1, 23, 3, 23, 353, 8, 23, 1, 23, 1, 23, 3, 23, 357, 8, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 3, 25, 364, 8, 25, 1, 25, 1, 25, 3, 25, 368, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 373, 8, 26, 10, 26, 12, 26, 376, 9, 26, 1, 27, 1, 27, 1, 27, 5, 27, 381, 8, 27, 10, 27, 12, 27, 384, 9, 27, 1, 28, 1, 28, 1, 28, 5, 28, 389, 8, 28, 10, 28, 12, 28, 392, 9, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 411, 8, 31, 10, 31, 12, 31, 414, 9, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 422, 8, 31, 10, 31, 12, 31, 425, 9, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 433, 8, 31, 10, 31, 12, 31, 436, 9, 31, 1, 31, 1, 31, 3, 31, 440, 8, 31, 1, 32, 1, 32, 3, 32, 444, 8, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 5, 34, 453, 8, 34, 10, 34, 12, 34, 456, 9, 34, 1, 35, 1, 35, 3, 35, 460, 8, 35, 1, 35, 1, 35, 3, 35, 464, 8, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 5, 38, 476, 8, 38, 10, 38, 12, 38, 479, 9, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 489, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 5, 43, 501, 8, 43, 10, 43, 12, 43, 504, 9, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 3, 46, 514, 8, 46, 1, 47, 3, 47, 517, 8, 47, 1, 47, 1, 47, 1, 48, 3, 48, 522, 8, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 547, 8, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 553, 8, 55, 10, 55, 12, 55, 556, 9, 55, 3, 55, 558, 8, 55, 1, 56, 1, 56, 1, 56, 3, 56, 563, 8, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 576, 8, 58, 1, 58, 0, 4, 2, 10, 18, 20, 59, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 0, 8, 1, 0, 60, 61, 1, 0, 62, 64, 2, 0, 27, 27, 77, 77, 1, 0, 68, 69, 2, 0, 32, 32, 36, 36, 2, 0, 39, 39, 42, 42, 2, 0, 38, 38, 52, 52, 2, 0, 53, 53, 55, 59, 603, 0, 118, 1, 0, 0, 0, 2, 121, 1, 0, 0, 0, 4, 139, 1, 0, 0, 0, 6, 157, 1, 0, 0, 0, 8, 159, 1, 0, 0, 0, 10, 192, 1, 0, 0, 0, 12, 219, 1, 0, 0, 0, 14, 221, 1, 0, 0, 0, 16, 230, 1, 0, 0, 0, 18, 236, 1, 0, 0, 0, 20, 257, 1, 0, 0, 0, 22, 267, 1, 0, 0, 0, 24, 282, 1, 0, 0, 0, 26, 284, 1, 0, 0, 0, 28, 287, 1, 0, 0, 0, 30, 300, 1, 0, 0, 0, 32, 302, 1, 0, 0, 0, 34, 319, 1, 0, 0, 0, 36, 321, 1, 0, 0, 0, 38, 323, 1, 0, 0, 0, 40, 327, 1, 0, 0, 0, 42, 329, 1, 0, 0, 0, 44, 338, 1, 0, 0, 0, 46, 342, 1, 0, 0, 0, 48, 358, 1, 0, 0, 0, 50, 361, 1, 0, 0, 0, 52, 369, 1, 0, 0, 0, 54, 377, 1, 0, 0, 0, 56, 385, 1, 0, 0, 0, 58, 393, 1, 0, 0, 0, 60, 395, 1, 0, 0, 0, 62, 439, 1, 0, 0, 0, 64, 443, 1, 0, 0, 0, 66, 445, 1, 0, 0, 0, 68, 448, 1, 0, 0, 0, 70, 457, 1, 0, 0, 0, 72, 465, 1, 0, 0, 0, 74, 468, 1, 0, 0, 0, 76, 471, 1, 0, 0, 0, 78, 480, 1, 0, 0, 0, 80, 484, 1, 0, 0, 0, 82, 490, 1, 0, 0, 0, 84, 494, 1, 0, 0, 0, 86, 497, 1, 0, 0, 0, 88, 505, 1, 0, 0, 0, 90, 509, 1, 0, 0, 0, 92, 513, 1, 0, 0, 0, 94, 516, 1, 0, 0, 0, 96, 521, 1, 0, 0, 0, 98, 525, 1, 0, 0, 0, 100, 527, 1, 0, 0, 0, 102, 529, 1, 0, 0, 0, 104, 532, 1, 0, 0, 0, 106, 536, 1, 0, 0, 0, 108, 539, 1, 0, 0, 0, 110, 542, 1, 0, 0, 0, 112, 562, 1, 0, 0, 0, 114, 566, 1, 0, 0, 0, 116, 571, 1, 0, 0, 0, 118, 119, 3, 2, 1, 0, 119, 120, 5, 0, 0, 1, 120, 1, 1, 0, 0, 0, 121, 122, 6, 1, -1, 0, 122, 123, 3, 4, 2, 0, 123, 129, 1, 0, 0, 0, 124, 125, 10, 1, 0, 0, 125, 126, 5, 26, 0, 0, 126, 128, 3, 6, 3, 0, 127, 124, 1, 0, 0, 0, 128, 131, 1, 0, 0, 0, 129, 127, 1, 0, 0, 0, 129, 130, 1, 0, 0, 0, 130, 3, 1, 0, 0, 0, 131, 129, 1, 0, 0, 0, 132, 140, 3, 102, 51, 0, 133, 140, 3, 32, 16, 0, 134, 140, 3, 108, 54, 0, 135, 140, 3, 26, 13, 0, 136, 140, 3, 106, 53, 0, 137, 138, 4, 2, 1, 0, 138, 140, 3, 46, 23, 0, 139, 132, 1, 0, 0, 0, 139, 133, 1, 0, 0, 0, 139, 134, 1, 0, 0, 0, 139, 135, 1, 0, 0, 0, 139, 136, 1, 0, 0, 0, 139, 137, 1, 0, 0, 0, 140, 5, 1, 0, 0, 0, 141, 158, 3, 48, 24, 0, 142, 158, 3, 8, 4, 0, 143, 158, 3, 72, 36, 0, 144, 158, 3, 66, 33, 0, 145, 158, 3, 50, 25, 0, 146, 158, 3, 68, 34, 0, 147, 158, 3, 74, 37, 0, 148, 158, 3, 76, 38, 0, 149, 158, 3, 80, 40, 0, 150, 158, 3, 82, 41, 0, 151, 158, 3, 110, 55, 0, 152, 158, 3, 84, 42, 0, 153, 154, 4, 3, 2, 0, 154, 158, 3, 116, 58, 0, 155, 156, 4, 3, 3, 0, 156, 158, 3, 114, 57, 0, 157, 141, 1, 0, 0, 0, 157, 142, 1, 0, 0, 0, 157, 143, 1, 0, 0, 0, 157, 144, 1, 0, 0, 0, 157, 145, 1, 0, 0, 0, 157, 146, 1, 0, 0, 0, 157, 147, 1, 0, 0, 0, 157, 148, 1, 0, 0, 0, 157, 149, 1, 0, 0, 0, 157, 150, 1, 0, 0, 0, 157, 151, 1, 0, 0, 0, 157, 152, 1, 0, 0, 0, 157, 153, 1, 0, 0, 0, 157, 155, 1, 0, 0, 0, 158, 7, 1, 0, 0, 0, 159, 160, 5, 17, 0, 0, 160, 161, 3, 10, 5, 0, 161, 9, 1, 0, 0, 0, 162, 163, 6, 5, -1, 0, 163, 164, 5, 45, 0, 0, 164, 193, 3, 10, 5, 8, 165, 193, 3, 16, 8, 0, 166, 193, 3, 12, 6, 0, 167, 169, 3, 16, 8, 0, 168, 170, 5, 45, 0, 0, 169, 168, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 171, 1, 0, 0, 0, 171, 172, 5, 40, 0, 0, 172, 173, 5, 44, 0, 0, 173, 178, 3, 16, 8, 0, 174, 175, 5, 35, 0, 0, 175, 177, 3, 16, 8, 0, 176, 174, 1, 0, 0, 0, 177, 180, 1, 0, 0, 0, 178, 176, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 181, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 181, 182, 5, 51, 0, 0, 182, 193, 1, 0, 0, 0, 183, 184, 3, 16, 8, 0, 184, 186, 5, 41, 0, 0, 185, 187, 5, 45, 0, 0, 186, 185, 1, 0, 0, 0, 186, 187, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 189, 5, 46, 0, 0, 189, 193, 1, 0, 0, 0, 190, 191, 4, 5, 4, 0, 191, 193, 3, 14, 7, 0, 192, 162, 1, 0, 0, 0, 192, 165, 1, 0, 0, 0, 192, 166, 1, 0, 0, 0, 192, 167, 1, 0, 0, 0, 192, 183, 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 193, 202, 1, 0, 0, 0, 194, 195, 10, 5, 0, 0, 195, 196, 5, 31, 0, 0, 196, 201, 3, 10, 5, 6, 197, 198, 10, 4, 0, 0, 198, 199, 5, 48, 0, 0, 199, 201, 3, 10, 5, 5, 200, 194, 1, 0, 0, 0, 200, 197, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 11, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 205, 207, 3, 16, 8, 0, 206, 208, 5, 45, 0, 0, 207, 206, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, 210, 5, 43, 0, 0, 210, 211, 3, 98, 49, 0, 211, 220, 1, 0, 0, 0, 212, 214, 3, 16, 8, 0, 213, 215, 5, 45, 0, 0, 214, 213, 1, 0, 0, 0, 214, 215, 1, 0, 0, 0, 215, 216, 1, 0, 0, 0, 216, 217, 5, 50, 0, 0, 217, 218, 3, 98, 49, 0, 218, 220, 1, 0, 0, 0, 219, 205, 1, 0, 0, 0, 219, 212, 1, 0, 0, 0, 220, 13, 1, 0, 0, 0, 221, 222, 3, 16, 8, 0, 222, 223, 5, 20, 0, 0, 223, 224, 3, 98, 49, 0, 224, 15, 1, 0, 0, 0, 225, 231, 3, 18, 9, 0, 226, 227, 3, 18, 9, 0, 227, 228, 3, 100, 50, 0, 228, 229, 3, 18, 9, 0, 229, 231, 1, 0, 0, 0, 230, 225, 1, 0, 0, 0, 230, 226, 1, 0, 0, 0, 231, 17, 1, 0, 0, 0, 232, 233, 6, 9, -1, 0, 233, 237, 3, 20, 10, 0, 234, 235, 7, 0, 0, 0, 235, 237, 3, 18, 9, 3, 236, 232, 1, 0, 0, 0, 236, 234, 1, 0, 0, 0, 237, 246, 1, 0, 0, 0, 238, 239, 10, 2, 0, 0, 239, 240, 7, 1, 0, 0, 240, 245, 3, 18, 9, 3, 241, 242, 10, 1, 0, 0, 242, 243, 7, 0, 0, 0, 243, 245, 3, 18, 9, 2, 244, 238, 1, 0, 0, 0, 244, 241, 1, 0, 0, 0, 245, 248, 1, 0, 0, 0, 246, 244, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 19, 1, 0, 0, 0, 248, 246, 1, 0, 0, 0, 249, 250, 6, 10, -1, 0, 250, 258, 3, 62, 31, 0, 251, 258, 3, 52, 26, 0, 252, 258, 3, 22, 11, 0, 253, 254, 5, 44, 0, 0, 254, 255, 3, 10, 5, 0, 255, 256, 5, 51, 0, 0, 256, 258, 1, 0, 0, 0, 257, 249, 1, 0, 0, 0, 257, 251, 1, 0, 0, 0, 257, 252, 1, 0, 0, 0, 257, 253, 1, 0, 0, 0, 258, 264, 1, 0, 0, 0, 259, 260, 10, 1, 0, 0, 260, 261, 5, 34, 0, 0, 261, 263, 3, 24, 12, 0, 262, 259, 1, 0, 0, 0, 263, 266, 1, 0, 0, 0, 264, 262, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 21, 1, 0, 0, 0, 266, 264, 1, 0, 0, 0, 267, 268, 3, 58, 29, 0, 268, 278, 5, 44, 0, 0, 269, 279, 5, 62, 0, 0, 270, 275, 3, 10, 5, 0, 271, 272, 5, 35, 0, 0, 272, 274, 3, 10, 5, 0, 273, 271, 1, 0, 0, 0, 274, 277, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 279, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 278, 269, 1, 0, 0, 0, 278, 270, 1, 0, 0, 0, 278, 279, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 281, 5, 51, 0, 0, 281, 23, 1, 0, 0, 0, 282, 283, 3, 58, 29, 0, 283, 25, 1, 0, 0, 0, 284, 285, 5, 13, 0, 0, 285, 286, 3, 28, 14, 0, 286, 27, 1, 0, 0, 0, 287, 292, 3, 30, 15, 0, 288, 289, 5, 35, 0, 0, 289, 291, 3, 30, 15, 0, 290, 288, 1, 0, 0, 0, 291, 294, 1, 0, 0, 0, 292, 290, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 29, 1, 0, 0, 0, 294, 292, 1, 0, 0, 0, 295, 301, 3, 10, 5, 0, 296, 297, 3, 52, 26, 0, 297, 298, 5, 33, 0, 0, 298, 299, 3, 10, 5, 0, 299, 301, 1, 0, 0, 0, 300, 295, 1, 0, 0, 0, 300, 296, 1, 0, 0, 0, 301, 31, 1, 0, 0, 0, 302, 303, 5, 6, 0, 0, 303, 308, 3, 34, 17, 0, 304, 305, 5, 35, 0, 0, 305, 307, 3, 34, 17, 0, 306, 304, 1, 0, 0, 0, 307, 310, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 312, 1, 0, 0, 0, 310, 308, 1, 0, 0, 0, 311, 313, 3, 40, 20, 0, 312, 311, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 33, 1, 0, 0, 0, 314, 315, 3, 36, 18, 0, 315, 316, 5, 109, 0, 0, 316, 317, 3, 38, 19, 0, 317, 320, 1, 0, 0, 0, 318, 320, 3, 38, 19, 0, 319, 314, 1, 0, 0, 0, 319, 318, 1, 0, 0, 0, 320, 35, 1, 0, 0, 0, 321, 322, 5, 77, 0, 0, 322, 37, 1, 0, 0, 0, 323, 324, 7, 2, 0, 0, 324, 39, 1, 0, 0, 0, 325, 328, 3, 42, 21, 0, 326, 328, 3, 44, 22, 0, 327, 325, 1, 0, 0, 0, 327, 326, 1, 0, 0, 0, 328, 41, 1, 0, 0, 0, 329, 330, 5, 76, 0, 0, 330, 335, 5, 77, 0, 0, 331, 332, 5, 35, 0, 0, 332, 334, 5, 77, 0, 0, 333, 331, 1, 0, 0, 0, 334, 337, 1, 0, 0, 0, 335, 333, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 43, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 339, 5, 66, 0, 0, 339, 340, 3, 42, 21, 0, 340, 341, 5, 67, 0, 0, 341, 45, 1, 0, 0, 0, 342, 343, 5, 21, 0, 0, 343, 348, 3, 34, 17, 0, 344, 345, 5, 35, 0, 0, 345, 347, 3, 34, 17, 0, 346, 344, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 352, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 351, 353, 3, 28, 14, 0, 352, 351, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 355, 5, 30, 0, 0, 355, 357, 3, 28, 14, 0, 356, 354, 1, 0, 0, 0, 356, 357, 1, 0, 0, 0, 357, 47, 1, 0, 0, 0, 358, 359, 5, 4, 0, 0, 359, 360, 3, 28, 14, 0, 360, 49, 1, 0, 0, 0, 361, 363, 5, 16, 0, 0, 362, 364, 3, 28, 14, 0, 363, 362, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 367, 1, 0, 0, 0, 365, 366, 5, 30, 0, 0, 366, 368, 3, 28, 14, 0, 367, 365, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 51, 1, 0, 0, 0, 369, 374, 3, 58, 29, 0, 370, 371, 5, 37, 0, 0, 371, 373, 3, 58, 29, 0, 372, 370, 1, 0, 0, 0, 373, 376, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 53, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 377, 382, 3, 60, 30, 0, 378, 379, 5, 37, 0, 0, 379, 381, 3, 60, 30, 0, 380, 378, 1, 0, 0, 0, 381, 384, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 55, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 385, 390, 3, 54, 27, 0, 386, 387, 5, 35, 0, 0, 387, 389, 3, 54, 27, 0, 388, 386, 1, 0, 0, 0, 389, 392, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 391, 57, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 393, 394, 7, 3, 0, 0, 394, 59, 1, 0, 0, 0, 395, 396, 5, 81, 0, 0, 396, 61, 1, 0, 0, 0, 397, 440, 5, 46, 0, 0, 398, 399, 3, 96, 48, 0, 399, 400, 5, 68, 0, 0, 400, 440, 1, 0, 0, 0, 401, 440, 3, 94, 47, 0, 402, 440, 3, 96, 48, 0, 403, 440, 3, 90, 45, 0, 404, 440, 3, 64, 32, 0, 405, 440, 3, 98, 49, 0, 406, 407, 5, 66, 0, 0, 407, 412, 3, 92, 46, 0, 408, 409, 5, 35, 0, 0, 409, 411, 3, 92, 46, 0, 410, 408, 1, 0, 0, 0, 411, 414, 1, 0, 0, 0, 412, 410, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 415, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 415, 416, 5, 67, 0, 0, 416, 440, 1, 0, 0, 0, 417, 418, 5, 66, 0, 0, 418, 423, 3, 90, 45, 0, 419, 420, 5, 35, 0, 0, 420, 422, 3, 90, 45, 0, 421, 419, 1, 0, 0, 0, 422, 425, 1, 0, 0, 0, 423, 421, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 426, 1, 0, 0, 0, 425, 423, 1, 0, 0, 0, 426, 427, 5, 67, 0, 0, 427, 440, 1, 0, 0, 0, 428, 429, 5, 66, 0, 0, 429, 434, 3, 98, 49, 0, 430, 431, 5, 35, 0, 0, 431, 433, 3, 98, 49, 0, 432, 430, 1, 0, 0, 0, 433, 436, 1, 0, 0, 0, 434, 432, 1, 0, 0, 0, 434, 435, 1, 0, 0, 0, 435, 437, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 437, 438, 5, 67, 0, 0, 438, 440, 1, 0, 0, 0, 439, 397, 1, 0, 0, 0, 439, 398, 1, 0, 0, 0, 439, 401, 1, 0, 0, 0, 439, 402, 1, 0, 0, 0, 439, 403, 1, 0, 0, 0, 439, 404, 1, 0, 0, 0, 439, 405, 1, 0, 0, 0, 439, 406, 1, 0, 0, 0, 439, 417, 1, 0, 0, 0, 439, 428, 1, 0, 0, 0, 440, 63, 1, 0, 0, 0, 441, 444, 5, 49, 0, 0, 442, 444, 5, 65, 0, 0, 443, 441, 1, 0, 0, 0, 443, 442, 1, 0, 0, 0, 444, 65, 1, 0, 0, 0, 445, 446, 5, 9, 0, 0, 446, 447, 5, 28, 0, 0, 447, 67, 1, 0, 0, 0, 448, 449, 5, 15, 0, 0, 449, 454, 3, 70, 35, 0, 450, 451, 5, 35, 0, 0, 451, 453, 3, 70, 35, 0, 452, 450, 1, 0, 0, 0, 453, 456, 1, 0, 0, 0, 454, 452, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 69, 1, 0, 0, 0, 456, 454, 1, 0, 0, 0, 457, 459, 3, 10, 5, 0, 458, 460, 7, 4, 0, 0, 459, 458, 1, 0, 0, 0, 459, 460, 1, 0, 0, 0, 460, 463, 1, 0, 0, 0, 461, 462, 5, 47, 0, 0, 462, 464, 7, 5, 0, 0, 463, 461, 1, 0, 0, 0, 463, 464, 1, 0, 0, 0, 464, 71, 1, 0, 0, 0, 465, 466, 5, 8, 0, 0, 466, 467, 3, 56, 28, 0, 467, 73, 1, 0, 0, 0, 468, 469, 5, 2, 0, 0, 469, 470, 3, 56, 28, 0, 470, 75, 1, 0, 0, 0, 471, 472, 5, 12, 0, 0, 472, 477, 3, 78, 39, 0, 473, 474, 5, 35, 0, 0, 474, 476, 3, 78, 39, 0, 475, 473, 1, 0, 0, 0, 476, 479, 1, 0, 0, 0, 477, 475, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 77, 1, 0, 0, 0, 479, 477, 1, 0, 0, 0, 480, 481, 3, 54, 27, 0, 481, 482, 5, 85, 0, 0, 482, 483, 3, 54, 27, 0, 483, 79, 1, 0, 0, 0, 484, 485, 5, 1, 0, 0, 485, 486, 3, 20, 10, 0, 486, 488, 3, 98, 49, 0, 487, 489, 3, 86, 43, 0, 488, 487, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 81, 1, 0, 0, 0, 490, 491, 5, 7, 0, 0, 491, 492, 3, 20, 10, 0, 492, 493, 3, 98, 49, 0, 493, 83, 1, 0, 0, 0, 494, 495, 5, 11, 0, 0, 495, 496, 3, 52, 26, 0, 496, 85, 1, 0, 0, 0, 497, 502, 3, 88, 44, 0, 498, 499, 5, 35, 0, 0, 499, 501, 3, 88, 44, 0, 500, 498, 1, 0, 0, 0, 501, 504, 1, 0, 0, 0, 502, 500, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 87, 1, 0, 0, 0, 504, 502, 1, 0, 0, 0, 505, 506, 3, 58, 29, 0, 506, 507, 5, 33, 0, 0, 507, 508, 3, 62, 31, 0, 508, 89, 1, 0, 0, 0, 509, 510, 7, 6, 0, 0, 510, 91, 1, 0, 0, 0, 511, 514, 3, 94, 47, 0, 512, 514, 3, 96, 48, 0, 513, 511, 1, 0, 0, 0, 513, 512, 1, 0, 0, 0, 514, 93, 1, 0, 0, 0, 515, 517, 7, 0, 0, 0, 516, 515, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 519, 5, 29, 0, 0, 519, 95, 1, 0, 0, 0, 520, 522, 7, 0, 0, 0, 521, 520, 1, 0, 0, 0, 521, 522, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 524, 5, 28, 0, 0, 524, 97, 1, 0, 0, 0, 525, 526, 5, 27, 0, 0, 526, 99, 1, 0, 0, 0, 527, 528, 7, 7, 0, 0, 528, 101, 1, 0, 0, 0, 529, 530, 5, 5, 0, 0, 530, 531, 3, 104, 52, 0, 531, 103, 1, 0, 0, 0, 532, 533, 5, 66, 0, 0, 533, 534, 3, 2, 1, 0, 534, 535, 5, 67, 0, 0, 535, 105, 1, 0, 0, 0, 536, 537, 5, 14, 0, 0, 537, 538, 5, 101, 0, 0, 538, 107, 1, 0, 0, 0, 539, 540, 5, 10, 0, 0, 540, 541, 5, 105, 0, 0, 541, 109, 1, 0, 0, 0, 542, 543, 5, 3, 0, 0, 543, 546, 5, 91, 0, 0, 544, 545, 5, 89, 0, 0, 545, 547, 3, 54, 27, 0, 546, 544, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 557, 1, 0, 0, 0, 548, 549, 5, 90, 0, 0, 549, 554, 3, 112, 56, 0, 550, 551, 5, 35, 0, 0, 551, 553, 3, 112, 56, 0, 552, 550, 1, 0, 0, 0, 553, 556, 1, 0, 0, 0, 554, 552, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 558, 1, 0, 0, 0, 556, 554, 1, 0, 0, 0, 557, 548, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 111, 1, 0, 0, 0, 559, 560, 3, 54, 27, 0, 560, 561, 5, 33, 0, 0, 561, 563, 1, 0, 0, 0, 562, 559, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 564, 1, 0, 0, 0, 564, 565, 3, 54, 27, 0, 565, 113, 1, 0, 0, 0, 566, 567, 5, 19, 0, 0, 567, 568, 3, 34, 17, 0, 568, 569, 5, 89, 0, 0, 569, 570, 3, 56, 28, 0, 570, 115, 1, 0, 0, 0, 571, 572, 5, 18, 0, 0, 572, 575, 3, 28, 14, 0, 573, 574, 5, 30, 0, 0, 574, 576, 3, 28, 14, 0, 575, 573, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 117, 1, 0, 0, 0, 54, 129, 139, 157, 169, 178, 186, 192, 200, 202, 207, 214, 219, 230, 236, 244, 246, 257, 264, 275, 278, 292, 300, 308, 312, 319, 327, 335, 348, 352, 356, 363, 367, 374, 382, 390, 412, 423, 434, 439, 443, 454, 459, 463, 477, 488, 502, 513, 516, 521, 546, 554, 557, 562, 575] \ No newline at end of file diff --git a/packages/kbn-esql-ast/src/antlr/esql_parser.ts b/packages/kbn-esql-ast/src/antlr/esql_parser.ts index 47453c39b1466..fd01072600784 100644 --- a/packages/kbn-esql-ast/src/antlr/esql_parser.ts +++ b/packages/kbn-esql-ast/src/antlr/esql_parser.ts @@ -213,8 +213,6 @@ export default class esql_parser extends parser_config { public static readonly RULE_enrichWithClause = 56; public static readonly RULE_lookupCommand = 57; public static readonly RULE_inlinestatsCommand = 58; - public static readonly RULE_matchCommand = 59; - public static readonly RULE_matchQuery = 60; public static readonly literalNames: (string | null)[] = [ null, "'dissect'", "'drop'", "'enrich'", "'eval'", "'explain'", @@ -380,8 +378,7 @@ export default class esql_parser extends parser_config { "mvExpandCommand", "commandOptions", "commandOption", "booleanValue", "numericValue", "decimalValue", "integerValue", "string", "comparisonOperator", "explainCommand", "subqueryExpression", "showCommand", "metaCommand", - "enrichCommand", "enrichWithClause", "lookupCommand", "inlinestatsCommand", - "matchCommand", "matchQuery", + "enrichCommand", "enrichWithClause", "lookupCommand", "inlinestatsCommand", ]; public get grammarFileName(): string { return "esql_parser.g4"; } public get literalNames(): (string | null)[] { return esql_parser.literalNames; } @@ -404,9 +401,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 122; + this.state = 118; this.query(0); - this.state = 123; + this.state = 119; this.match(esql_parser.EOF); } } @@ -448,11 +445,11 @@ export default class esql_parser extends parser_config { this._ctx = localctx; _prevctx = localctx; - this.state = 126; + this.state = 122; this.sourceCommand(); } this._ctx.stop = this._input.LT(-1); - this.state = 133; + this.state = 129; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 0, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -465,18 +462,18 @@ export default class esql_parser extends parser_config { { localctx = new CompositeQueryContext(this, new QueryContext(this, _parentctx, _parentState)); this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_query); - this.state = 128; + this.state = 124; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 129; + this.state = 125; this.match(esql_parser.PIPE); - this.state = 130; + this.state = 126; this.processingCommand(); } } } - this.state = 135; + this.state = 131; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 0, this._ctx); } @@ -501,52 +498,52 @@ export default class esql_parser extends parser_config { let localctx: SourceCommandContext = new SourceCommandContext(this, this._ctx, this.state); this.enterRule(localctx, 4, esql_parser.RULE_sourceCommand); try { - this.state = 143; + this.state = 139; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 1, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 136; + this.state = 132; this.explainCommand(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 137; + this.state = 133; this.fromCommand(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 138; + this.state = 134; this.metaCommand(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 139; + this.state = 135; this.rowCommand(); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 140; + this.state = 136; this.showCommand(); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 141; + this.state = 137; if (!(this.isDevVersion())) { throw this.createFailedPredicateException("this.isDevVersion()"); } - this.state = 142; + this.state = 138; this.metricsCommand(); } break; @@ -571,126 +568,115 @@ export default class esql_parser extends parser_config { let localctx: ProcessingCommandContext = new ProcessingCommandContext(this, this._ctx, this.state); this.enterRule(localctx, 6, esql_parser.RULE_processingCommand); try { - this.state = 163; + this.state = 157; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 2, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 145; + this.state = 141; this.evalCommand(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 146; + this.state = 142; this.whereCommand(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 147; + this.state = 143; this.keepCommand(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 148; + this.state = 144; this.limitCommand(); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 149; + this.state = 145; this.statsCommand(); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 150; + this.state = 146; this.sortCommand(); } break; case 7: this.enterOuterAlt(localctx, 7); { - this.state = 151; + this.state = 147; this.dropCommand(); } break; case 8: this.enterOuterAlt(localctx, 8); { - this.state = 152; + this.state = 148; this.renameCommand(); } break; case 9: this.enterOuterAlt(localctx, 9); { - this.state = 153; + this.state = 149; this.dissectCommand(); } break; case 10: this.enterOuterAlt(localctx, 10); { - this.state = 154; + this.state = 150; this.grokCommand(); } break; case 11: this.enterOuterAlt(localctx, 11); { - this.state = 155; + this.state = 151; this.enrichCommand(); } break; case 12: this.enterOuterAlt(localctx, 12); { - this.state = 156; + this.state = 152; this.mvExpandCommand(); } break; case 13: this.enterOuterAlt(localctx, 13); { - this.state = 157; + this.state = 153; if (!(this.isDevVersion())) { throw this.createFailedPredicateException("this.isDevVersion()"); } - this.state = 158; + this.state = 154; this.inlinestatsCommand(); } break; case 14: this.enterOuterAlt(localctx, 14); { - this.state = 159; + this.state = 155; if (!(this.isDevVersion())) { throw this.createFailedPredicateException("this.isDevVersion()"); } - this.state = 160; + this.state = 156; this.lookupCommand(); } break; - case 15: - this.enterOuterAlt(localctx, 15); - { - this.state = 161; - if (!(this.isDevVersion())) { - throw this.createFailedPredicateException("this.isDevVersion()"); - } - this.state = 162; - this.matchCommand(); - } - break; } } catch (re) { @@ -714,9 +700,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 165; + this.state = 159; this.match(esql_parser.WHERE); - this.state = 166; + this.state = 160; this.booleanExpression(0); } } @@ -754,7 +740,7 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 198; + this.state = 192; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 6, this._ctx) ) { case 1: @@ -763,9 +749,9 @@ export default class esql_parser extends parser_config { this._ctx = localctx; _prevctx = localctx; - this.state = 169; + this.state = 163; this.match(esql_parser.NOT); - this.state = 170; + this.state = 164; this.booleanExpression(8); } break; @@ -774,7 +760,7 @@ export default class esql_parser extends parser_config { localctx = new BooleanDefaultContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 171; + this.state = 165; this.valueExpression(); } break; @@ -783,7 +769,7 @@ export default class esql_parser extends parser_config { localctx = new RegexExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 172; + this.state = 166; this.regexBooleanExpression(); } break; @@ -792,41 +778,41 @@ export default class esql_parser extends parser_config { localctx = new LogicalInContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 173; + this.state = 167; this.valueExpression(); - this.state = 175; + this.state = 169; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===45) { { - this.state = 174; + this.state = 168; this.match(esql_parser.NOT); } } - this.state = 177; + this.state = 171; this.match(esql_parser.IN); - this.state = 178; + this.state = 172; this.match(esql_parser.LP); - this.state = 179; + this.state = 173; this.valueExpression(); - this.state = 184; + this.state = 178; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===35) { { { - this.state = 180; + this.state = 174; this.match(esql_parser.COMMA); - this.state = 181; + this.state = 175; this.valueExpression(); } } - this.state = 186; + this.state = 180; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 187; + this.state = 181; this.match(esql_parser.RP); } break; @@ -835,21 +821,21 @@ export default class esql_parser extends parser_config { localctx = new IsNullContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 189; + this.state = 183; this.valueExpression(); - this.state = 190; + this.state = 184; this.match(esql_parser.IS); - this.state = 192; + this.state = 186; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===45) { { - this.state = 191; + this.state = 185; this.match(esql_parser.NOT); } } - this.state = 194; + this.state = 188; this.match(esql_parser.NULL); } break; @@ -858,17 +844,17 @@ export default class esql_parser extends parser_config { localctx = new MatchExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 196; + this.state = 190; if (!(this.isDevVersion())) { throw this.createFailedPredicateException("this.isDevVersion()"); } - this.state = 197; + this.state = 191; this.matchBooleanExpression(); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 208; + this.state = 202; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 8, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -878,7 +864,7 @@ export default class esql_parser extends parser_config { } _prevctx = localctx; { - this.state = 206; + this.state = 200; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 7, this._ctx) ) { case 1: @@ -886,13 +872,13 @@ export default class esql_parser extends parser_config { localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); (localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_booleanExpression); - this.state = 200; + this.state = 194; if (!(this.precpred(this._ctx, 5))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); } - this.state = 201; + this.state = 195; (localctx as LogicalBinaryContext)._operator = this.match(esql_parser.AND); - this.state = 202; + this.state = 196; (localctx as LogicalBinaryContext)._right = this.booleanExpression(6); } break; @@ -901,20 +887,20 @@ export default class esql_parser extends parser_config { localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); (localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_booleanExpression); - this.state = 203; + this.state = 197; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 204; + this.state = 198; (localctx as LogicalBinaryContext)._operator = this.match(esql_parser.OR); - this.state = 205; + this.state = 199; (localctx as LogicalBinaryContext)._right = this.booleanExpression(5); } break; } } } - this.state = 210; + this.state = 204; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 8, this._ctx); } @@ -940,48 +926,48 @@ export default class esql_parser extends parser_config { this.enterRule(localctx, 12, esql_parser.RULE_regexBooleanExpression); let _la: number; try { - this.state = 225; + this.state = 219; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 11, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 211; + this.state = 205; this.valueExpression(); - this.state = 213; + this.state = 207; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===45) { { - this.state = 212; + this.state = 206; this.match(esql_parser.NOT); } } - this.state = 215; + this.state = 209; localctx._kind = this.match(esql_parser.LIKE); - this.state = 216; + this.state = 210; localctx._pattern = this.string_(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 218; + this.state = 212; this.valueExpression(); - this.state = 220; + this.state = 214; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===45) { { - this.state = 219; + this.state = 213; this.match(esql_parser.NOT); } } - this.state = 222; + this.state = 216; localctx._kind = this.match(esql_parser.RLIKE); - this.state = 223; + this.state = 217; localctx._pattern = this.string_(); } break; @@ -1008,11 +994,11 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 227; + this.state = 221; this.valueExpression(); - this.state = 228; + this.state = 222; this.match(esql_parser.DEV_MATCH); - this.state = 229; + this.state = 223; localctx._queryString = this.string_(); } } @@ -1035,14 +1021,14 @@ export default class esql_parser extends parser_config { let localctx: ValueExpressionContext = new ValueExpressionContext(this, this._ctx, this.state); this.enterRule(localctx, 16, esql_parser.RULE_valueExpression); try { - this.state = 236; + this.state = 230; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 12, this._ctx) ) { case 1: localctx = new ValueExpressionDefaultContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 231; + this.state = 225; this.operatorExpression(0); } break; @@ -1050,11 +1036,11 @@ export default class esql_parser extends parser_config { localctx = new ComparisonContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 232; + this.state = 226; (localctx as ComparisonContext)._left = this.operatorExpression(0); - this.state = 233; + this.state = 227; this.comparisonOperator(); - this.state = 234; + this.state = 228; (localctx as ComparisonContext)._right = this.operatorExpression(0); } break; @@ -1094,7 +1080,7 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 242; + this.state = 236; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 13, this._ctx) ) { case 1: @@ -1103,7 +1089,7 @@ export default class esql_parser extends parser_config { this._ctx = localctx; _prevctx = localctx; - this.state = 239; + this.state = 233; this.primaryExpression(0); } break; @@ -1112,7 +1098,7 @@ export default class esql_parser extends parser_config { localctx = new ArithmeticUnaryContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 240; + this.state = 234; (localctx as ArithmeticUnaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if(!(_la===60 || _la===61)) { @@ -1122,13 +1108,13 @@ export default class esql_parser extends parser_config { this._errHandler.reportMatch(this); this.consume(); } - this.state = 241; + this.state = 235; this.operatorExpression(3); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 252; + this.state = 246; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 15, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -1138,7 +1124,7 @@ export default class esql_parser extends parser_config { } _prevctx = localctx; { - this.state = 250; + this.state = 244; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 14, this._ctx) ) { case 1: @@ -1146,11 +1132,11 @@ export default class esql_parser extends parser_config { localctx = new ArithmeticBinaryContext(this, new OperatorExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_operatorExpression); - this.state = 244; + this.state = 238; if (!(this.precpred(this._ctx, 2))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 245; + this.state = 239; (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if(!(((((_la - 62)) & ~0x1F) === 0 && ((1 << (_la - 62)) & 7) !== 0))) { @@ -1160,7 +1146,7 @@ export default class esql_parser extends parser_config { this._errHandler.reportMatch(this); this.consume(); } - this.state = 246; + this.state = 240; (localctx as ArithmeticBinaryContext)._right = this.operatorExpression(3); } break; @@ -1169,11 +1155,11 @@ export default class esql_parser extends parser_config { localctx = new ArithmeticBinaryContext(this, new OperatorExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_operatorExpression); - this.state = 247; + this.state = 241; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 248; + this.state = 242; (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if(!(_la===60 || _la===61)) { @@ -1183,14 +1169,14 @@ export default class esql_parser extends parser_config { this._errHandler.reportMatch(this); this.consume(); } - this.state = 249; + this.state = 243; (localctx as ArithmeticBinaryContext)._right = this.operatorExpression(2); } break; } } } - this.state = 254; + this.state = 248; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 15, this._ctx); } @@ -1229,7 +1215,7 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 263; + this.state = 257; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 16, this._ctx) ) { case 1: @@ -1238,7 +1224,7 @@ export default class esql_parser extends parser_config { this._ctx = localctx; _prevctx = localctx; - this.state = 256; + this.state = 250; this.constant(); } break; @@ -1247,7 +1233,7 @@ export default class esql_parser extends parser_config { localctx = new DereferenceContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 257; + this.state = 251; this.qualifiedName(); } break; @@ -1256,7 +1242,7 @@ export default class esql_parser extends parser_config { localctx = new FunctionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 258; + this.state = 252; this.functionExpression(); } break; @@ -1265,17 +1251,17 @@ export default class esql_parser extends parser_config { localctx = new ParenthesizedExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 259; + this.state = 253; this.match(esql_parser.LP); - this.state = 260; + this.state = 254; this.booleanExpression(0); - this.state = 261; + this.state = 255; this.match(esql_parser.RP); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 270; + this.state = 264; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 17, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -1288,18 +1274,18 @@ export default class esql_parser extends parser_config { { localctx = new InlineCastContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState)); this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_primaryExpression); - this.state = 265; + this.state = 259; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 266; + this.state = 260; this.match(esql_parser.CAST_OP); - this.state = 267; + this.state = 261; this.dataType(); } } } - this.state = 272; + this.state = 266; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 17, this._ctx); } @@ -1327,37 +1313,37 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 273; + this.state = 267; this.identifier(); - this.state = 274; + this.state = 268; this.match(esql_parser.LP); - this.state = 284; + this.state = 278; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 19, this._ctx) ) { case 1: { - this.state = 275; + this.state = 269; this.match(esql_parser.ASTERISK); } break; case 2: { { - this.state = 276; + this.state = 270; this.booleanExpression(0); - this.state = 281; + this.state = 275; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===35) { { { - this.state = 277; + this.state = 271; this.match(esql_parser.COMMA); - this.state = 278; + this.state = 272; this.booleanExpression(0); } } - this.state = 283; + this.state = 277; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1365,7 +1351,7 @@ export default class esql_parser extends parser_config { } break; } - this.state = 286; + this.state = 280; this.match(esql_parser.RP); } } @@ -1391,7 +1377,7 @@ export default class esql_parser extends parser_config { localctx = new ToDataTypeContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 288; + this.state = 282; this.identifier(); } } @@ -1416,9 +1402,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 290; + this.state = 284; this.match(esql_parser.ROW); - this.state = 291; + this.state = 285; this.fields(); } } @@ -1444,23 +1430,23 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 293; + this.state = 287; this.field(); - this.state = 298; + this.state = 292; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 20, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 294; + this.state = 288; this.match(esql_parser.COMMA); - this.state = 295; + this.state = 289; this.field(); } } } - this.state = 300; + this.state = 294; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 20, this._ctx); } @@ -1485,24 +1471,24 @@ export default class esql_parser extends parser_config { let localctx: FieldContext = new FieldContext(this, this._ctx, this.state); this.enterRule(localctx, 30, esql_parser.RULE_field); try { - this.state = 306; + this.state = 300; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 21, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 301; + this.state = 295; this.booleanExpression(0); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 302; + this.state = 296; this.qualifiedName(); - this.state = 303; + this.state = 297; this.match(esql_parser.ASSIGN); - this.state = 304; + this.state = 298; this.booleanExpression(0); } break; @@ -1530,34 +1516,34 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 308; + this.state = 302; this.match(esql_parser.FROM); - this.state = 309; + this.state = 303; this.indexPattern(); - this.state = 314; + this.state = 308; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 22, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 310; + this.state = 304; this.match(esql_parser.COMMA); - this.state = 311; + this.state = 305; this.indexPattern(); } } } - this.state = 316; + this.state = 310; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 22, this._ctx); } - this.state = 318; + this.state = 312; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 23, this._ctx) ) { case 1: { - this.state = 317; + this.state = 311; this.metadata(); } break; @@ -1583,24 +1569,24 @@ export default class esql_parser extends parser_config { let localctx: IndexPatternContext = new IndexPatternContext(this, this._ctx, this.state); this.enterRule(localctx, 34, esql_parser.RULE_indexPattern); try { - this.state = 325; + this.state = 319; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 24, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 320; + this.state = 314; this.clusterString(); - this.state = 321; + this.state = 315; this.match(esql_parser.COLON); - this.state = 322; + this.state = 316; this.indexString(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 324; + this.state = 318; this.indexString(); } break; @@ -1627,7 +1613,7 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 327; + this.state = 321; this.match(esql_parser.UNQUOTED_SOURCE); } } @@ -1653,7 +1639,7 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 329; + this.state = 323; _la = this._input.LA(1); if(!(_la===27 || _la===77)) { this._errHandler.recoverInline(this); @@ -1683,20 +1669,20 @@ export default class esql_parser extends parser_config { let localctx: MetadataContext = new MetadataContext(this, this._ctx, this.state); this.enterRule(localctx, 40, esql_parser.RULE_metadata); try { - this.state = 333; + this.state = 327; this._errHandler.sync(this); switch (this._input.LA(1)) { case 76: this.enterOuterAlt(localctx, 1); { - this.state = 331; + this.state = 325; this.metadataOption(); } break; case 66: this.enterOuterAlt(localctx, 2); { - this.state = 332; + this.state = 326; this.deprecated_metadata(); } break; @@ -1726,25 +1712,25 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 335; + this.state = 329; this.match(esql_parser.METADATA); - this.state = 336; + this.state = 330; this.match(esql_parser.UNQUOTED_SOURCE); - this.state = 341; + this.state = 335; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 26, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 337; + this.state = 331; this.match(esql_parser.COMMA); - this.state = 338; + this.state = 332; this.match(esql_parser.UNQUOTED_SOURCE); } } } - this.state = 343; + this.state = 337; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 26, this._ctx); } @@ -1771,11 +1757,11 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 344; + this.state = 338; this.match(esql_parser.OPENING_BRACKET); - this.state = 345; + this.state = 339; this.metadataOption(); - this.state = 346; + this.state = 340; this.match(esql_parser.CLOSING_BRACKET); } } @@ -1801,46 +1787,46 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 348; + this.state = 342; this.match(esql_parser.DEV_METRICS); - this.state = 349; + this.state = 343; this.indexPattern(); - this.state = 354; + this.state = 348; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 27, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 350; + this.state = 344; this.match(esql_parser.COMMA); - this.state = 351; + this.state = 345; this.indexPattern(); } } } - this.state = 356; + this.state = 350; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 27, this._ctx); } - this.state = 358; + this.state = 352; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 28, this._ctx) ) { case 1: { - this.state = 357; + this.state = 351; localctx._aggregates = this.fields(); } break; } - this.state = 362; + this.state = 356; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 29, this._ctx) ) { case 1: { - this.state = 360; + this.state = 354; this.match(esql_parser.BY); - this.state = 361; + this.state = 355; localctx._grouping = this.fields(); } break; @@ -1868,9 +1854,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 364; + this.state = 358; this.match(esql_parser.EVAL); - this.state = 365; + this.state = 359; this.fields(); } } @@ -1895,26 +1881,26 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 367; + this.state = 361; this.match(esql_parser.STATS); - this.state = 369; + this.state = 363; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 30, this._ctx) ) { case 1: { - this.state = 368; + this.state = 362; localctx._stats = this.fields(); } break; } - this.state = 373; + this.state = 367; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 31, this._ctx) ) { case 1: { - this.state = 371; + this.state = 365; this.match(esql_parser.BY); - this.state = 372; + this.state = 366; localctx._grouping = this.fields(); } break; @@ -1943,23 +1929,23 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 375; + this.state = 369; this.identifier(); - this.state = 380; + this.state = 374; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 32, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 376; + this.state = 370; this.match(esql_parser.DOT); - this.state = 377; + this.state = 371; this.identifier(); } } } - this.state = 382; + this.state = 376; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 32, this._ctx); } @@ -1987,23 +1973,23 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 383; + this.state = 377; this.identifierPattern(); - this.state = 388; + this.state = 382; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 33, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 384; + this.state = 378; this.match(esql_parser.DOT); - this.state = 385; + this.state = 379; this.identifierPattern(); } } } - this.state = 390; + this.state = 384; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 33, this._ctx); } @@ -2031,23 +2017,23 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 391; + this.state = 385; this.qualifiedNamePattern(); - this.state = 396; + this.state = 390; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 34, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 392; + this.state = 386; this.match(esql_parser.COMMA); - this.state = 393; + this.state = 387; this.qualifiedNamePattern(); } } } - this.state = 398; + this.state = 392; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 34, this._ctx); } @@ -2075,7 +2061,7 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 399; + this.state = 393; _la = this._input.LA(1); if(!(_la===68 || _la===69)) { this._errHandler.recoverInline(this); @@ -2107,7 +2093,7 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 401; + this.state = 395; this.match(esql_parser.ID_PATTERN); } } @@ -2131,14 +2117,14 @@ export default class esql_parser extends parser_config { this.enterRule(localctx, 62, esql_parser.RULE_constant); let _la: number; try { - this.state = 445; + this.state = 439; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 38, this._ctx) ) { case 1: localctx = new NullLiteralContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 403; + this.state = 397; this.match(esql_parser.NULL); } break; @@ -2146,9 +2132,9 @@ export default class esql_parser extends parser_config { localctx = new QualifiedIntegerLiteralContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 404; + this.state = 398; this.integerValue(); - this.state = 405; + this.state = 399; this.match(esql_parser.UNQUOTED_IDENTIFIER); } break; @@ -2156,7 +2142,7 @@ export default class esql_parser extends parser_config { localctx = new DecimalLiteralContext(this, localctx); this.enterOuterAlt(localctx, 3); { - this.state = 407; + this.state = 401; this.decimalValue(); } break; @@ -2164,7 +2150,7 @@ export default class esql_parser extends parser_config { localctx = new IntegerLiteralContext(this, localctx); this.enterOuterAlt(localctx, 4); { - this.state = 408; + this.state = 402; this.integerValue(); } break; @@ -2172,7 +2158,7 @@ export default class esql_parser extends parser_config { localctx = new BooleanLiteralContext(this, localctx); this.enterOuterAlt(localctx, 5); { - this.state = 409; + this.state = 403; this.booleanValue(); } break; @@ -2180,7 +2166,7 @@ export default class esql_parser extends parser_config { localctx = new InputParamsContext(this, localctx); this.enterOuterAlt(localctx, 6); { - this.state = 410; + this.state = 404; this.params(); } break; @@ -2188,7 +2174,7 @@ export default class esql_parser extends parser_config { localctx = new StringLiteralContext(this, localctx); this.enterOuterAlt(localctx, 7); { - this.state = 411; + this.state = 405; this.string_(); } break; @@ -2196,27 +2182,27 @@ export default class esql_parser extends parser_config { localctx = new NumericArrayLiteralContext(this, localctx); this.enterOuterAlt(localctx, 8); { - this.state = 412; + this.state = 406; this.match(esql_parser.OPENING_BRACKET); - this.state = 413; + this.state = 407; this.numericValue(); - this.state = 418; + this.state = 412; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===35) { { { - this.state = 414; + this.state = 408; this.match(esql_parser.COMMA); - this.state = 415; + this.state = 409; this.numericValue(); } } - this.state = 420; + this.state = 414; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 421; + this.state = 415; this.match(esql_parser.CLOSING_BRACKET); } break; @@ -2224,27 +2210,27 @@ export default class esql_parser extends parser_config { localctx = new BooleanArrayLiteralContext(this, localctx); this.enterOuterAlt(localctx, 9); { - this.state = 423; + this.state = 417; this.match(esql_parser.OPENING_BRACKET); - this.state = 424; + this.state = 418; this.booleanValue(); - this.state = 429; + this.state = 423; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===35) { { { - this.state = 425; + this.state = 419; this.match(esql_parser.COMMA); - this.state = 426; + this.state = 420; this.booleanValue(); } } - this.state = 431; + this.state = 425; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 432; + this.state = 426; this.match(esql_parser.CLOSING_BRACKET); } break; @@ -2252,27 +2238,27 @@ export default class esql_parser extends parser_config { localctx = new StringArrayLiteralContext(this, localctx); this.enterOuterAlt(localctx, 10); { - this.state = 434; + this.state = 428; this.match(esql_parser.OPENING_BRACKET); - this.state = 435; + this.state = 429; this.string_(); - this.state = 440; + this.state = 434; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===35) { { { - this.state = 436; + this.state = 430; this.match(esql_parser.COMMA); - this.state = 437; + this.state = 431; this.string_(); } } - this.state = 442; + this.state = 436; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 443; + this.state = 437; this.match(esql_parser.CLOSING_BRACKET); } break; @@ -2297,14 +2283,14 @@ export default class esql_parser extends parser_config { let localctx: ParamsContext = new ParamsContext(this, this._ctx, this.state); this.enterRule(localctx, 64, esql_parser.RULE_params); try { - this.state = 449; + this.state = 443; this._errHandler.sync(this); switch (this._input.LA(1)) { case 49: localctx = new InputParamContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 447; + this.state = 441; this.match(esql_parser.PARAM); } break; @@ -2312,7 +2298,7 @@ export default class esql_parser extends parser_config { localctx = new InputNamedOrPositionalParamContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 448; + this.state = 442; this.match(esql_parser.NAMED_OR_POSITIONAL_PARAM); } break; @@ -2341,9 +2327,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 451; + this.state = 445; this.match(esql_parser.LIMIT); - this.state = 452; + this.state = 446; this.match(esql_parser.INTEGER_LITERAL); } } @@ -2369,25 +2355,25 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 454; + this.state = 448; this.match(esql_parser.SORT); - this.state = 455; + this.state = 449; this.orderExpression(); - this.state = 460; + this.state = 454; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 40, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 456; + this.state = 450; this.match(esql_parser.COMMA); - this.state = 457; + this.state = 451; this.orderExpression(); } } } - this.state = 462; + this.state = 456; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 40, this._ctx); } @@ -2415,14 +2401,14 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 463; + this.state = 457; this.booleanExpression(0); - this.state = 465; + this.state = 459; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 41, this._ctx) ) { case 1: { - this.state = 464; + this.state = 458; localctx._ordering = this._input.LT(1); _la = this._input.LA(1); if(!(_la===32 || _la===36)) { @@ -2435,14 +2421,14 @@ export default class esql_parser extends parser_config { } break; } - this.state = 469; + this.state = 463; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 42, this._ctx) ) { case 1: { - this.state = 467; + this.state = 461; this.match(esql_parser.NULLS); - this.state = 468; + this.state = 462; localctx._nullOrdering = this._input.LT(1); _la = this._input.LA(1); if(!(_la===39 || _la===42)) { @@ -2478,9 +2464,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 471; + this.state = 465; this.match(esql_parser.KEEP); - this.state = 472; + this.state = 466; this.qualifiedNamePatterns(); } } @@ -2505,9 +2491,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 474; + this.state = 468; this.match(esql_parser.DROP); - this.state = 475; + this.state = 469; this.qualifiedNamePatterns(); } } @@ -2533,25 +2519,25 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 477; + this.state = 471; this.match(esql_parser.RENAME); - this.state = 478; + this.state = 472; this.renameClause(); - this.state = 483; + this.state = 477; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 43, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 479; + this.state = 473; this.match(esql_parser.COMMA); - this.state = 480; + this.state = 474; this.renameClause(); } } } - this.state = 485; + this.state = 479; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 43, this._ctx); } @@ -2578,11 +2564,11 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 486; + this.state = 480; localctx._oldName = this.qualifiedNamePattern(); - this.state = 487; + this.state = 481; this.match(esql_parser.AS); - this.state = 488; + this.state = 482; localctx._newName = this.qualifiedNamePattern(); } } @@ -2607,18 +2593,18 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 490; + this.state = 484; this.match(esql_parser.DISSECT); - this.state = 491; + this.state = 485; this.primaryExpression(0); - this.state = 492; + this.state = 486; this.string_(); - this.state = 494; + this.state = 488; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 44, this._ctx) ) { case 1: { - this.state = 493; + this.state = 487; this.commandOptions(); } break; @@ -2646,11 +2632,11 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 496; + this.state = 490; this.match(esql_parser.GROK); - this.state = 497; + this.state = 491; this.primaryExpression(0); - this.state = 498; + this.state = 492; this.string_(); } } @@ -2675,9 +2661,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 500; + this.state = 494; this.match(esql_parser.MV_EXPAND); - this.state = 501; + this.state = 495; this.qualifiedName(); } } @@ -2703,23 +2689,23 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 503; + this.state = 497; this.commandOption(); - this.state = 508; + this.state = 502; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 45, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 504; + this.state = 498; this.match(esql_parser.COMMA); - this.state = 505; + this.state = 499; this.commandOption(); } } } - this.state = 510; + this.state = 504; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 45, this._ctx); } @@ -2746,11 +2732,11 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 511; + this.state = 505; this.identifier(); - this.state = 512; + this.state = 506; this.match(esql_parser.ASSIGN); - this.state = 513; + this.state = 507; this.constant(); } } @@ -2776,7 +2762,7 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 515; + this.state = 509; _la = this._input.LA(1); if(!(_la===38 || _la===52)) { this._errHandler.recoverInline(this); @@ -2806,20 +2792,20 @@ export default class esql_parser extends parser_config { let localctx: NumericValueContext = new NumericValueContext(this, this._ctx, this.state); this.enterRule(localctx, 92, esql_parser.RULE_numericValue); try { - this.state = 519; + this.state = 513; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 46, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 517; + this.state = 511; this.decimalValue(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 518; + this.state = 512; this.integerValue(); } break; @@ -2847,12 +2833,12 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 522; + this.state = 516; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===60 || _la===61) { { - this.state = 521; + this.state = 515; _la = this._input.LA(1); if(!(_la===60 || _la===61)) { this._errHandler.recoverInline(this); @@ -2864,7 +2850,7 @@ export default class esql_parser extends parser_config { } } - this.state = 524; + this.state = 518; this.match(esql_parser.DECIMAL_LITERAL); } } @@ -2890,12 +2876,12 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 527; + this.state = 521; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===60 || _la===61) { { - this.state = 526; + this.state = 520; _la = this._input.LA(1); if(!(_la===60 || _la===61)) { this._errHandler.recoverInline(this); @@ -2907,7 +2893,7 @@ export default class esql_parser extends parser_config { } } - this.state = 529; + this.state = 523; this.match(esql_parser.INTEGER_LITERAL); } } @@ -2932,7 +2918,7 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 531; + this.state = 525; this.match(esql_parser.QUOTED_STRING); } } @@ -2958,7 +2944,7 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 533; + this.state = 527; _la = this._input.LA(1); if(!(((((_la - 53)) & ~0x1F) === 0 && ((1 << (_la - 53)) & 125) !== 0))) { this._errHandler.recoverInline(this); @@ -2990,9 +2976,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 535; + this.state = 529; this.match(esql_parser.EXPLAIN); - this.state = 536; + this.state = 530; this.subqueryExpression(); } } @@ -3017,11 +3003,11 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 538; + this.state = 532; this.match(esql_parser.OPENING_BRACKET); - this.state = 539; + this.state = 533; this.query(0); - this.state = 540; + this.state = 534; this.match(esql_parser.CLOSING_BRACKET); } } @@ -3047,9 +3033,9 @@ export default class esql_parser extends parser_config { localctx = new ShowInfoContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 542; + this.state = 536; this.match(esql_parser.SHOW); - this.state = 543; + this.state = 537; this.match(esql_parser.INFO); } } @@ -3075,9 +3061,9 @@ export default class esql_parser extends parser_config { localctx = new MetaFunctionsContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 545; + this.state = 539; this.match(esql_parser.META); - this.state = 546; + this.state = 540; this.match(esql_parser.FUNCTIONS); } } @@ -3103,46 +3089,46 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 548; + this.state = 542; this.match(esql_parser.ENRICH); - this.state = 549; + this.state = 543; localctx._policyName = this.match(esql_parser.ENRICH_POLICY_NAME); - this.state = 552; + this.state = 546; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 49, this._ctx) ) { case 1: { - this.state = 550; + this.state = 544; this.match(esql_parser.ON); - this.state = 551; + this.state = 545; localctx._matchField = this.qualifiedNamePattern(); } break; } - this.state = 563; + this.state = 557; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 51, this._ctx) ) { case 1: { - this.state = 554; + this.state = 548; this.match(esql_parser.WITH); - this.state = 555; + this.state = 549; this.enrichWithClause(); - this.state = 560; + this.state = 554; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 50, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 556; + this.state = 550; this.match(esql_parser.COMMA); - this.state = 557; + this.state = 551; this.enrichWithClause(); } } } - this.state = 562; + this.state = 556; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 50, this._ctx); } @@ -3172,19 +3158,19 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 568; + this.state = 562; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 52, this._ctx) ) { case 1: { - this.state = 565; + this.state = 559; localctx._newName = this.qualifiedNamePattern(); - this.state = 566; + this.state = 560; this.match(esql_parser.ASSIGN); } break; } - this.state = 570; + this.state = 564; localctx._enrichField = this.qualifiedNamePattern(); } } @@ -3209,13 +3195,13 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 572; + this.state = 566; this.match(esql_parser.DEV_LOOKUP); - this.state = 573; + this.state = 567; localctx._tableName = this.indexPattern(); - this.state = 574; + this.state = 568; this.match(esql_parser.ON); - this.state = 575; + this.state = 569; localctx._matchFields = this.qualifiedNamePatterns(); } } @@ -3240,18 +3226,18 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 577; + this.state = 571; this.match(esql_parser.DEV_INLINESTATS); - this.state = 578; + this.state = 572; localctx._stats = this.fields(); - this.state = 581; + this.state = 575; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 53, this._ctx) ) { case 1: { - this.state = 579; + this.state = 573; this.match(esql_parser.BY); - this.state = 580; + this.state = 574; localctx._grouping = this.fields(); } break; @@ -3272,58 +3258,6 @@ export default class esql_parser extends parser_config { } return localctx; } - // @RuleVersion(0) - public matchCommand(): MatchCommandContext { - let localctx: MatchCommandContext = new MatchCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 118, esql_parser.RULE_matchCommand); - try { - this.enterOuterAlt(localctx, 1); - { - this.state = 583; - this.match(esql_parser.DEV_MATCH); - this.state = 584; - this.matchQuery(); - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } - // @RuleVersion(0) - public matchQuery(): MatchQueryContext { - let localctx: MatchQueryContext = new MatchQueryContext(this, this._ctx, this.state); - this.enterRule(localctx, 120, esql_parser.RULE_matchQuery); - try { - this.enterOuterAlt(localctx, 1); - { - this.state = 586; - this.match(esql_parser.QUOTED_STRING); - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } public sempred(localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { @@ -3362,40 +3296,38 @@ export default class esql_parser extends parser_config { return this.isDevVersion(); case 3: return this.isDevVersion(); - case 4: - return this.isDevVersion(); } return true; } private booleanExpression_sempred(localctx: BooleanExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 5: + case 4: return this.isDevVersion(); - case 6: + case 5: return this.precpred(this._ctx, 5); - case 7: + case 6: return this.precpred(this._ctx, 4); } return true; } private operatorExpression_sempred(localctx: OperatorExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 8: + case 7: return this.precpred(this._ctx, 2); - case 9: + case 8: return this.precpred(this._ctx, 1); } return true; } private primaryExpression_sempred(localctx: PrimaryExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 10: + case 9: return this.precpred(this._ctx, 1); } return true; } - public static readonly _serializedATN: number[] = [4,1,125,589,2,0,7,0, + public static readonly _serializedATN: number[] = [4,1,125,578,2,0,7,0, 2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9, 2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2, 17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24, @@ -3403,190 +3335,186 @@ export default class esql_parser extends parser_config { 31,2,32,7,32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38, 2,39,7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2, 46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7,52,2,53, - 7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,2,59,7,59,2,60,7, - 60,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,5,1,132,8,1,10,1,12,1,135,9,1,1, - 2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,144,8,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, - 3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,164,8,3,1,4,1,4,1,4,1,5,1,5,1, - 5,1,5,1,5,1,5,1,5,3,5,176,8,5,1,5,1,5,1,5,1,5,1,5,5,5,183,8,5,10,5,12,5, - 186,9,5,1,5,1,5,1,5,1,5,1,5,3,5,193,8,5,1,5,1,5,1,5,1,5,3,5,199,8,5,1,5, - 1,5,1,5,1,5,1,5,1,5,5,5,207,8,5,10,5,12,5,210,9,5,1,6,1,6,3,6,214,8,6,1, - 6,1,6,1,6,1,6,1,6,3,6,221,8,6,1,6,1,6,1,6,3,6,226,8,6,1,7,1,7,1,7,1,7,1, - 8,1,8,1,8,1,8,1,8,3,8,237,8,8,1,9,1,9,1,9,1,9,3,9,243,8,9,1,9,1,9,1,9,1, - 9,1,9,1,9,5,9,251,8,9,10,9,12,9,254,9,9,1,10,1,10,1,10,1,10,1,10,1,10,1, - 10,1,10,3,10,264,8,10,1,10,1,10,1,10,5,10,269,8,10,10,10,12,10,272,9,10, - 1,11,1,11,1,11,1,11,1,11,1,11,5,11,280,8,11,10,11,12,11,283,9,11,3,11,285, - 8,11,1,11,1,11,1,12,1,12,1,13,1,13,1,13,1,14,1,14,1,14,5,14,297,8,14,10, - 14,12,14,300,9,14,1,15,1,15,1,15,1,15,1,15,3,15,307,8,15,1,16,1,16,1,16, - 1,16,5,16,313,8,16,10,16,12,16,316,9,16,1,16,3,16,319,8,16,1,17,1,17,1, - 17,1,17,1,17,3,17,326,8,17,1,18,1,18,1,19,1,19,1,20,1,20,3,20,334,8,20, - 1,21,1,21,1,21,1,21,5,21,340,8,21,10,21,12,21,343,9,21,1,22,1,22,1,22,1, - 22,1,23,1,23,1,23,1,23,5,23,353,8,23,10,23,12,23,356,9,23,1,23,3,23,359, - 8,23,1,23,1,23,3,23,363,8,23,1,24,1,24,1,24,1,25,1,25,3,25,370,8,25,1,25, - 1,25,3,25,374,8,25,1,26,1,26,1,26,5,26,379,8,26,10,26,12,26,382,9,26,1, - 27,1,27,1,27,5,27,387,8,27,10,27,12,27,390,9,27,1,28,1,28,1,28,5,28,395, - 8,28,10,28,12,28,398,9,28,1,29,1,29,1,30,1,30,1,31,1,31,1,31,1,31,1,31, - 1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,5,31,417,8,31,10,31,12,31,420,9, - 31,1,31,1,31,1,31,1,31,1,31,1,31,5,31,428,8,31,10,31,12,31,431,9,31,1,31, - 1,31,1,31,1,31,1,31,1,31,5,31,439,8,31,10,31,12,31,442,9,31,1,31,1,31,3, - 31,446,8,31,1,32,1,32,3,32,450,8,32,1,33,1,33,1,33,1,34,1,34,1,34,1,34, - 5,34,459,8,34,10,34,12,34,462,9,34,1,35,1,35,3,35,466,8,35,1,35,1,35,3, - 35,470,8,35,1,36,1,36,1,36,1,37,1,37,1,37,1,38,1,38,1,38,1,38,5,38,482, - 8,38,10,38,12,38,485,9,38,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,3,40, - 495,8,40,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,43,1,43,1,43,5,43,507,8,43, - 10,43,12,43,510,9,43,1,44,1,44,1,44,1,44,1,45,1,45,1,46,1,46,3,46,520,8, - 46,1,47,3,47,523,8,47,1,47,1,47,1,48,3,48,528,8,48,1,48,1,48,1,49,1,49, - 1,50,1,50,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,54,1,54,1, - 54,1,55,1,55,1,55,1,55,3,55,553,8,55,1,55,1,55,1,55,1,55,5,55,559,8,55, - 10,55,12,55,562,9,55,3,55,564,8,55,1,56,1,56,1,56,3,56,569,8,56,1,56,1, - 56,1,57,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,3,58,582,8,58,1,59,1,59, - 1,59,1,60,1,60,1,60,0,4,2,10,18,20,61,0,2,4,6,8,10,12,14,16,18,20,22,24, - 26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72, - 74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114, - 116,118,120,0,8,1,0,60,61,1,0,62,64,2,0,27,27,77,77,1,0,68,69,2,0,32,32, - 36,36,2,0,39,39,42,42,2,0,38,38,52,52,2,0,53,53,55,59,613,0,122,1,0,0,0, - 2,125,1,0,0,0,4,143,1,0,0,0,6,163,1,0,0,0,8,165,1,0,0,0,10,198,1,0,0,0, - 12,225,1,0,0,0,14,227,1,0,0,0,16,236,1,0,0,0,18,242,1,0,0,0,20,263,1,0, - 0,0,22,273,1,0,0,0,24,288,1,0,0,0,26,290,1,0,0,0,28,293,1,0,0,0,30,306, - 1,0,0,0,32,308,1,0,0,0,34,325,1,0,0,0,36,327,1,0,0,0,38,329,1,0,0,0,40, - 333,1,0,0,0,42,335,1,0,0,0,44,344,1,0,0,0,46,348,1,0,0,0,48,364,1,0,0,0, - 50,367,1,0,0,0,52,375,1,0,0,0,54,383,1,0,0,0,56,391,1,0,0,0,58,399,1,0, - 0,0,60,401,1,0,0,0,62,445,1,0,0,0,64,449,1,0,0,0,66,451,1,0,0,0,68,454, - 1,0,0,0,70,463,1,0,0,0,72,471,1,0,0,0,74,474,1,0,0,0,76,477,1,0,0,0,78, - 486,1,0,0,0,80,490,1,0,0,0,82,496,1,0,0,0,84,500,1,0,0,0,86,503,1,0,0,0, - 88,511,1,0,0,0,90,515,1,0,0,0,92,519,1,0,0,0,94,522,1,0,0,0,96,527,1,0, - 0,0,98,531,1,0,0,0,100,533,1,0,0,0,102,535,1,0,0,0,104,538,1,0,0,0,106, - 542,1,0,0,0,108,545,1,0,0,0,110,548,1,0,0,0,112,568,1,0,0,0,114,572,1,0, - 0,0,116,577,1,0,0,0,118,583,1,0,0,0,120,586,1,0,0,0,122,123,3,2,1,0,123, - 124,5,0,0,1,124,1,1,0,0,0,125,126,6,1,-1,0,126,127,3,4,2,0,127,133,1,0, - 0,0,128,129,10,1,0,0,129,130,5,26,0,0,130,132,3,6,3,0,131,128,1,0,0,0,132, - 135,1,0,0,0,133,131,1,0,0,0,133,134,1,0,0,0,134,3,1,0,0,0,135,133,1,0,0, - 0,136,144,3,102,51,0,137,144,3,32,16,0,138,144,3,108,54,0,139,144,3,26, - 13,0,140,144,3,106,53,0,141,142,4,2,1,0,142,144,3,46,23,0,143,136,1,0,0, - 0,143,137,1,0,0,0,143,138,1,0,0,0,143,139,1,0,0,0,143,140,1,0,0,0,143,141, - 1,0,0,0,144,5,1,0,0,0,145,164,3,48,24,0,146,164,3,8,4,0,147,164,3,72,36, - 0,148,164,3,66,33,0,149,164,3,50,25,0,150,164,3,68,34,0,151,164,3,74,37, - 0,152,164,3,76,38,0,153,164,3,80,40,0,154,164,3,82,41,0,155,164,3,110,55, - 0,156,164,3,84,42,0,157,158,4,3,2,0,158,164,3,116,58,0,159,160,4,3,3,0, - 160,164,3,114,57,0,161,162,4,3,4,0,162,164,3,118,59,0,163,145,1,0,0,0,163, - 146,1,0,0,0,163,147,1,0,0,0,163,148,1,0,0,0,163,149,1,0,0,0,163,150,1,0, - 0,0,163,151,1,0,0,0,163,152,1,0,0,0,163,153,1,0,0,0,163,154,1,0,0,0,163, - 155,1,0,0,0,163,156,1,0,0,0,163,157,1,0,0,0,163,159,1,0,0,0,163,161,1,0, - 0,0,164,7,1,0,0,0,165,166,5,17,0,0,166,167,3,10,5,0,167,9,1,0,0,0,168,169, - 6,5,-1,0,169,170,5,45,0,0,170,199,3,10,5,8,171,199,3,16,8,0,172,199,3,12, - 6,0,173,175,3,16,8,0,174,176,5,45,0,0,175,174,1,0,0,0,175,176,1,0,0,0,176, - 177,1,0,0,0,177,178,5,40,0,0,178,179,5,44,0,0,179,184,3,16,8,0,180,181, - 5,35,0,0,181,183,3,16,8,0,182,180,1,0,0,0,183,186,1,0,0,0,184,182,1,0,0, - 0,184,185,1,0,0,0,185,187,1,0,0,0,186,184,1,0,0,0,187,188,5,51,0,0,188, - 199,1,0,0,0,189,190,3,16,8,0,190,192,5,41,0,0,191,193,5,45,0,0,192,191, - 1,0,0,0,192,193,1,0,0,0,193,194,1,0,0,0,194,195,5,46,0,0,195,199,1,0,0, - 0,196,197,4,5,5,0,197,199,3,14,7,0,198,168,1,0,0,0,198,171,1,0,0,0,198, - 172,1,0,0,0,198,173,1,0,0,0,198,189,1,0,0,0,198,196,1,0,0,0,199,208,1,0, - 0,0,200,201,10,5,0,0,201,202,5,31,0,0,202,207,3,10,5,6,203,204,10,4,0,0, - 204,205,5,48,0,0,205,207,3,10,5,5,206,200,1,0,0,0,206,203,1,0,0,0,207,210, - 1,0,0,0,208,206,1,0,0,0,208,209,1,0,0,0,209,11,1,0,0,0,210,208,1,0,0,0, - 211,213,3,16,8,0,212,214,5,45,0,0,213,212,1,0,0,0,213,214,1,0,0,0,214,215, - 1,0,0,0,215,216,5,43,0,0,216,217,3,98,49,0,217,226,1,0,0,0,218,220,3,16, - 8,0,219,221,5,45,0,0,220,219,1,0,0,0,220,221,1,0,0,0,221,222,1,0,0,0,222, - 223,5,50,0,0,223,224,3,98,49,0,224,226,1,0,0,0,225,211,1,0,0,0,225,218, - 1,0,0,0,226,13,1,0,0,0,227,228,3,16,8,0,228,229,5,20,0,0,229,230,3,98,49, - 0,230,15,1,0,0,0,231,237,3,18,9,0,232,233,3,18,9,0,233,234,3,100,50,0,234, - 235,3,18,9,0,235,237,1,0,0,0,236,231,1,0,0,0,236,232,1,0,0,0,237,17,1,0, - 0,0,238,239,6,9,-1,0,239,243,3,20,10,0,240,241,7,0,0,0,241,243,3,18,9,3, - 242,238,1,0,0,0,242,240,1,0,0,0,243,252,1,0,0,0,244,245,10,2,0,0,245,246, - 7,1,0,0,246,251,3,18,9,3,247,248,10,1,0,0,248,249,7,0,0,0,249,251,3,18, - 9,2,250,244,1,0,0,0,250,247,1,0,0,0,251,254,1,0,0,0,252,250,1,0,0,0,252, - 253,1,0,0,0,253,19,1,0,0,0,254,252,1,0,0,0,255,256,6,10,-1,0,256,264,3, - 62,31,0,257,264,3,52,26,0,258,264,3,22,11,0,259,260,5,44,0,0,260,261,3, - 10,5,0,261,262,5,51,0,0,262,264,1,0,0,0,263,255,1,0,0,0,263,257,1,0,0,0, - 263,258,1,0,0,0,263,259,1,0,0,0,264,270,1,0,0,0,265,266,10,1,0,0,266,267, - 5,34,0,0,267,269,3,24,12,0,268,265,1,0,0,0,269,272,1,0,0,0,270,268,1,0, - 0,0,270,271,1,0,0,0,271,21,1,0,0,0,272,270,1,0,0,0,273,274,3,58,29,0,274, - 284,5,44,0,0,275,285,5,62,0,0,276,281,3,10,5,0,277,278,5,35,0,0,278,280, - 3,10,5,0,279,277,1,0,0,0,280,283,1,0,0,0,281,279,1,0,0,0,281,282,1,0,0, - 0,282,285,1,0,0,0,283,281,1,0,0,0,284,275,1,0,0,0,284,276,1,0,0,0,284,285, - 1,0,0,0,285,286,1,0,0,0,286,287,5,51,0,0,287,23,1,0,0,0,288,289,3,58,29, - 0,289,25,1,0,0,0,290,291,5,13,0,0,291,292,3,28,14,0,292,27,1,0,0,0,293, - 298,3,30,15,0,294,295,5,35,0,0,295,297,3,30,15,0,296,294,1,0,0,0,297,300, - 1,0,0,0,298,296,1,0,0,0,298,299,1,0,0,0,299,29,1,0,0,0,300,298,1,0,0,0, - 301,307,3,10,5,0,302,303,3,52,26,0,303,304,5,33,0,0,304,305,3,10,5,0,305, - 307,1,0,0,0,306,301,1,0,0,0,306,302,1,0,0,0,307,31,1,0,0,0,308,309,5,6, - 0,0,309,314,3,34,17,0,310,311,5,35,0,0,311,313,3,34,17,0,312,310,1,0,0, - 0,313,316,1,0,0,0,314,312,1,0,0,0,314,315,1,0,0,0,315,318,1,0,0,0,316,314, - 1,0,0,0,317,319,3,40,20,0,318,317,1,0,0,0,318,319,1,0,0,0,319,33,1,0,0, - 0,320,321,3,36,18,0,321,322,5,109,0,0,322,323,3,38,19,0,323,326,1,0,0,0, - 324,326,3,38,19,0,325,320,1,0,0,0,325,324,1,0,0,0,326,35,1,0,0,0,327,328, - 5,77,0,0,328,37,1,0,0,0,329,330,7,2,0,0,330,39,1,0,0,0,331,334,3,42,21, - 0,332,334,3,44,22,0,333,331,1,0,0,0,333,332,1,0,0,0,334,41,1,0,0,0,335, - 336,5,76,0,0,336,341,5,77,0,0,337,338,5,35,0,0,338,340,5,77,0,0,339,337, - 1,0,0,0,340,343,1,0,0,0,341,339,1,0,0,0,341,342,1,0,0,0,342,43,1,0,0,0, - 343,341,1,0,0,0,344,345,5,66,0,0,345,346,3,42,21,0,346,347,5,67,0,0,347, - 45,1,0,0,0,348,349,5,21,0,0,349,354,3,34,17,0,350,351,5,35,0,0,351,353, - 3,34,17,0,352,350,1,0,0,0,353,356,1,0,0,0,354,352,1,0,0,0,354,355,1,0,0, - 0,355,358,1,0,0,0,356,354,1,0,0,0,357,359,3,28,14,0,358,357,1,0,0,0,358, - 359,1,0,0,0,359,362,1,0,0,0,360,361,5,30,0,0,361,363,3,28,14,0,362,360, - 1,0,0,0,362,363,1,0,0,0,363,47,1,0,0,0,364,365,5,4,0,0,365,366,3,28,14, - 0,366,49,1,0,0,0,367,369,5,16,0,0,368,370,3,28,14,0,369,368,1,0,0,0,369, - 370,1,0,0,0,370,373,1,0,0,0,371,372,5,30,0,0,372,374,3,28,14,0,373,371, - 1,0,0,0,373,374,1,0,0,0,374,51,1,0,0,0,375,380,3,58,29,0,376,377,5,37,0, - 0,377,379,3,58,29,0,378,376,1,0,0,0,379,382,1,0,0,0,380,378,1,0,0,0,380, - 381,1,0,0,0,381,53,1,0,0,0,382,380,1,0,0,0,383,388,3,60,30,0,384,385,5, - 37,0,0,385,387,3,60,30,0,386,384,1,0,0,0,387,390,1,0,0,0,388,386,1,0,0, - 0,388,389,1,0,0,0,389,55,1,0,0,0,390,388,1,0,0,0,391,396,3,54,27,0,392, - 393,5,35,0,0,393,395,3,54,27,0,394,392,1,0,0,0,395,398,1,0,0,0,396,394, - 1,0,0,0,396,397,1,0,0,0,397,57,1,0,0,0,398,396,1,0,0,0,399,400,7,3,0,0, - 400,59,1,0,0,0,401,402,5,81,0,0,402,61,1,0,0,0,403,446,5,46,0,0,404,405, - 3,96,48,0,405,406,5,68,0,0,406,446,1,0,0,0,407,446,3,94,47,0,408,446,3, - 96,48,0,409,446,3,90,45,0,410,446,3,64,32,0,411,446,3,98,49,0,412,413,5, - 66,0,0,413,418,3,92,46,0,414,415,5,35,0,0,415,417,3,92,46,0,416,414,1,0, - 0,0,417,420,1,0,0,0,418,416,1,0,0,0,418,419,1,0,0,0,419,421,1,0,0,0,420, - 418,1,0,0,0,421,422,5,67,0,0,422,446,1,0,0,0,423,424,5,66,0,0,424,429,3, - 90,45,0,425,426,5,35,0,0,426,428,3,90,45,0,427,425,1,0,0,0,428,431,1,0, - 0,0,429,427,1,0,0,0,429,430,1,0,0,0,430,432,1,0,0,0,431,429,1,0,0,0,432, - 433,5,67,0,0,433,446,1,0,0,0,434,435,5,66,0,0,435,440,3,98,49,0,436,437, - 5,35,0,0,437,439,3,98,49,0,438,436,1,0,0,0,439,442,1,0,0,0,440,438,1,0, - 0,0,440,441,1,0,0,0,441,443,1,0,0,0,442,440,1,0,0,0,443,444,5,67,0,0,444, - 446,1,0,0,0,445,403,1,0,0,0,445,404,1,0,0,0,445,407,1,0,0,0,445,408,1,0, - 0,0,445,409,1,0,0,0,445,410,1,0,0,0,445,411,1,0,0,0,445,412,1,0,0,0,445, - 423,1,0,0,0,445,434,1,0,0,0,446,63,1,0,0,0,447,450,5,49,0,0,448,450,5,65, - 0,0,449,447,1,0,0,0,449,448,1,0,0,0,450,65,1,0,0,0,451,452,5,9,0,0,452, - 453,5,28,0,0,453,67,1,0,0,0,454,455,5,15,0,0,455,460,3,70,35,0,456,457, - 5,35,0,0,457,459,3,70,35,0,458,456,1,0,0,0,459,462,1,0,0,0,460,458,1,0, - 0,0,460,461,1,0,0,0,461,69,1,0,0,0,462,460,1,0,0,0,463,465,3,10,5,0,464, - 466,7,4,0,0,465,464,1,0,0,0,465,466,1,0,0,0,466,469,1,0,0,0,467,468,5,47, - 0,0,468,470,7,5,0,0,469,467,1,0,0,0,469,470,1,0,0,0,470,71,1,0,0,0,471, - 472,5,8,0,0,472,473,3,56,28,0,473,73,1,0,0,0,474,475,5,2,0,0,475,476,3, - 56,28,0,476,75,1,0,0,0,477,478,5,12,0,0,478,483,3,78,39,0,479,480,5,35, - 0,0,480,482,3,78,39,0,481,479,1,0,0,0,482,485,1,0,0,0,483,481,1,0,0,0,483, - 484,1,0,0,0,484,77,1,0,0,0,485,483,1,0,0,0,486,487,3,54,27,0,487,488,5, - 85,0,0,488,489,3,54,27,0,489,79,1,0,0,0,490,491,5,1,0,0,491,492,3,20,10, - 0,492,494,3,98,49,0,493,495,3,86,43,0,494,493,1,0,0,0,494,495,1,0,0,0,495, - 81,1,0,0,0,496,497,5,7,0,0,497,498,3,20,10,0,498,499,3,98,49,0,499,83,1, - 0,0,0,500,501,5,11,0,0,501,502,3,52,26,0,502,85,1,0,0,0,503,508,3,88,44, - 0,504,505,5,35,0,0,505,507,3,88,44,0,506,504,1,0,0,0,507,510,1,0,0,0,508, - 506,1,0,0,0,508,509,1,0,0,0,509,87,1,0,0,0,510,508,1,0,0,0,511,512,3,58, - 29,0,512,513,5,33,0,0,513,514,3,62,31,0,514,89,1,0,0,0,515,516,7,6,0,0, - 516,91,1,0,0,0,517,520,3,94,47,0,518,520,3,96,48,0,519,517,1,0,0,0,519, - 518,1,0,0,0,520,93,1,0,0,0,521,523,7,0,0,0,522,521,1,0,0,0,522,523,1,0, - 0,0,523,524,1,0,0,0,524,525,5,29,0,0,525,95,1,0,0,0,526,528,7,0,0,0,527, - 526,1,0,0,0,527,528,1,0,0,0,528,529,1,0,0,0,529,530,5,28,0,0,530,97,1,0, - 0,0,531,532,5,27,0,0,532,99,1,0,0,0,533,534,7,7,0,0,534,101,1,0,0,0,535, - 536,5,5,0,0,536,537,3,104,52,0,537,103,1,0,0,0,538,539,5,66,0,0,539,540, - 3,2,1,0,540,541,5,67,0,0,541,105,1,0,0,0,542,543,5,14,0,0,543,544,5,101, - 0,0,544,107,1,0,0,0,545,546,5,10,0,0,546,547,5,105,0,0,547,109,1,0,0,0, - 548,549,5,3,0,0,549,552,5,91,0,0,550,551,5,89,0,0,551,553,3,54,27,0,552, - 550,1,0,0,0,552,553,1,0,0,0,553,563,1,0,0,0,554,555,5,90,0,0,555,560,3, - 112,56,0,556,557,5,35,0,0,557,559,3,112,56,0,558,556,1,0,0,0,559,562,1, - 0,0,0,560,558,1,0,0,0,560,561,1,0,0,0,561,564,1,0,0,0,562,560,1,0,0,0,563, - 554,1,0,0,0,563,564,1,0,0,0,564,111,1,0,0,0,565,566,3,54,27,0,566,567,5, - 33,0,0,567,569,1,0,0,0,568,565,1,0,0,0,568,569,1,0,0,0,569,570,1,0,0,0, - 570,571,3,54,27,0,571,113,1,0,0,0,572,573,5,19,0,0,573,574,3,34,17,0,574, - 575,5,89,0,0,575,576,3,56,28,0,576,115,1,0,0,0,577,578,5,18,0,0,578,581, - 3,28,14,0,579,580,5,30,0,0,580,582,3,28,14,0,581,579,1,0,0,0,581,582,1, - 0,0,0,582,117,1,0,0,0,583,584,5,20,0,0,584,585,3,120,60,0,585,119,1,0,0, - 0,586,587,5,27,0,0,587,121,1,0,0,0,54,133,143,163,175,184,192,198,206,208, - 213,220,225,236,242,250,252,263,270,281,284,298,306,314,318,325,333,341, - 354,358,362,369,373,380,388,396,418,429,440,445,449,460,465,469,483,494, - 508,519,522,527,552,560,563,568,581]; + 7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,1,0,1,0,1,0,1,1, + 1,1,1,1,1,1,1,1,1,1,5,1,128,8,1,10,1,12,1,131,9,1,1,2,1,2,1,2,1,2,1,2,1, + 2,1,2,3,2,140,8,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, + 3,1,3,1,3,3,3,158,8,3,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,170,8, + 5,1,5,1,5,1,5,1,5,1,5,5,5,177,8,5,10,5,12,5,180,9,5,1,5,1,5,1,5,1,5,1,5, + 3,5,187,8,5,1,5,1,5,1,5,1,5,3,5,193,8,5,1,5,1,5,1,5,1,5,1,5,1,5,5,5,201, + 8,5,10,5,12,5,204,9,5,1,6,1,6,3,6,208,8,6,1,6,1,6,1,6,1,6,1,6,3,6,215,8, + 6,1,6,1,6,1,6,3,6,220,8,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,3,8,231,8, + 8,1,9,1,9,1,9,1,9,3,9,237,8,9,1,9,1,9,1,9,1,9,1,9,1,9,5,9,245,8,9,10,9, + 12,9,248,9,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,3,10,258,8,10,1,10, + 1,10,1,10,5,10,263,8,10,10,10,12,10,266,9,10,1,11,1,11,1,11,1,11,1,11,1, + 11,5,11,274,8,11,10,11,12,11,277,9,11,3,11,279,8,11,1,11,1,11,1,12,1,12, + 1,13,1,13,1,13,1,14,1,14,1,14,5,14,291,8,14,10,14,12,14,294,9,14,1,15,1, + 15,1,15,1,15,1,15,3,15,301,8,15,1,16,1,16,1,16,1,16,5,16,307,8,16,10,16, + 12,16,310,9,16,1,16,3,16,313,8,16,1,17,1,17,1,17,1,17,1,17,3,17,320,8,17, + 1,18,1,18,1,19,1,19,1,20,1,20,3,20,328,8,20,1,21,1,21,1,21,1,21,5,21,334, + 8,21,10,21,12,21,337,9,21,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,5,23, + 347,8,23,10,23,12,23,350,9,23,1,23,3,23,353,8,23,1,23,1,23,3,23,357,8,23, + 1,24,1,24,1,24,1,25,1,25,3,25,364,8,25,1,25,1,25,3,25,368,8,25,1,26,1,26, + 1,26,5,26,373,8,26,10,26,12,26,376,9,26,1,27,1,27,1,27,5,27,381,8,27,10, + 27,12,27,384,9,27,1,28,1,28,1,28,5,28,389,8,28,10,28,12,28,392,9,28,1,29, + 1,29,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1, + 31,1,31,5,31,411,8,31,10,31,12,31,414,9,31,1,31,1,31,1,31,1,31,1,31,1,31, + 5,31,422,8,31,10,31,12,31,425,9,31,1,31,1,31,1,31,1,31,1,31,1,31,5,31,433, + 8,31,10,31,12,31,436,9,31,1,31,1,31,3,31,440,8,31,1,32,1,32,3,32,444,8, + 32,1,33,1,33,1,33,1,34,1,34,1,34,1,34,5,34,453,8,34,10,34,12,34,456,9,34, + 1,35,1,35,3,35,460,8,35,1,35,1,35,3,35,464,8,35,1,36,1,36,1,36,1,37,1,37, + 1,37,1,38,1,38,1,38,1,38,5,38,476,8,38,10,38,12,38,479,9,38,1,39,1,39,1, + 39,1,39,1,40,1,40,1,40,1,40,3,40,489,8,40,1,41,1,41,1,41,1,41,1,42,1,42, + 1,42,1,43,1,43,1,43,5,43,501,8,43,10,43,12,43,504,9,43,1,44,1,44,1,44,1, + 44,1,45,1,45,1,46,1,46,3,46,514,8,46,1,47,3,47,517,8,47,1,47,1,47,1,48, + 3,48,522,8,48,1,48,1,48,1,49,1,49,1,50,1,50,1,51,1,51,1,51,1,52,1,52,1, + 52,1,52,1,53,1,53,1,53,1,54,1,54,1,54,1,55,1,55,1,55,1,55,3,55,547,8,55, + 1,55,1,55,1,55,1,55,5,55,553,8,55,10,55,12,55,556,9,55,3,55,558,8,55,1, + 56,1,56,1,56,3,56,563,8,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,58,1,58, + 1,58,1,58,3,58,576,8,58,1,58,0,4,2,10,18,20,59,0,2,4,6,8,10,12,14,16,18, + 20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66, + 68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110, + 112,114,116,0,8,1,0,60,61,1,0,62,64,2,0,27,27,77,77,1,0,68,69,2,0,32,32, + 36,36,2,0,39,39,42,42,2,0,38,38,52,52,2,0,53,53,55,59,603,0,118,1,0,0,0, + 2,121,1,0,0,0,4,139,1,0,0,0,6,157,1,0,0,0,8,159,1,0,0,0,10,192,1,0,0,0, + 12,219,1,0,0,0,14,221,1,0,0,0,16,230,1,0,0,0,18,236,1,0,0,0,20,257,1,0, + 0,0,22,267,1,0,0,0,24,282,1,0,0,0,26,284,1,0,0,0,28,287,1,0,0,0,30,300, + 1,0,0,0,32,302,1,0,0,0,34,319,1,0,0,0,36,321,1,0,0,0,38,323,1,0,0,0,40, + 327,1,0,0,0,42,329,1,0,0,0,44,338,1,0,0,0,46,342,1,0,0,0,48,358,1,0,0,0, + 50,361,1,0,0,0,52,369,1,0,0,0,54,377,1,0,0,0,56,385,1,0,0,0,58,393,1,0, + 0,0,60,395,1,0,0,0,62,439,1,0,0,0,64,443,1,0,0,0,66,445,1,0,0,0,68,448, + 1,0,0,0,70,457,1,0,0,0,72,465,1,0,0,0,74,468,1,0,0,0,76,471,1,0,0,0,78, + 480,1,0,0,0,80,484,1,0,0,0,82,490,1,0,0,0,84,494,1,0,0,0,86,497,1,0,0,0, + 88,505,1,0,0,0,90,509,1,0,0,0,92,513,1,0,0,0,94,516,1,0,0,0,96,521,1,0, + 0,0,98,525,1,0,0,0,100,527,1,0,0,0,102,529,1,0,0,0,104,532,1,0,0,0,106, + 536,1,0,0,0,108,539,1,0,0,0,110,542,1,0,0,0,112,562,1,0,0,0,114,566,1,0, + 0,0,116,571,1,0,0,0,118,119,3,2,1,0,119,120,5,0,0,1,120,1,1,0,0,0,121,122, + 6,1,-1,0,122,123,3,4,2,0,123,129,1,0,0,0,124,125,10,1,0,0,125,126,5,26, + 0,0,126,128,3,6,3,0,127,124,1,0,0,0,128,131,1,0,0,0,129,127,1,0,0,0,129, + 130,1,0,0,0,130,3,1,0,0,0,131,129,1,0,0,0,132,140,3,102,51,0,133,140,3, + 32,16,0,134,140,3,108,54,0,135,140,3,26,13,0,136,140,3,106,53,0,137,138, + 4,2,1,0,138,140,3,46,23,0,139,132,1,0,0,0,139,133,1,0,0,0,139,134,1,0,0, + 0,139,135,1,0,0,0,139,136,1,0,0,0,139,137,1,0,0,0,140,5,1,0,0,0,141,158, + 3,48,24,0,142,158,3,8,4,0,143,158,3,72,36,0,144,158,3,66,33,0,145,158,3, + 50,25,0,146,158,3,68,34,0,147,158,3,74,37,0,148,158,3,76,38,0,149,158,3, + 80,40,0,150,158,3,82,41,0,151,158,3,110,55,0,152,158,3,84,42,0,153,154, + 4,3,2,0,154,158,3,116,58,0,155,156,4,3,3,0,156,158,3,114,57,0,157,141,1, + 0,0,0,157,142,1,0,0,0,157,143,1,0,0,0,157,144,1,0,0,0,157,145,1,0,0,0,157, + 146,1,0,0,0,157,147,1,0,0,0,157,148,1,0,0,0,157,149,1,0,0,0,157,150,1,0, + 0,0,157,151,1,0,0,0,157,152,1,0,0,0,157,153,1,0,0,0,157,155,1,0,0,0,158, + 7,1,0,0,0,159,160,5,17,0,0,160,161,3,10,5,0,161,9,1,0,0,0,162,163,6,5,-1, + 0,163,164,5,45,0,0,164,193,3,10,5,8,165,193,3,16,8,0,166,193,3,12,6,0,167, + 169,3,16,8,0,168,170,5,45,0,0,169,168,1,0,0,0,169,170,1,0,0,0,170,171,1, + 0,0,0,171,172,5,40,0,0,172,173,5,44,0,0,173,178,3,16,8,0,174,175,5,35,0, + 0,175,177,3,16,8,0,176,174,1,0,0,0,177,180,1,0,0,0,178,176,1,0,0,0,178, + 179,1,0,0,0,179,181,1,0,0,0,180,178,1,0,0,0,181,182,5,51,0,0,182,193,1, + 0,0,0,183,184,3,16,8,0,184,186,5,41,0,0,185,187,5,45,0,0,186,185,1,0,0, + 0,186,187,1,0,0,0,187,188,1,0,0,0,188,189,5,46,0,0,189,193,1,0,0,0,190, + 191,4,5,4,0,191,193,3,14,7,0,192,162,1,0,0,0,192,165,1,0,0,0,192,166,1, + 0,0,0,192,167,1,0,0,0,192,183,1,0,0,0,192,190,1,0,0,0,193,202,1,0,0,0,194, + 195,10,5,0,0,195,196,5,31,0,0,196,201,3,10,5,6,197,198,10,4,0,0,198,199, + 5,48,0,0,199,201,3,10,5,5,200,194,1,0,0,0,200,197,1,0,0,0,201,204,1,0,0, + 0,202,200,1,0,0,0,202,203,1,0,0,0,203,11,1,0,0,0,204,202,1,0,0,0,205,207, + 3,16,8,0,206,208,5,45,0,0,207,206,1,0,0,0,207,208,1,0,0,0,208,209,1,0,0, + 0,209,210,5,43,0,0,210,211,3,98,49,0,211,220,1,0,0,0,212,214,3,16,8,0,213, + 215,5,45,0,0,214,213,1,0,0,0,214,215,1,0,0,0,215,216,1,0,0,0,216,217,5, + 50,0,0,217,218,3,98,49,0,218,220,1,0,0,0,219,205,1,0,0,0,219,212,1,0,0, + 0,220,13,1,0,0,0,221,222,3,16,8,0,222,223,5,20,0,0,223,224,3,98,49,0,224, + 15,1,0,0,0,225,231,3,18,9,0,226,227,3,18,9,0,227,228,3,100,50,0,228,229, + 3,18,9,0,229,231,1,0,0,0,230,225,1,0,0,0,230,226,1,0,0,0,231,17,1,0,0,0, + 232,233,6,9,-1,0,233,237,3,20,10,0,234,235,7,0,0,0,235,237,3,18,9,3,236, + 232,1,0,0,0,236,234,1,0,0,0,237,246,1,0,0,0,238,239,10,2,0,0,239,240,7, + 1,0,0,240,245,3,18,9,3,241,242,10,1,0,0,242,243,7,0,0,0,243,245,3,18,9, + 2,244,238,1,0,0,0,244,241,1,0,0,0,245,248,1,0,0,0,246,244,1,0,0,0,246,247, + 1,0,0,0,247,19,1,0,0,0,248,246,1,0,0,0,249,250,6,10,-1,0,250,258,3,62,31, + 0,251,258,3,52,26,0,252,258,3,22,11,0,253,254,5,44,0,0,254,255,3,10,5,0, + 255,256,5,51,0,0,256,258,1,0,0,0,257,249,1,0,0,0,257,251,1,0,0,0,257,252, + 1,0,0,0,257,253,1,0,0,0,258,264,1,0,0,0,259,260,10,1,0,0,260,261,5,34,0, + 0,261,263,3,24,12,0,262,259,1,0,0,0,263,266,1,0,0,0,264,262,1,0,0,0,264, + 265,1,0,0,0,265,21,1,0,0,0,266,264,1,0,0,0,267,268,3,58,29,0,268,278,5, + 44,0,0,269,279,5,62,0,0,270,275,3,10,5,0,271,272,5,35,0,0,272,274,3,10, + 5,0,273,271,1,0,0,0,274,277,1,0,0,0,275,273,1,0,0,0,275,276,1,0,0,0,276, + 279,1,0,0,0,277,275,1,0,0,0,278,269,1,0,0,0,278,270,1,0,0,0,278,279,1,0, + 0,0,279,280,1,0,0,0,280,281,5,51,0,0,281,23,1,0,0,0,282,283,3,58,29,0,283, + 25,1,0,0,0,284,285,5,13,0,0,285,286,3,28,14,0,286,27,1,0,0,0,287,292,3, + 30,15,0,288,289,5,35,0,0,289,291,3,30,15,0,290,288,1,0,0,0,291,294,1,0, + 0,0,292,290,1,0,0,0,292,293,1,0,0,0,293,29,1,0,0,0,294,292,1,0,0,0,295, + 301,3,10,5,0,296,297,3,52,26,0,297,298,5,33,0,0,298,299,3,10,5,0,299,301, + 1,0,0,0,300,295,1,0,0,0,300,296,1,0,0,0,301,31,1,0,0,0,302,303,5,6,0,0, + 303,308,3,34,17,0,304,305,5,35,0,0,305,307,3,34,17,0,306,304,1,0,0,0,307, + 310,1,0,0,0,308,306,1,0,0,0,308,309,1,0,0,0,309,312,1,0,0,0,310,308,1,0, + 0,0,311,313,3,40,20,0,312,311,1,0,0,0,312,313,1,0,0,0,313,33,1,0,0,0,314, + 315,3,36,18,0,315,316,5,109,0,0,316,317,3,38,19,0,317,320,1,0,0,0,318,320, + 3,38,19,0,319,314,1,0,0,0,319,318,1,0,0,0,320,35,1,0,0,0,321,322,5,77,0, + 0,322,37,1,0,0,0,323,324,7,2,0,0,324,39,1,0,0,0,325,328,3,42,21,0,326,328, + 3,44,22,0,327,325,1,0,0,0,327,326,1,0,0,0,328,41,1,0,0,0,329,330,5,76,0, + 0,330,335,5,77,0,0,331,332,5,35,0,0,332,334,5,77,0,0,333,331,1,0,0,0,334, + 337,1,0,0,0,335,333,1,0,0,0,335,336,1,0,0,0,336,43,1,0,0,0,337,335,1,0, + 0,0,338,339,5,66,0,0,339,340,3,42,21,0,340,341,5,67,0,0,341,45,1,0,0,0, + 342,343,5,21,0,0,343,348,3,34,17,0,344,345,5,35,0,0,345,347,3,34,17,0,346, + 344,1,0,0,0,347,350,1,0,0,0,348,346,1,0,0,0,348,349,1,0,0,0,349,352,1,0, + 0,0,350,348,1,0,0,0,351,353,3,28,14,0,352,351,1,0,0,0,352,353,1,0,0,0,353, + 356,1,0,0,0,354,355,5,30,0,0,355,357,3,28,14,0,356,354,1,0,0,0,356,357, + 1,0,0,0,357,47,1,0,0,0,358,359,5,4,0,0,359,360,3,28,14,0,360,49,1,0,0,0, + 361,363,5,16,0,0,362,364,3,28,14,0,363,362,1,0,0,0,363,364,1,0,0,0,364, + 367,1,0,0,0,365,366,5,30,0,0,366,368,3,28,14,0,367,365,1,0,0,0,367,368, + 1,0,0,0,368,51,1,0,0,0,369,374,3,58,29,0,370,371,5,37,0,0,371,373,3,58, + 29,0,372,370,1,0,0,0,373,376,1,0,0,0,374,372,1,0,0,0,374,375,1,0,0,0,375, + 53,1,0,0,0,376,374,1,0,0,0,377,382,3,60,30,0,378,379,5,37,0,0,379,381,3, + 60,30,0,380,378,1,0,0,0,381,384,1,0,0,0,382,380,1,0,0,0,382,383,1,0,0,0, + 383,55,1,0,0,0,384,382,1,0,0,0,385,390,3,54,27,0,386,387,5,35,0,0,387,389, + 3,54,27,0,388,386,1,0,0,0,389,392,1,0,0,0,390,388,1,0,0,0,390,391,1,0,0, + 0,391,57,1,0,0,0,392,390,1,0,0,0,393,394,7,3,0,0,394,59,1,0,0,0,395,396, + 5,81,0,0,396,61,1,0,0,0,397,440,5,46,0,0,398,399,3,96,48,0,399,400,5,68, + 0,0,400,440,1,0,0,0,401,440,3,94,47,0,402,440,3,96,48,0,403,440,3,90,45, + 0,404,440,3,64,32,0,405,440,3,98,49,0,406,407,5,66,0,0,407,412,3,92,46, + 0,408,409,5,35,0,0,409,411,3,92,46,0,410,408,1,0,0,0,411,414,1,0,0,0,412, + 410,1,0,0,0,412,413,1,0,0,0,413,415,1,0,0,0,414,412,1,0,0,0,415,416,5,67, + 0,0,416,440,1,0,0,0,417,418,5,66,0,0,418,423,3,90,45,0,419,420,5,35,0,0, + 420,422,3,90,45,0,421,419,1,0,0,0,422,425,1,0,0,0,423,421,1,0,0,0,423,424, + 1,0,0,0,424,426,1,0,0,0,425,423,1,0,0,0,426,427,5,67,0,0,427,440,1,0,0, + 0,428,429,5,66,0,0,429,434,3,98,49,0,430,431,5,35,0,0,431,433,3,98,49,0, + 432,430,1,0,0,0,433,436,1,0,0,0,434,432,1,0,0,0,434,435,1,0,0,0,435,437, + 1,0,0,0,436,434,1,0,0,0,437,438,5,67,0,0,438,440,1,0,0,0,439,397,1,0,0, + 0,439,398,1,0,0,0,439,401,1,0,0,0,439,402,1,0,0,0,439,403,1,0,0,0,439,404, + 1,0,0,0,439,405,1,0,0,0,439,406,1,0,0,0,439,417,1,0,0,0,439,428,1,0,0,0, + 440,63,1,0,0,0,441,444,5,49,0,0,442,444,5,65,0,0,443,441,1,0,0,0,443,442, + 1,0,0,0,444,65,1,0,0,0,445,446,5,9,0,0,446,447,5,28,0,0,447,67,1,0,0,0, + 448,449,5,15,0,0,449,454,3,70,35,0,450,451,5,35,0,0,451,453,3,70,35,0,452, + 450,1,0,0,0,453,456,1,0,0,0,454,452,1,0,0,0,454,455,1,0,0,0,455,69,1,0, + 0,0,456,454,1,0,0,0,457,459,3,10,5,0,458,460,7,4,0,0,459,458,1,0,0,0,459, + 460,1,0,0,0,460,463,1,0,0,0,461,462,5,47,0,0,462,464,7,5,0,0,463,461,1, + 0,0,0,463,464,1,0,0,0,464,71,1,0,0,0,465,466,5,8,0,0,466,467,3,56,28,0, + 467,73,1,0,0,0,468,469,5,2,0,0,469,470,3,56,28,0,470,75,1,0,0,0,471,472, + 5,12,0,0,472,477,3,78,39,0,473,474,5,35,0,0,474,476,3,78,39,0,475,473,1, + 0,0,0,476,479,1,0,0,0,477,475,1,0,0,0,477,478,1,0,0,0,478,77,1,0,0,0,479, + 477,1,0,0,0,480,481,3,54,27,0,481,482,5,85,0,0,482,483,3,54,27,0,483,79, + 1,0,0,0,484,485,5,1,0,0,485,486,3,20,10,0,486,488,3,98,49,0,487,489,3,86, + 43,0,488,487,1,0,0,0,488,489,1,0,0,0,489,81,1,0,0,0,490,491,5,7,0,0,491, + 492,3,20,10,0,492,493,3,98,49,0,493,83,1,0,0,0,494,495,5,11,0,0,495,496, + 3,52,26,0,496,85,1,0,0,0,497,502,3,88,44,0,498,499,5,35,0,0,499,501,3,88, + 44,0,500,498,1,0,0,0,501,504,1,0,0,0,502,500,1,0,0,0,502,503,1,0,0,0,503, + 87,1,0,0,0,504,502,1,0,0,0,505,506,3,58,29,0,506,507,5,33,0,0,507,508,3, + 62,31,0,508,89,1,0,0,0,509,510,7,6,0,0,510,91,1,0,0,0,511,514,3,94,47,0, + 512,514,3,96,48,0,513,511,1,0,0,0,513,512,1,0,0,0,514,93,1,0,0,0,515,517, + 7,0,0,0,516,515,1,0,0,0,516,517,1,0,0,0,517,518,1,0,0,0,518,519,5,29,0, + 0,519,95,1,0,0,0,520,522,7,0,0,0,521,520,1,0,0,0,521,522,1,0,0,0,522,523, + 1,0,0,0,523,524,5,28,0,0,524,97,1,0,0,0,525,526,5,27,0,0,526,99,1,0,0,0, + 527,528,7,7,0,0,528,101,1,0,0,0,529,530,5,5,0,0,530,531,3,104,52,0,531, + 103,1,0,0,0,532,533,5,66,0,0,533,534,3,2,1,0,534,535,5,67,0,0,535,105,1, + 0,0,0,536,537,5,14,0,0,537,538,5,101,0,0,538,107,1,0,0,0,539,540,5,10,0, + 0,540,541,5,105,0,0,541,109,1,0,0,0,542,543,5,3,0,0,543,546,5,91,0,0,544, + 545,5,89,0,0,545,547,3,54,27,0,546,544,1,0,0,0,546,547,1,0,0,0,547,557, + 1,0,0,0,548,549,5,90,0,0,549,554,3,112,56,0,550,551,5,35,0,0,551,553,3, + 112,56,0,552,550,1,0,0,0,553,556,1,0,0,0,554,552,1,0,0,0,554,555,1,0,0, + 0,555,558,1,0,0,0,556,554,1,0,0,0,557,548,1,0,0,0,557,558,1,0,0,0,558,111, + 1,0,0,0,559,560,3,54,27,0,560,561,5,33,0,0,561,563,1,0,0,0,562,559,1,0, + 0,0,562,563,1,0,0,0,563,564,1,0,0,0,564,565,3,54,27,0,565,113,1,0,0,0,566, + 567,5,19,0,0,567,568,3,34,17,0,568,569,5,89,0,0,569,570,3,56,28,0,570,115, + 1,0,0,0,571,572,5,18,0,0,572,575,3,28,14,0,573,574,5,30,0,0,574,576,3,28, + 14,0,575,573,1,0,0,0,575,576,1,0,0,0,576,117,1,0,0,0,54,129,139,157,169, + 178,186,192,200,202,207,214,219,230,236,244,246,257,264,275,278,292,300, + 308,312,319,327,335,348,352,356,363,367,374,382,390,412,423,434,439,443, + 454,459,463,477,488,502,513,516,521,546,554,557,562,575]; private static __ATN: ATN; public static get _ATN(): ATN { @@ -3773,9 +3701,6 @@ export class ProcessingCommandContext extends ParserRuleContext { public lookupCommand(): LookupCommandContext { return this.getTypedRuleContext(LookupCommandContext, 0) as LookupCommandContext; } - public matchCommand(): MatchCommandContext { - return this.getTypedRuleContext(MatchCommandContext, 0) as MatchCommandContext; - } public get ruleIndex(): number { return esql_parser.RULE_processingCommand; } @@ -6139,54 +6064,3 @@ export class InlinestatsCommandContext extends ParserRuleContext { } } } - - -export class MatchCommandContext extends ParserRuleContext { - constructor(parser?: esql_parser, parent?: ParserRuleContext, invokingState?: number) { - super(parent, invokingState); - this.parser = parser; - } - public DEV_MATCH(): TerminalNode { - return this.getToken(esql_parser.DEV_MATCH, 0); - } - public matchQuery(): MatchQueryContext { - return this.getTypedRuleContext(MatchQueryContext, 0) as MatchQueryContext; - } - public get ruleIndex(): number { - return esql_parser.RULE_matchCommand; - } - public enterRule(listener: esql_parserListener): void { - if(listener.enterMatchCommand) { - listener.enterMatchCommand(this); - } - } - public exitRule(listener: esql_parserListener): void { - if(listener.exitMatchCommand) { - listener.exitMatchCommand(this); - } - } -} - - -export class MatchQueryContext extends ParserRuleContext { - constructor(parser?: esql_parser, parent?: ParserRuleContext, invokingState?: number) { - super(parent, invokingState); - this.parser = parser; - } - public QUOTED_STRING(): TerminalNode { - return this.getToken(esql_parser.QUOTED_STRING, 0); - } - public get ruleIndex(): number { - return esql_parser.RULE_matchQuery; - } - public enterRule(listener: esql_parserListener): void { - if(listener.enterMatchQuery) { - listener.enterMatchQuery(this); - } - } - public exitRule(listener: esql_parserListener): void { - if(listener.exitMatchQuery) { - listener.exitMatchQuery(this); - } - } -} diff --git a/packages/kbn-esql-ast/src/antlr/esql_parser_listener.ts b/packages/kbn-esql-ast/src/antlr/esql_parser_listener.ts index 7beb89e1ddd0e..00a5596944960 100644 --- a/packages/kbn-esql-ast/src/antlr/esql_parser_listener.ts +++ b/packages/kbn-esql-ast/src/antlr/esql_parser_listener.ts @@ -95,8 +95,6 @@ import { EnrichCommandContext } from "./esql_parser.js"; import { EnrichWithClauseContext } from "./esql_parser.js"; import { LookupCommandContext } from "./esql_parser.js"; import { InlinestatsCommandContext } from "./esql_parser.js"; -import { MatchCommandContext } from "./esql_parser.js"; -import { MatchQueryContext } from "./esql_parser.js"; /** @@ -1002,25 +1000,5 @@ export default class esql_parserListener extends ParseTreeListener { * @param ctx the parse tree */ exitInlinestatsCommand?: (ctx: InlinestatsCommandContext) => void; - /** - * Enter a parse tree produced by `esql_parser.matchCommand`. - * @param ctx the parse tree - */ - enterMatchCommand?: (ctx: MatchCommandContext) => void; - /** - * Exit a parse tree produced by `esql_parser.matchCommand`. - * @param ctx the parse tree - */ - exitMatchCommand?: (ctx: MatchCommandContext) => void; - /** - * Enter a parse tree produced by `esql_parser.matchQuery`. - * @param ctx the parse tree - */ - enterMatchQuery?: (ctx: MatchQueryContext) => void; - /** - * Exit a parse tree produced by `esql_parser.matchQuery`. - * @param ctx the parse tree - */ - exitMatchQuery?: (ctx: MatchQueryContext) => void; } From 36a73ce52e2ca14c2d46c3a6504ebaa53fed9f98 Mon Sep 17 00:00:00 2001 From: Marco Antonio Ghiani Date: Mon, 30 Sep 2024 11:08:03 +0200 Subject: [PATCH 08/60] [One Discover] Add summary column for logs contextual experience (#192567) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 📓 Summary Closes https://github.com/elastic/logs-dev/issues/165 This work introduces a Summary column as a replacement for the Document one for the Discover logs contextual experience. > We also decided to port this change as a replacement for the **resource** and **content** virtual columns in Logs Explorer to have a better alignment between the 2 apps. ## 🎥 Demo https://github.com/user-attachments/assets/3dfca483-768e-471c-8735-d5fc8bbd5d00 ## 💡 Reviewer hints I left notes through the changes to help answer some questions. The notable changes on this PR are: - Rename `Document` column to `Summary`. - Refactor `resource` and `content` virtual columns into a single `Summary` column, which replaces the default Summary content for the logs' contextual experience. - Provide support for the plugin services to the context awareness profiles. - Disable virtual columns (clean up will go in a follow-up work) in Logs Explorer and rely on the Summary column as the default selection. --------- Co-authored-by: Marco Antonio Ghiani Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Davis McPhee --- .../degraded_docs_control.tsx | 2 +- .../data_types/logs/logs_context_service.ts | 10 +- .../logs/utils/get_field_from_doc.ts | 17 -- .../src/data_types/logs/utils/index.ts | 1 - .../src/utils/get_field_value.ts | 5 +- .../src/utils/get_log_document_overview.ts | 18 +- .../src/utils/get_stack_trace_fields.ts | 8 +- packages/kbn-unified-data-table/index.ts | 6 +- .../src/components/data_table_columns.tsx | 2 +- .../src/hooks/use_data_grid_density.ts | 18 +- .../src/hooks/use_row_height.ts | 77 ++++++-- .../src/utils/columns.ts | 4 +- .../utils/get_render_cell_popover.test.tsx | 17 +- .../src/utils/get_render_cell_popover.tsx | 18 +- .../context/context_app_content.tsx | 23 ++- .../layout/discover_documents.test.tsx | 3 +- .../components/layout/discover_documents.tsx | 29 ++- .../main/hooks/grid_customisations/index.ts | 13 +- .../main/hooks/grid_customisations/logs.tsx | 27 +-- .../use_virtual_column_services.tsx | 24 --- src/plugins/discover/public/build_services.ts | 3 + .../data_types/logs/cell_actions_popover.tsx | 181 ++++++++++++++++++ .../data_types/logs/copy_button.tsx | 30 --- .../data_types/logs/filter_in_button.tsx | 42 ---- .../data_types/logs/filter_out_button.tsx | 42 ---- .../components/data_types/logs/log_level.tsx | 38 ---- .../data_types/logs/log_level_badge_cell.tsx | 2 +- .../data_types/logs/popover_chip.tsx | 173 ----------------- ...sx => service_name_badge_with_actions.tsx} | 44 +++-- .../logs/summary_column/content.tsx | 104 ++++++++++ .../data_types/logs/summary_column/index.tsx | 39 ++++ .../logs/summary_column/resource.tsx | 40 ++++ .../summary_column/summary_column.test.tsx | 176 +++++++++++++++++ .../logs/summary_column/summary_column.tsx | 169 ++++++++++++++++ .../data_types/logs/summary_column/utils.tsx | 126 ++++++++++++ .../data_types/logs/translations.tsx | 4 + .../virtual_columns/logs/cell_renderer.tsx | 45 ----- .../virtual_columns/logs/column.tsx | 32 ---- .../content_column_tooltip.tsx | 47 ----- .../logs/column_tooltips/field_with_token.tsx | 45 ----- .../logs/column_tooltips/hover_popover.tsx | 60 ------ .../resource_column_tooltip.tsx | 50 ----- .../logs/column_tooltips/tooltip_button.tsx | 80 -------- .../virtual_columns/logs/content.tsx | 165 ---------------- .../virtual_columns/logs/resource.tsx | 71 ------- .../virtual_columns/logs/utils/resource.ts | 35 ---- .../context_awareness/__mocks__/index.tsx | 11 +- .../composable_profile.test.ts | 27 ++- .../hooks/use_profile_accessor.test.ts | 18 +- .../accessors/get_cell_renderers.tsx | 9 +- .../logs_data_source_profile/profile.test.ts | 10 +- .../logs_data_source_profile/profile.ts | 2 +- .../example_data_source_profile/profile.tsx | 6 +- .../example/example_root_pofile/profile.tsx | 6 +- .../profile_provider_services.ts | 12 +- .../register_profile_providers.test.ts | 29 +-- .../register_profile_providers.ts | 10 +- .../security_root_profile/profile.tsx | 4 +- .../public/context_awareness/types.ts | 33 +++- .../components/saved_search_grid.tsx | 34 +++- src/plugins/discover/public/plugin.tsx | 65 +++---- src/plugins/discover/public/types.ts | 4 +- .../utils/get_available_resource_fields.ts | 23 +++ src/plugins/discover/tsconfig.json | 1 + .../logs_overview_header.tsx | 11 +- .../extensions/_get_cell_renderers.ts | 63 ++++++ .../extensions/_get_default_app_state.ts | 8 +- .../apps/discover/esql/_esql_columns.ts | 8 +- .../discover/group2_data_grid1/_data_grid.ts | 4 +- .../_data_grid_copy_to_clipboard.ts | 4 +- .../_data_grid_field_data.ts | 2 +- .../apps/discover/group3/_drag_drop.ts | 4 +- .../discover/group4/_discover_fields_api.ts | 10 +- .../group5/_field_data_with_fields_api.ts | 4 +- .../apps/discover/group5/_source_filters.ts | 2 +- .../apps/discover/group6/_sidebar.ts | 4 +- .../discover/group6/_time_field_column.ts | 24 +-- .../logs_explorer/common/constants.ts | 11 +- .../customizations/logs_explorer_profile.tsx | 8 +- .../hooks/use_virtual_column_services.tsx | 21 -- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - .../columns_selection.ts | 28 +-- .../observability_logs_explorer/field_list.ts | 2 +- .../header_menu.ts | 7 +- .../extensions/_get_cell_renderers.ts | 63 ++++++ .../extensions/_get_default_app_state.ts | 8 +- .../common/discover/group6/_sidebar.ts | 4 +- .../columns_selection.ts | 28 +-- .../observability_logs_explorer/field_list.ts | 2 +- .../header_menu.ts | 7 +- 92 files changed, 1482 insertions(+), 1327 deletions(-) delete mode 100644 packages/kbn-discover-utils/src/data_types/logs/utils/get_field_from_doc.ts delete mode 100644 src/plugins/discover/public/application/main/hooks/grid_customisations/use_virtual_column_services.tsx create mode 100644 src/plugins/discover/public/components/data_types/logs/cell_actions_popover.tsx delete mode 100644 src/plugins/discover/public/components/data_types/logs/copy_button.tsx delete mode 100644 src/plugins/discover/public/components/data_types/logs/filter_in_button.tsx delete mode 100644 src/plugins/discover/public/components/data_types/logs/filter_out_button.tsx delete mode 100644 src/plugins/discover/public/components/data_types/logs/log_level.tsx delete mode 100644 src/plugins/discover/public/components/data_types/logs/popover_chip.tsx rename src/plugins/discover/public/components/data_types/logs/{service_name_chip_with_popover.tsx => service_name_badge_with_actions.tsx} (56%) create mode 100644 src/plugins/discover/public/components/data_types/logs/summary_column/content.tsx create mode 100644 src/plugins/discover/public/components/data_types/logs/summary_column/index.tsx create mode 100644 src/plugins/discover/public/components/data_types/logs/summary_column/resource.tsx create mode 100644 src/plugins/discover/public/components/data_types/logs/summary_column/summary_column.test.tsx create mode 100644 src/plugins/discover/public/components/data_types/logs/summary_column/summary_column.tsx create mode 100644 src/plugins/discover/public/components/data_types/logs/summary_column/utils.tsx delete mode 100644 src/plugins/discover/public/components/discover_grid/virtual_columns/logs/cell_renderer.tsx delete mode 100644 src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column.tsx delete mode 100644 src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/content_column_tooltip.tsx delete mode 100644 src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/field_with_token.tsx delete mode 100644 src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/hover_popover.tsx delete mode 100644 src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/resource_column_tooltip.tsx delete mode 100644 src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/tooltip_button.tsx delete mode 100644 src/plugins/discover/public/components/discover_grid/virtual_columns/logs/content.tsx delete mode 100644 src/plugins/discover/public/components/discover_grid/virtual_columns/logs/resource.tsx delete mode 100644 src/plugins/discover/public/components/discover_grid/virtual_columns/logs/utils/resource.ts create mode 100644 src/plugins/discover/public/utils/get_available_resource_fields.ts delete mode 100644 x-pack/plugins/observability_solution/logs_explorer/public/hooks/use_virtual_column_services.tsx diff --git a/packages/kbn-discover-utils/src/components/custom_control_columns/degraded_docs_control.tsx b/packages/kbn-discover-utils/src/components/custom_control_columns/degraded_docs_control.tsx index be4dbe3027214..f3ea72fcc8780 100644 --- a/packages/kbn-discover-utils/src/components/custom_control_columns/degraded_docs_control.tsx +++ b/packages/kbn-discover-utils/src/components/custom_control_columns/degraded_docs_control.tsx @@ -43,7 +43,7 @@ const degradedDocButtonLabelWhenPresent = i18n.translate( 'discover.customControl.degradedDocPresent', { defaultMessage: - "This document couldn't be parsed correctly. Not all fields are properly populated", + "This document couldn't be parsed correctly. Not all fields are properly populated.", } ); diff --git a/packages/kbn-discover-utils/src/data_types/logs/logs_context_service.ts b/packages/kbn-discover-utils/src/data_types/logs/logs_context_service.ts index 7af3a723e7b14..5f05def6d9c94 100644 --- a/packages/kbn-discover-utils/src/data_types/logs/logs_context_service.ts +++ b/packages/kbn-discover-utils/src/data_types/logs/logs_context_service.ts @@ -15,7 +15,7 @@ export interface LogsContextService { } export interface LogsContextServiceDeps { - logsDataAccessPlugin?: LogsDataAccessPluginStart; + logsDataAccess?: LogsDataAccessPluginStart; } export const DEFAULT_ALLOWED_LOGS_BASE_PATTERNS = [ @@ -31,13 +31,11 @@ export const DEFAULT_ALLOWED_LOGS_BASE_PATTERNS_REGEXP = createRegExpPatternFrom DEFAULT_ALLOWED_LOGS_BASE_PATTERNS ); -export const createLogsContextService = async ({ - logsDataAccessPlugin, -}: LogsContextServiceDeps) => { +export const createLogsContextService = async ({ logsDataAccess }: LogsContextServiceDeps) => { let logSources: string[] | undefined; - if (logsDataAccessPlugin) { - const logSourcesService = logsDataAccessPlugin.services.logSourcesService; + if (logsDataAccess) { + const logSourcesService = logsDataAccess.services.logSourcesService; logSources = (await logSourcesService.getLogSources()) .map((logSource) => logSource.indexPattern) .join(',') // TODO: Will be replaced by helper in: https://github.com/elastic/kibana/pull/192003 diff --git a/packages/kbn-discover-utils/src/data_types/logs/utils/get_field_from_doc.ts b/packages/kbn-discover-utils/src/data_types/logs/utils/get_field_from_doc.ts deleted file mode 100644 index 32e6d9a52b47b..0000000000000 --- a/packages/kbn-discover-utils/src/data_types/logs/utils/get_field_from_doc.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { LogDocument } from '../types'; - -type Field = keyof LogDocument['flattened']; - -export const getFieldFromDoc = (doc: LogDocument, field: T) => { - const fieldValueArray = doc.flattened[field]; - return fieldValueArray && fieldValueArray.length ? fieldValueArray[0] : undefined; -}; diff --git a/packages/kbn-discover-utils/src/data_types/logs/utils/index.ts b/packages/kbn-discover-utils/src/data_types/logs/utils/index.ts index a435502d9ecb9..0b266fa5b4935 100644 --- a/packages/kbn-discover-utils/src/data_types/logs/utils/index.ts +++ b/packages/kbn-discover-utils/src/data_types/logs/utils/index.ts @@ -7,6 +7,5 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -export * from './get_field_from_doc'; export * from './get_log_level_color'; export * from './get_log_level_coalesed_value'; diff --git a/packages/kbn-discover-utils/src/utils/get_field_value.ts b/packages/kbn-discover-utils/src/utils/get_field_value.ts index 2bd94ce5dcbc8..dab2cdfdfb020 100644 --- a/packages/kbn-discover-utils/src/utils/get_field_value.ts +++ b/packages/kbn-discover-utils/src/utils/get_field_value.ts @@ -9,7 +9,10 @@ import { DataTableRecord } from '../types'; -export const getFieldValue = (record: DataTableRecord, field: string) => { +export const getFieldValue = ( + record: TRecord, + field: TField & keyof TRecord['flattened'] +): TRecord['flattened'][TField] => { const value = record.flattened[field]; return Array.isArray(value) ? value[0] : value; }; diff --git a/packages/kbn-discover-utils/src/utils/get_log_document_overview.ts b/packages/kbn-discover-utils/src/utils/get_log_document_overview.ts index fafcf5c9faf38..33c8fdba68526 100644 --- a/packages/kbn-discover-utils/src/utils/get_log_document_overview.ts +++ b/packages/kbn-discover-utils/src/utils/get_log_document_overview.ts @@ -17,7 +17,7 @@ export function getLogDocumentOverview( ): LogDocumentOverview { const formatField = (field: T) => { return ( - field in doc.flattened + doc.flattened[field] !== undefined && doc.flattened[field] !== null ? formatFieldValue( doc.flattened[field], doc.raw, @@ -32,19 +32,9 @@ export function getLogDocumentOverview( const levelArray = doc.flattened[fieldConstants.LOG_LEVEL_FIELD]; const level = Array.isArray(levelArray) && levelArray.length ? levelArray[0].toLowerCase() : levelArray; - const messageArray = doc.flattened[fieldConstants.MESSAGE_FIELD]; - const message = - Array.isArray(messageArray) && messageArray.length ? messageArray[0] : messageArray; - const errorMessageArray = doc.flattened[fieldConstants.ERROR_MESSAGE_FIELD]; - const errorMessage = - Array.isArray(errorMessageArray) && errorMessageArray.length - ? errorMessageArray[0] - : errorMessageArray; - const eventOriginalArray = doc.flattened[fieldConstants.EVENT_ORIGINAL_FIELD]; - const eventOriginal = - Array.isArray(eventOriginalArray) && eventOriginalArray.length - ? eventOriginalArray[0] - : eventOriginalArray; + const message = formatField(fieldConstants.MESSAGE_FIELD); + const errorMessage = formatField(fieldConstants.ERROR_MESSAGE_FIELD); + const eventOriginal = formatField(fieldConstants.EVENT_ORIGINAL_FIELD); const timestamp = formatField(fieldConstants.TIMESTAMP_FIELD); // Service diff --git a/packages/kbn-discover-utils/src/utils/get_stack_trace_fields.ts b/packages/kbn-discover-utils/src/utils/get_stack_trace_fields.ts index 15a2b345be615..b2d61c007ea3f 100644 --- a/packages/kbn-discover-utils/src/utils/get_stack_trace_fields.ts +++ b/packages/kbn-discover-utils/src/utils/get_stack_trace_fields.ts @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { getFieldFromDoc, LogDocument, StackTraceFields } from '..'; +import { getFieldValue, LogDocument, StackTraceFields } from '..'; import { ERROR_EXCEPTION_STACKTRACE, ERROR_LOG_STACKTRACE, @@ -15,9 +15,9 @@ import { } from '../field_constants'; export const getStacktraceFields = (doc: LogDocument): StackTraceFields => { - const errorStackTrace = getFieldFromDoc(doc, ERROR_STACK_TRACE); - const errorExceptionStackTrace = getFieldFromDoc(doc, ERROR_EXCEPTION_STACKTRACE); - const errorLogStackTrace = getFieldFromDoc(doc, ERROR_LOG_STACKTRACE); + const errorStackTrace = getFieldValue(doc, ERROR_STACK_TRACE); + const errorExceptionStackTrace = getFieldValue(doc, ERROR_EXCEPTION_STACKTRACE); + const errorLogStackTrace = getFieldValue(doc, ERROR_LOG_STACKTRACE); return { [ERROR_STACK_TRACE]: errorStackTrace, diff --git a/packages/kbn-unified-data-table/index.ts b/packages/kbn-unified-data-table/index.ts index ddcf653611257..8f7e711bebcad 100644 --- a/packages/kbn-unified-data-table/index.ts +++ b/packages/kbn-unified-data-table/index.ts @@ -13,11 +13,12 @@ export { RowHeightSettings, type RowHeightSettingsProps, } from './src/components/row_height_settings'; -export { getDisplayedColumns } from './src/utils/columns'; +export { getDisplayedColumns, SOURCE_COLUMN } from './src/utils/columns'; export { getTextBasedColumnsMeta } from './src/utils/get_columns_meta'; export { ROWS_HEIGHT_OPTIONS, DataGridDensity } from './src/constants'; export { JSONCodeEditorCommonMemoized } from './src/components/json_code_editor/json_code_editor_common'; +export { SourceDocument } from './src/components/source_document'; export * from './src/types'; export * as columnActions from './src/components/actions/columns'; @@ -37,3 +38,6 @@ export { getRenderCustomToolbarWithElements, renderCustomToolbar, } from './src/components/custom_toolbar/render_custom_toolbar'; + +export { getDataGridDensity } from './src/hooks/use_data_grid_density'; +export { getRowHeight } from './src/hooks/use_row_height'; diff --git a/packages/kbn-unified-data-table/src/components/data_table_columns.tsx b/packages/kbn-unified-data-table/src/components/data_table_columns.tsx index 876db4b0e7149..985a5db9f2178 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_columns.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_columns.tsx @@ -46,7 +46,7 @@ export const getColumnDisplayName = ( if (columnName === '_source') { return i18n.translate('unifiedDataTable.grid.documentHeader', { - defaultMessage: 'Document', + defaultMessage: 'Summary', }); } diff --git a/packages/kbn-unified-data-table/src/hooks/use_data_grid_density.ts b/packages/kbn-unified-data-table/src/hooks/use_data_grid_density.ts index 3a408637651ed..ff2fb71ca1c35 100644 --- a/packages/kbn-unified-data-table/src/hooks/use_data_grid_density.ts +++ b/packages/kbn-unified-data-table/src/hooks/use_data_grid_density.ts @@ -30,8 +30,6 @@ interface UseDataGridDensityProps { onUpdateDataGridDensity?: (density: DataGridDensity) => void; } -export const DATA_GRID_DENSITY_STORAGE_KEY = 'dataGridDensity'; - export function getDensityFromStyle(style: EuiDataGridStyle) { return style.cellPadding === DATA_GRID_STYLE_COMPACT.cellPadding && style.fontSize === DATA_GRID_STYLE_COMPACT.fontSize @@ -42,24 +40,30 @@ export function getDensityFromStyle(style: EuiDataGridStyle) { : DataGridDensity.EXPANDED; } +const DATA_GRID_DENSITY_STORAGE_KEY = 'dataGridDensity'; +const getStorageKey = (consumer: string) => `${consumer}:${DATA_GRID_DENSITY_STORAGE_KEY}`; + +export const getDataGridDensity = (storage: Storage, consumer: string): DataGridDensity => { + return storage.get(getStorageKey(consumer)) ?? DataGridDensity.COMPACT; +}; + export const useDataGridDensity = ({ storage, consumer, dataGridDensityState, onUpdateDataGridDensity, }: UseDataGridDensityProps) => { - const storageKey = `${consumer}:${DATA_GRID_DENSITY_STORAGE_KEY}`; const dataGridDensity = useMemo(() => { - return dataGridDensityState ?? storage.get(storageKey) ?? DataGridDensity.COMPACT; - }, [dataGridDensityState, storage, storageKey]); + return dataGridDensityState ?? getDataGridDensity(storage, consumer); + }, [consumer, dataGridDensityState, storage]); const onChangeDataGridDensity = useCallback( (gridStyle: EuiDataGridStyle) => { const newDensity = getDensityFromStyle(gridStyle); - storage.set(storageKey, newDensity); + storage.set(getStorageKey(consumer), newDensity); onUpdateDataGridDensity?.(newDensity); }, - [storageKey, storage, onUpdateDataGridDensity] + [storage, consumer, onUpdateDataGridDensity] ); return { diff --git a/packages/kbn-unified-data-table/src/hooks/use_row_height.ts b/packages/kbn-unified-data-table/src/hooks/use_row_height.ts index 3b91f18c4d731..f4dada8c6bb60 100644 --- a/packages/kbn-unified-data-table/src/hooks/use_row_height.ts +++ b/packages/kbn-unified-data-table/src/hooks/use_row_height.ts @@ -27,6 +27,59 @@ interface UseRowHeightProps { onUpdateRowHeight?: (rowHeight: number) => void; } +interface ResolveRowHeightParams { + storage: Storage; + consumer: string; + key: string; + configRowHeight: number; + rowHeightState?: number; +} + +const resolveRowHeight = ({ + storage, + consumer, + key, + configRowHeight, + rowHeightState, +}: ResolveRowHeightParams): number => { + const rowHeightFromLS = getStoredRowHeight(storage, consumer, key); + + const configHasNotChanged = ( + localStorageRecord: DataGridOptionsRecord | null + ): localStorageRecord is DataGridOptionsRecord => + localStorageRecord !== null && configRowHeight === localStorageRecord.previousConfigRowHeight; + + let currentRowLines: number; + if (isValidRowHeight(rowHeightState)) { + currentRowLines = rowHeightState; + } else if (configHasNotChanged(rowHeightFromLS)) { + currentRowLines = rowHeightFromLS.previousRowHeight; + } else { + currentRowLines = configRowHeight; + } + + return currentRowLines; +}; + +export const ROW_HEIGHT_STORAGE_KEY = 'dataGridRowHeight'; + +export const getRowHeight = ({ + storage, + consumer, + rowHeightState, + configRowHeight, +}: Pick & { + configRowHeight?: number; +}) => { + return resolveRowHeight({ + storage, + consumer, + key: ROW_HEIGHT_STORAGE_KEY, + configRowHeight: configRowHeight ?? ROWS_HEIGHT_OPTIONS.default, + rowHeightState, + }); +}; + export const useRowHeight = ({ storage, consumer, @@ -36,23 +89,13 @@ export const useRowHeight = ({ onUpdateRowHeight, }: UseRowHeightProps) => { const rowHeightLines = useMemo(() => { - const rowHeightFromLS = getStoredRowHeight(storage, consumer, key); - - const configHasNotChanged = ( - localStorageRecord: DataGridOptionsRecord | null - ): localStorageRecord is DataGridOptionsRecord => - localStorageRecord !== null && configRowHeight === localStorageRecord.previousConfigRowHeight; - - let currentRowLines: number; - if (isValidRowHeight(rowHeightState)) { - currentRowLines = rowHeightState; - } else if (configHasNotChanged(rowHeightFromLS)) { - currentRowLines = rowHeightFromLS.previousRowHeight; - } else { - currentRowLines = configRowHeight; - } - - return currentRowLines; + return resolveRowHeight({ + storage, + consumer, + key, + configRowHeight, + rowHeightState, + }); }, [configRowHeight, consumer, key, rowHeightState, storage]); const rowHeight = useMemo(() => { diff --git a/packages/kbn-unified-data-table/src/utils/columns.ts b/packages/kbn-unified-data-table/src/utils/columns.ts index a171e320e5c3b..80f3ba643108f 100644 --- a/packages/kbn-unified-data-table/src/utils/columns.ts +++ b/packages/kbn-unified-data-table/src/utils/columns.ts @@ -9,10 +9,12 @@ import type { DataView } from '@kbn/data-views-plugin/public'; +export const SOURCE_COLUMN = '_source'; + // We store this outside the function as a constant, so we're not creating a new array every time // the function is returning this. A changing array might cause the data grid to think it got // new columns, and thus performing worse than using the same array over multiple renders. -const SOURCE_ONLY = ['_source']; +const SOURCE_ONLY = [SOURCE_COLUMN]; /** * Function to provide fallback when diff --git a/packages/kbn-unified-data-table/src/utils/get_render_cell_popover.test.tsx b/packages/kbn-unified-data-table/src/utils/get_render_cell_popover.test.tsx index 1d692cc592606..a1bed774759c0 100644 --- a/packages/kbn-unified-data-table/src/utils/get_render_cell_popover.test.tsx +++ b/packages/kbn-unified-data-table/src/utils/get_render_cell_popover.test.tsx @@ -27,10 +27,10 @@ const defaultProps: EuiDataGridCellPopoverElementProps = { cellContentsElement: (
{'cellContentsElement'}
) as unknown as HTMLDivElement, }; -const renderTestComponent = () => { +const renderTestComponent = (overrideProps = {}) => { const Renderer = getCustomCellPopoverRenderer(); - render(); + render(); }; describe('getCustomCellPopoverRenderer', () => { @@ -45,4 +45,17 @@ describe('getCustomCellPopoverRenderer', () => { panelClassName: 'unifiedDataTable__cellPopover', }); }); + + it('should render a DefaultCellPopover with a wider panel for allowed columns', () => { + renderTestComponent({ columnId: '_source' }); + + expect(setCellPopoverPropsMocks).toHaveBeenCalledWith({ + panelClassName: 'unifiedDataTable__cellPopover', + panelProps: { + css: { + maxInlineSize: 'min(75vw, 600px) !important', + }, + }, + }); + }); }); diff --git a/packages/kbn-unified-data-table/src/utils/get_render_cell_popover.tsx b/packages/kbn-unified-data-table/src/utils/get_render_cell_popover.tsx index 5bcdfda20cfb6..c685f0c007d40 100644 --- a/packages/kbn-unified-data-table/src/utils/get_render_cell_popover.tsx +++ b/packages/kbn-unified-data-table/src/utils/get_render_cell_popover.tsx @@ -9,6 +9,9 @@ import { EuiDataGridCellPopoverElementProps } from '@elastic/eui'; import React, { memo, useEffect } from 'react'; +import { SOURCE_COLUMN } from './columns'; + +const FIELDS_WITH_WIDE_POPOVER = [SOURCE_COLUMN]; /* * @@ -23,13 +26,20 @@ export const getCustomCellPopoverRenderer = () => { const RenderCustomCellPopoverMemoized = memo(function RenderCustomCellPopoverMemoized( props: EuiDataGridCellPopoverElementProps ) { - const { setCellPopoverProps, DefaultCellPopover } = props; + const { columnId, setCellPopoverProps, DefaultCellPopover } = props; useEffect(() => { - setCellPopoverProps({ + const popoverProps: Parameters[0] = { panelClassName: 'unifiedDataTable__cellPopover', - }); - }, [setCellPopoverProps]); + }; + + const shouldRenderWidePopover = FIELDS_WITH_WIDE_POPOVER.includes(columnId); + if (shouldRenderWidePopover) { + popoverProps.panelProps = { css: { maxInlineSize: 'min(75vw, 600px) !important' } }; + } + + setCellPopoverProps(popoverProps); + }, [columnId, setCellPopoverProps]); return ; }); diff --git a/src/plugins/discover/public/application/context/context_app_content.tsx b/src/plugins/discover/public/application/context/context_app_content.tsx index b822286ae72a9..b6b4be221377a 100644 --- a/src/plugins/discover/public/application/context/context_app_content.tsx +++ b/src/plugins/discover/public/application/context/context_app_content.tsx @@ -28,7 +28,12 @@ import { ROW_HEIGHT_OPTION, SHOW_MULTIFIELDS, } from '@kbn/discover-utils'; -import { DataLoadingState, UnifiedDataTableProps } from '@kbn/unified-data-table'; +import { + DataLoadingState, + UnifiedDataTableProps, + getDataGridDensity, + getRowHeight, +} from '@kbn/unified-data-table'; import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; import { useQuerySubscriber } from '@kbn/unified-field-list'; import useObservable from 'react-use/lib/useObservable'; @@ -170,11 +175,21 @@ export function ContextAppContent({ [grid, setAppState] ); + const configRowHeight = services.uiSettings.get(ROW_HEIGHT_OPTION); const getCellRenderersAccessor = useProfileAccessor('getCellRenderers'); const cellRenderers = useMemo(() => { const getCellRenderers = getCellRenderersAccessor(() => ({})); - return getCellRenderers(); - }, [getCellRenderersAccessor]); + return getCellRenderers({ + actions: { addFilter }, + dataView, + density: getDataGridDensity(services.storage, 'discover'), + rowHeight: getRowHeight({ + storage: services.storage, + consumer: 'discover', + configRowHeight, + }), + }); + }, [addFilter, configRowHeight, dataView, getCellRenderersAccessor, services.storage]); const dataSource = useMemo(() => createDataSource({ dataView, query: undefined }), [dataView]); const { filters } = useQuerySubscriber({ data: services.data }); @@ -249,7 +264,7 @@ export function ContextAppContent({ setExpandedDoc={setExpandedDoc} onFilter={addFilter} onSetColumns={onSetColumns} - configRowHeight={services.uiSettings.get(ROW_HEIGHT_OPTION)} + configRowHeight={configRowHeight} showMultiFields={services.uiSettings.get(SHOW_MULTIFIELDS)} maxDocFieldsDisplayed={services.uiSettings.get(MAX_DOC_FIELDS_DISPLAYED)} renderDocumentView={renderDocumentView} diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx index 564e4fc23ea90..effa9f99d6c4b 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx @@ -144,8 +144,7 @@ describe('Discover documents layout', () => { const discoverGridComponent = component.find(DiscoverGrid); expect(discoverGridComponent.exists()).toBeTruthy(); expect(Object.keys(discoverGridComponent.prop('externalCustomRenderers')!)).toEqual([ - 'content', - 'resource', + '_source', 'rootProfile', ]); }); diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx index 4d8fd0fbccb95..2fe2a4f5a8f93 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx @@ -29,9 +29,11 @@ import { type DataTableColumnsMeta, getTextBasedColumnsMeta, getRenderCustomToolbarWithElements, - type DataGridDensity, + DataGridDensity, UnifiedDataTableProps, UseColumnsProps, + getDataGridDensity, + getRowHeight, } from '@kbn/unified-data-table'; import { DOC_HIDE_TIME_COLUMN_SETTING, @@ -72,6 +74,7 @@ import { useContextualGridCustomisations } from '../../hooks/grid_customisations import { useIsEsqlMode } from '../../hooks/use_is_esql_mode'; import { useAdditionalFieldGroups } from '../../hooks/sidebar/use_additional_field_groups'; import { + CellRenderersExtensionParams, DISCOVER_CELL_ACTIONS_TRIGGER, useAdditionalCellActions, useProfileAccessor, @@ -306,16 +309,32 @@ function DiscoverDocumentsComponent({ [dataView, onAddColumn, onAddFilter, onRemoveColumn, query, savedSearch.id, setExpandedDoc] ); + const configRowHeight = uiSettings.get(ROW_HEIGHT_OPTION); + const cellRendererParams: CellRenderersExtensionParams = useMemo( + () => ({ + actions: { addFilter: onAddFilter }, + dataView, + density: density ?? getDataGridDensity(services.storage, 'discover'), + rowHeight: getRowHeight({ + storage: services.storage, + consumer: 'discover', + rowHeightState: rowHeight, + configRowHeight, + }), + }), + [onAddFilter, dataView, density, services.storage, rowHeight, configRowHeight] + ); + const { rowAdditionalLeadingControls } = useDiscoverCustomization('data_table') || {}; const { customCellRenderer, customGridColumnsConfiguration } = - useContextualGridCustomisations() || {}; + useContextualGridCustomisations(cellRendererParams) || {}; const additionalFieldGroups = useAdditionalFieldGroups(); const getCellRenderersAccessor = useProfileAccessor('getCellRenderers'); const cellRenderers = useMemo(() => { const getCellRenderers = getCellRenderersAccessor(() => customCellRenderer ?? {}); - return getCellRenderers(); - }, [customCellRenderer, getCellRenderersAccessor]); + return getCellRenderers(cellRendererParams); + }, [cellRendererParams, customCellRenderer, getCellRenderersAccessor]); const documents = useObservable(stateContainer.dataState.data$.documents$); @@ -458,7 +477,7 @@ function DiscoverDocumentsComponent({ sampleSizeState={getAllowedSampleSize(sampleSizeState, services.uiSettings)} onUpdateSampleSize={!isEsqlMode ? onUpdateSampleSize : undefined} onFieldEdited={onFieldEdited} - configRowHeight={uiSettings.get(ROW_HEIGHT_OPTION)} + configRowHeight={configRowHeight} showMultiFields={uiSettings.get(SHOW_MULTIFIELDS)} maxDocFieldsDisplayed={uiSettings.get(MAX_DOC_FIELDS_DISPLAYED)} renderDocumentView={renderDocumentView} diff --git a/src/plugins/discover/public/application/main/hooks/grid_customisations/index.ts b/src/plugins/discover/public/application/main/hooks/grid_customisations/index.ts index 88b7d27633bbe..996c64d34bd12 100644 --- a/src/plugins/discover/public/application/main/hooks/grid_customisations/index.ts +++ b/src/plugins/discover/public/application/main/hooks/grid_customisations/index.ts @@ -8,22 +8,23 @@ */ import { useMemo } from 'react'; -import { useDiscoverServices } from '../../../../hooks/use_discover_services'; import { useDiscoverCustomization } from '../../../../customizations'; -import { getLogsVirtualColumnsConfiguration } from './logs'; +import { DataGridColumnsDeps, getDataGridColumnsConfiguration } from './logs'; export * from './logs'; -export const useContextualGridCustomisations = () => { - const { data } = useDiscoverServices(); +type ContextualGridCustomizationParams = DataGridColumnsDeps; + +export const useContextualGridCustomisations = (params: ContextualGridCustomizationParams) => { // TODO / NOTE: This will eventually rely on Discover's context resolution to determine which fields // are returned based on the data type. const isLogsContext = useDiscoverCustomization('data_table')?.logsEnabled; const virtualColumnsConfiguration = useMemo(() => { if (!isLogsContext) return null; - if (isLogsContext) return getLogsVirtualColumnsConfiguration(data); - }, [data, isLogsContext]); + + return getDataGridColumnsConfiguration(params); + }, [isLogsContext, params]); return virtualColumnsConfiguration; }; diff --git a/src/plugins/discover/public/application/main/hooks/grid_customisations/logs.tsx b/src/plugins/discover/public/application/main/hooks/grid_customisations/logs.tsx index b14605663d50b..409c1e03fa737 100644 --- a/src/plugins/discover/public/application/main/hooks/grid_customisations/logs.tsx +++ b/src/plugins/discover/public/application/main/hooks/grid_customisations/logs.tsx @@ -7,26 +7,27 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import { CONTENT_FIELD, RESOURCE_FIELD } from '../../../../../common/data_types/logs/constants'; -import { renderCell } from '../../../../components/discover_grid/virtual_columns/logs/cell_renderer'; -import { renderColumn } from '../../../../components/discover_grid/virtual_columns/logs/column'; +import { SOURCE_COLUMN } from '@kbn/unified-data-table'; +import { + SummaryColumnGetterDeps, + getSummaryColumn, +} from '../../../../components/data_types/logs/summary_column'; -export const getLogsVirtualColumnsConfiguration = (data: DataPublicPluginStart) => { +export type DataGridColumnsDeps = CustomCellRendererDeps; + +export const getDataGridColumnsConfiguration = (params: DataGridColumnsDeps) => { return { - customCellRenderer: createCustomCellRenderer({ data }), + customCellRenderer: createCustomCellRenderer(params), customGridColumnsConfiguration: createCustomGridColumnsConfiguration(), }; }; -export const createCustomCellRenderer = ({ data }: { data: DataPublicPluginStart }) => { +type CustomCellRendererDeps = SummaryColumnGetterDeps; + +export const createCustomCellRenderer = (params: CustomCellRendererDeps) => { return { - [CONTENT_FIELD]: renderCell(CONTENT_FIELD, { data }), - [RESOURCE_FIELD]: renderCell(RESOURCE_FIELD, { data }), + [SOURCE_COLUMN]: getSummaryColumn(params), }; }; -export const createCustomGridColumnsConfiguration = () => ({ - [CONTENT_FIELD]: renderColumn(CONTENT_FIELD), - [RESOURCE_FIELD]: renderColumn(RESOURCE_FIELD), -}); +export const createCustomGridColumnsConfiguration = () => ({}); diff --git a/src/plugins/discover/public/application/main/hooks/grid_customisations/use_virtual_column_services.tsx b/src/plugins/discover/public/application/main/hooks/grid_customisations/use_virtual_column_services.tsx deleted file mode 100644 index df8cb411b6e16..0000000000000 --- a/src/plugins/discover/public/application/main/hooks/grid_customisations/use_virtual_column_services.tsx +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import createContainer from 'constate'; -import type { DataView } from '@kbn/data-views-plugin/common'; -import { DataPublicPluginStart } from '@kbn/data-plugin/public'; - -export interface UseVirtualColumnServices { - services: { - data: DataPublicPluginStart; - dataView: DataView; - }; -} - -const useVirtualColumns = ({ services }: UseVirtualColumnServices) => services; - -export const [VirtualColumnServiceProvider, useVirtualColumnServiceContext] = - createContainer(useVirtualColumns); diff --git a/src/plugins/discover/public/build_services.ts b/src/plugins/discover/public/build_services.ts index f4ee14fcf04f7..3d12e16a07694 100644 --- a/src/plugins/discover/public/build_services.ts +++ b/src/plugins/discover/public/build_services.ts @@ -58,6 +58,7 @@ import type { NoDataPagePluginStart } from '@kbn/no-data-page-plugin/public'; import type { AiopsPluginStart } from '@kbn/aiops-plugin/public'; import type { DataVisualizerPluginStart } from '@kbn/data-visualizer-plugin/public'; import type { FieldsMetadataPublicStart } from '@kbn/fields-metadata-plugin/public'; +import { LogsDataAccessPluginStart } from '@kbn/logs-data-access-plugin/public'; import type { DiscoverStartPlugins } from './types'; import type { DiscoverContextAppLocator } from './application/context/services/locator'; import type { DiscoverSingleDocLocator } from './application/doc/locator'; @@ -133,6 +134,7 @@ export interface DiscoverServices { profilesManager: ProfilesManager; ebtContextManager: DiscoverEBTContextManager; fieldsMetadata?: FieldsMetadataPublicStart; + logsDataAccess?: LogsDataAccessPluginStart; } export const buildServices = memoize( @@ -223,6 +225,7 @@ export const buildServices = memoize( profilesManager, ebtContextManager, fieldsMetadata: plugins.fieldsMetadata, + logsDataAccess: plugins.logsDataAccess, }; } ); diff --git a/src/plugins/discover/public/components/data_types/logs/cell_actions_popover.tsx b/src/plugins/discover/public/components/data_types/logs/cell_actions_popover.tsx new file mode 100644 index 0000000000000..7b9d68e8f3dd7 --- /dev/null +++ b/src/plugins/discover/public/components/data_types/logs/cell_actions_popover.tsx @@ -0,0 +1,181 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React, { ReactElement } from 'react'; +import { + EuiBadge, + type EuiBadgeProps, + EuiFlexGroup, + EuiFlexItem, + EuiPopover, + EuiPopoverFooter, + EuiText, + EuiButtonIcon, + EuiTextTruncate, + EuiButtonEmpty, + EuiCopy, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import { useBoolean } from '@kbn/react-hooks'; +import { euiThemeVars } from '@kbn/ui-theme'; +import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; +import { + actionFilterForText, + actionFilterOutText, + closeCellActionPopoverText, + copyValueAriaText, + copyValueText, + filterForText, + filterOutText, + openCellActionPopoverAriaText, +} from './translations'; + +const codeFontCSS = css` + font-family: ${euiThemeVars.euiCodeFontFamily}; +`; + +interface CellActionsPopoverProps { + onFilter?: DocViewFilterFn; + /* ECS mapping for the key */ + property: string; + /* Value for the mapping, which will be displayed */ + value: string; + /* Optional callback to render the value */ + renderValue?: (value: string) => React.ReactNode; + /* Props to forward to the trigger Badge */ + renderPopoverTrigger: (props: { + popoverTriggerProps: { + onClick: () => void; + onClickAriaLabel: string; + 'data-test-subj': string; + }; + }) => ReactElement; +} + +export function CellActionsPopover({ + onFilter, + property, + value, + renderValue, + renderPopoverTrigger, +}: CellActionsPopoverProps) { + const [isPopoverOpen, { toggle: togglePopover, off: closePopover }] = useBoolean(false); + + const makeFilterHandlerByOperator = (operator: '+' | '-') => () => { + if (onFilter) { + onFilter(property, value, operator); + } + }; + + const popoverTriggerProps = { + onClick: togglePopover, + onClickAriaLabel: openCellActionPopoverAriaText, + 'data-test-subj': `dataTableCellActionsPopover_${property}`, + }; + + return ( + + + + + {property}{' '} + {typeof renderValue === 'function' ? renderValue(value) : value} + + + + + + + + + + {filterForText} + + + {filterOutText} + + + + + + {(copy) => ( + + {copyValueText} + + )} + + + + ); +} + +export interface FieldBadgeWithActionsProps + extends Pick { + icon?: EuiBadgeProps['iconType']; +} + +export function FieldBadgeWithActions({ + icon, + onFilter, + property, + renderValue, + value, +}: FieldBadgeWithActionsProps) { + return ( + ( + + + + )} + /> + ); +} diff --git a/src/plugins/discover/public/components/data_types/logs/copy_button.tsx b/src/plugins/discover/public/components/data_types/logs/copy_button.tsx deleted file mode 100644 index a609187ffde9b..0000000000000 --- a/src/plugins/discover/public/components/data_types/logs/copy_button.tsx +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { EuiButtonEmpty, EuiFlexItem, copyToClipboard } from '@elastic/eui'; -import React from 'react'; -import { copyValueAriaText, copyValueText } from './translations'; - -export const CopyButton = ({ property, value }: { property: string; value: string }) => { - const ariaCopyValueText = copyValueAriaText(property); - - return ( - - copyToClipboard(value)} - data-test-subj={`dataTableCellAction_copyToClipboardAction_${property}`} - > - {copyValueText} - - - ); -}; diff --git a/src/plugins/discover/public/components/data_types/logs/filter_in_button.tsx b/src/plugins/discover/public/components/data_types/logs/filter_in_button.tsx deleted file mode 100644 index 58822a4c84e4d..0000000000000 --- a/src/plugins/discover/public/components/data_types/logs/filter_in_button.tsx +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { EuiButtonEmpty, EuiFlexItem } from '@elastic/eui'; -import React from 'react'; -import { generateFilters } from '@kbn/data-plugin/public'; -import { useVirtualColumnServiceContext } from '../../../application/main/hooks/grid_customisations/use_virtual_column_services'; -import { actionFilterForText, filterForText } from './translations'; - -export const FilterInButton = ({ property, value }: { property: string; value: string }) => { - const ariaFilterForText = actionFilterForText(value); - const serviceContext = useVirtualColumnServiceContext(); - const filterManager = serviceContext?.data.query.filterManager; - const dataView = serviceContext.dataView; - - const onFilterForAction = () => { - if (filterManager != null) { - const filter = generateFilters(filterManager, property, [value], '+', dataView); - filterManager.addFilters(filter); - } - }; - - return ( - - - {filterForText} - - - ); -}; diff --git a/src/plugins/discover/public/components/data_types/logs/filter_out_button.tsx b/src/plugins/discover/public/components/data_types/logs/filter_out_button.tsx deleted file mode 100644 index a08b54e2436cd..0000000000000 --- a/src/plugins/discover/public/components/data_types/logs/filter_out_button.tsx +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { EuiButtonEmpty, EuiFlexItem } from '@elastic/eui'; -import React from 'react'; -import { generateFilters } from '@kbn/data-plugin/public'; -import { useVirtualColumnServiceContext } from '../../../application/main/hooks/grid_customisations/use_virtual_column_services'; -import { actionFilterOutText, filterOutText } from './translations'; - -export const FilterOutButton = ({ property, value }: { property: string; value: string }) => { - const ariaFilterOutText = actionFilterOutText(value); - const serviceContext = useVirtualColumnServiceContext(); - const filterManager = serviceContext?.data.query.filterManager; - const dataView = serviceContext.dataView; - - const onFilterOutAction = () => { - if (filterManager != null) { - const filter = generateFilters(filterManager, property, [value], '-', dataView); - filterManager.addFilters(filter); - } - }; - - return ( - - - {filterOutText} - - - ); -}; diff --git a/src/plugins/discover/public/components/data_types/logs/log_level.tsx b/src/plugins/discover/public/components/data_types/logs/log_level.tsx deleted file mode 100644 index 096c3bf51734e..0000000000000 --- a/src/plugins/discover/public/components/data_types/logs/log_level.tsx +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React from 'react'; -import { LogFlyoutDoc, LogLevelBadge } from '@kbn/discover-utils/src'; -import * as constants from '../../../../common/data_types/logs/constants'; -import { ChipPopover } from './popover_chip'; - -interface LogLevelProps { - level: LogFlyoutDoc['log.level']; -} - -export function LogLevel({ level }: LogLevelProps) { - if (!level) return null; - - return ( - ( - - )} - /> - ); -} diff --git a/src/plugins/discover/public/components/data_types/logs/log_level_badge_cell.tsx b/src/plugins/discover/public/components/data_types/logs/log_level_badge_cell.tsx index 883452c7cd12c..bff3bdddee026 100644 --- a/src/plugins/discover/public/components/data_types/logs/log_level_badge_cell.tsx +++ b/src/plugins/discover/public/components/data_types/logs/log_level_badge_cell.tsx @@ -8,9 +8,9 @@ */ import type { CSSObject } from '@emotion/react'; +import React from 'react'; import { LogLevelBadge } from '@kbn/discover-utils'; import type { DataGridCellValueElementProps } from '@kbn/unified-data-table'; -import React from 'react'; const dataTestSubj = 'logLevelBadgeCell'; const badgeCss: CSSObject = { marginTop: '-4px' }; diff --git a/src/plugins/discover/public/components/data_types/logs/popover_chip.tsx b/src/plugins/discover/public/components/data_types/logs/popover_chip.tsx deleted file mode 100644 index e84fcca52d627..0000000000000 --- a/src/plugins/discover/public/components/data_types/logs/popover_chip.tsx +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React, { ReactElement, useCallback, useState } from 'react'; -import { - EuiBadge, - type EuiBadgeProps, - EuiFlexGroup, - EuiFlexItem, - EuiPopover, - useEuiFontSize, - EuiPopoverFooter, - EuiText, - EuiButtonIcon, -} from '@elastic/eui'; -import { css, SerializedStyles } from '@emotion/react'; -import { dynamic } from '@kbn/shared-ux-utility'; -import { closeCellActionPopoverText, openCellActionPopoverAriaText } from './translations'; -import { FilterInButton } from './filter_in_button'; -import { FilterOutButton } from './filter_out_button'; -import { CopyButton } from './copy_button'; - -const DataTablePopoverCellValue = dynamic( - () => import('@kbn/unified-data-table/src/components/data_table_cell_value') -); - -type ChipWithPopoverChildrenType = (props: { - content: string; -}) => React.ReactNode | React.ReactNode; - -export interface ChipWithPopoverProps { - /** - * ECS mapping for the key - */ - property: string; - /** - * Value for the mapping, which will be displayed - */ - text: string; - dataTestSubj?: string; - leftSideIcon?: React.ReactNode; - rightSideIcon?: EuiBadgeProps['iconType']; - children?: ChipWithPopoverChildrenType; -} - -export function ChipWithPopover({ - property, - text, - dataTestSubj = `dataTablePopoverChip_${property}`, - leftSideIcon, - rightSideIcon, - children, -}: ChipWithPopoverProps) { - return ( - ( - - - {leftSideIcon && {leftSideIcon}} - {text} - - - )} - > - {children} - - ); -} - -interface ChipPopoverProps { - /** - * ECS mapping for the key - */ - property: string; - /** - * Value for the mapping, which will be displayed - */ - text: string; - renderChip: (props: { - handleChipClick: () => void; - handleChipClickAriaLabel: string; - chipCss: SerializedStyles; - }) => ReactElement; - children?: ChipWithPopoverChildrenType; -} - -export function ChipPopover({ property, text, renderChip, children }: ChipPopoverProps) { - const xsFontSize = useEuiFontSize('xs').fontSize; - const [isPopoverOpen, setIsPopoverOpen] = useState(false); - - const handleChipClick = useCallback(() => { - setIsPopoverOpen(!isPopoverOpen); - }, [isPopoverOpen]); - - const closePopover = () => setIsPopoverOpen(false); - - return ( - - - -
- - - {property}{' '} - {typeof children === 'function' ? children({ content: text }) : text} - - -
-
- - - -
- - - - - - - - - - - -
- ); -} diff --git a/src/plugins/discover/public/components/data_types/logs/service_name_chip_with_popover.tsx b/src/plugins/discover/public/components/data_types/logs/service_name_badge_with_actions.tsx similarity index 56% rename from src/plugins/discover/public/components/data_types/logs/service_name_chip_with_popover.tsx rename to src/plugins/discover/public/components/data_types/logs/service_name_badge_with_actions.tsx index ecb456017c7a9..581c889b8e98e 100644 --- a/src/plugins/discover/public/components/data_types/logs/service_name_chip_with_popover.tsx +++ b/src/plugins/discover/public/components/data_types/logs/service_name_badge_with_actions.tsx @@ -11,38 +11,50 @@ import React from 'react'; import { getRouterLinkProps } from '@kbn/router-utils'; import { EuiLink } from '@elastic/eui'; import { OBSERVABILITY_ENTITY_CENTRIC_EXPERIENCE } from '@kbn/management-settings-ids'; -import { type ChipWithPopoverProps, ChipWithPopover } from './popover_chip'; +import { SharePublicStart } from '@kbn/share-plugin/public/plugin'; import { useDiscoverServices } from '../../../hooks/use_discover_services'; +import { FieldBadgeWithActions, FieldBadgeWithActionsProps } from './cell_actions_popover'; const SERVICE_ENTITY_LOCATOR = 'SERVICE_ENTITY_LOCATOR'; -export function ServiceNameChipWithPopover(props: ChipWithPopoverProps) { +export function ServiceNameBadgeWithActions(props: FieldBadgeWithActionsProps) { const { share, core } = useDiscoverServices(); const canViewApm = core.application.capabilities.apm?.show || false; const isEntityCentricExperienceSettingEnabled = canViewApm ? core.uiSettings.get(OBSERVABILITY_ENTITY_CENTRIC_EXPERIENCE) : false; - const urlService = share?.url; - const apmLinkToServiceEntityLocator = urlService?.locators.get<{ serviceName: string }>( + const derivedPropsForEntityExperience = isEntityCentricExperienceSettingEnabled + ? getDerivedPropsForEntityExperience({ serviceName: props.value, share }) + : {}; + + return ; +} + +const getDerivedPropsForEntityExperience = ({ + serviceName, + share, +}: { + serviceName: string; + share?: SharePublicStart; +}): Pick => { + const apmLinkToServiceEntityLocator = share?.url?.locators.get<{ serviceName: string }>( SERVICE_ENTITY_LOCATOR ); - const href = apmLinkToServiceEntityLocator?.getRedirectUrl({ - serviceName: props.text, - }); + const href = apmLinkToServiceEntityLocator?.getRedirectUrl({ serviceName }); const routeLinkProps = href ? getRouterLinkProps({ href, - onClick: () => apmLinkToServiceEntityLocator?.navigate({ serviceName: props.text }), + onClick: () => apmLinkToServiceEntityLocator?.navigate({ serviceName }), }) : undefined; - return ( - - {canViewApm && isEntityCentricExperienceSettingEnabled && routeLinkProps - ? ({ content }) => {content} - : undefined} - - ); -} + if (routeLinkProps) { + return { + renderValue: (value) => {value}, + }; + } + + return {}; +}; diff --git a/src/plugins/discover/public/components/data_types/logs/summary_column/content.tsx b/src/plugins/discover/public/components/data_types/logs/summary_column/content.tsx new file mode 100644 index 0000000000000..0da98cbf7145e --- /dev/null +++ b/src/plugins/discover/public/components/data_types/logs/summary_column/content.tsx @@ -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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React, { useMemo } from 'react'; +import { SourceDocument, type DataGridCellValueElementProps } from '@kbn/unified-data-table'; +import { + ShouldShowFieldInTableHandler, + getLogDocumentOverview, + getMessageFieldWithFallbacks, +} from '@kbn/discover-utils'; +import * as constants from '../../../../../common/data_types/logs/constants'; +import { formatJsonDocumentForContent } from './utils'; + +interface ContentProps extends DataGridCellValueElementProps { + isCompressed: boolean; + isSingleLine?: boolean; + shouldShowFieldHandler: ShouldShowFieldInTableHandler; +} + +const LogMessage = ({ + field, + value, + className, +}: { + field: string; + value: string; + className: string; +}) => { + const shouldRenderFieldName = field !== constants.MESSAGE_FIELD; + + if (shouldRenderFieldName) { + return ( +
+ {field}{' '} + +
+ ); + } + + return ( +

+ ); +}; + +export const Content = ({ + columnId, + dataView, + fieldFormats, + isCompressed, + isSingleLine = false, + row, + shouldShowFieldHandler, +}: ContentProps) => { + const documentOverview = getLogDocumentOverview(row, { dataView, fieldFormats }); + const { field, value } = getMessageFieldWithFallbacks(documentOverview); + const shouldRenderContent = !!field && !!value; + + return shouldRenderContent ? ( + + ) : ( + + ); +}; + +type FormattedSourceDocumentProps = Pick< + ContentProps, + 'columnId' | 'dataView' | 'fieldFormats' | 'isCompressed' | 'row' | 'shouldShowFieldHandler' +>; + +const FormattedSourceDocument = ({ row, ...props }: FormattedSourceDocumentProps) => { + const formattedRow = useMemo(() => formatJsonDocumentForContent(row), [row]); + + return ( + + ); +}; diff --git a/src/plugins/discover/public/components/data_types/logs/summary_column/index.tsx b/src/plugins/discover/public/components/data_types/logs/summary_column/index.tsx new file mode 100644 index 0000000000000..20fe4380199f3 --- /dev/null +++ b/src/plugins/discover/public/components/data_types/logs/summary_column/index.tsx @@ -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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { dynamic } from '@kbn/shared-ux-utility'; +import { getShouldShowFieldHandler } from '@kbn/discover-utils'; +import { DataView } from '@kbn/data-views-plugin/common'; +import { CellRenderersExtensionParams } from '../../../../context_awareness'; +import type { SummaryColumnProps } from './summary_column'; + +const SummaryColumn = dynamic(() => import('./summary_column')); + +export type SummaryColumnGetterDeps = CellRenderersExtensionParams; + +export const getSummaryColumn = (params: SummaryColumnGetterDeps) => { + const { actions, dataView, density, rowHeight } = params; + const shouldShowFieldHandler = createGetShouldShowFieldHandler(dataView); + + return (props: SummaryColumnProps) => ( + + ); +}; + +const createGetShouldShowFieldHandler = (dataView: DataView) => { + const dataViewFields = dataView.fields.getAll().map((fld) => fld.name); + return getShouldShowFieldHandler(dataViewFields, dataView, true); +}; diff --git a/src/plugins/discover/public/components/data_types/logs/summary_column/resource.tsx b/src/plugins/discover/public/components/data_types/logs/summary_column/resource.tsx new file mode 100644 index 0000000000000..a7955fadde622 --- /dev/null +++ b/src/plugins/discover/public/components/data_types/logs/summary_column/resource.tsx @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { EuiBadge, EuiFlexGroup } from '@elastic/eui'; +import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; +import { ResourceFieldDescriptor } from './utils'; + +const MAX_LIMITED_FIELDS_VISIBLE = 3; + +interface ResourceProps { + fields: ResourceFieldDescriptor[]; + /* When true, the column will render a predefined number of resources and indicates with a badge how many more we have */ + limited?: boolean; + onFilter?: DocViewFilterFn; +} + +export const Resource = ({ fields, limited = false, onFilter, ...props }: ResourceProps) => { + const displayedFields = limited ? fields.slice(0, MAX_LIMITED_FIELDS_VISIBLE) : fields; + const extraFieldsCount = limited ? fields.length - MAX_LIMITED_FIELDS_VISIBLE : 0; + + return ( + + {displayedFields.map(({ name, value, ResourceBadge, Icon }) => ( + + ))} + {extraFieldsCount > 0 && ( +

+ +{extraFieldsCount} +
+ )} +
+ ); +}; diff --git a/src/plugins/discover/public/components/data_types/logs/summary_column/summary_column.test.tsx b/src/plugins/discover/public/components/data_types/logs/summary_column/summary_column.test.tsx new file mode 100644 index 0000000000000..b8eeea613c9c6 --- /dev/null +++ b/src/plugins/discover/public/components/data_types/logs/summary_column/summary_column.test.tsx @@ -0,0 +1,176 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { buildDataTableRecord, DataTableRecord } from '@kbn/discover-utils'; +import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; +import { fieldFormatsMock } from '@kbn/field-formats-plugin/common/mocks'; +import { render, screen } from '@testing-library/react'; +import SummaryColumn, { SummaryColumnFactoryDeps, SummaryColumnProps } from './summary_column'; +import { DataGridDensity, ROWS_HEIGHT_OPTIONS } from '@kbn/unified-data-table'; +import * as constants from '../../../../../common/data_types/logs/constants'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { discoverServiceMock } from '../../../../__mocks__/services'; + +const renderSummary = ( + record: DataTableRecord, + opts: Partial = {} +) => { + render( + + {}} + closePopover={() => {}} + density={DataGridDensity.COMPACT} + rowHeight={ROWS_HEIGHT_OPTIONS.single} + onFilter={jest.fn()} + shouldShowFieldHandler={() => true} + {...opts} + /> + + ); +}; + +const getBaseRecord = (overrides: Record = {}) => + buildDataTableRecord( + { + fields: { + '@timestamp': 1726218404776, + 'agent.name': 'nodejs', + 'cloud.availability_zone': 'area-51a', + 'cloud.instance.id': '3275100000000076', + 'cloud.project.id': '3275100000000075', + 'cloud.provider': 'azure', + 'cloud.region': 'area-51', + 'container.name': 'synth-service-2-3275100000000073', + 'error.log.stacktrace': 'Error message in error.log.stacktrace', + 'event.original': 'Error with certificate: "ca_trusted_fingerprint"', + 'host.name': 'synth-host', + 'orchestrator.cluster.id': '3275100000000002', + 'orchestrator.cluster.name': 'synth-cluster-3', + 'orchestrator.namespace': 'kube', + 'orchestrator.resource.id': '3275100000000074', + 'service.name': 'synth-service-2', + 'trace.id': '3275100000000072', + message: 'Yet another debug log', + ...overrides, + }, + }, + dataViewMock + ); + +describe('SummaryColumn', () => { + describe('when rendering resource badges', () => { + it('should render a maximum of 3 resource badges in row compact mode', () => { + const record = getBaseRecord(); + renderSummary(record); + expect( + screen.queryByTestId(`dataTableCellActionsPopover_${constants.SERVICE_NAME_FIELD}`) + ).toBeInTheDocument(); + expect( + screen.queryByTestId(`dataTableCellActionsPopover_${constants.CONTAINER_NAME_FIELD}`) + ).toBeInTheDocument(); + expect( + screen.queryByTestId(`dataTableCellActionsPopover_${constants.HOST_NAME_FIELD}`) + ).toBeInTheDocument(); + expect( + screen.queryByTestId( + `dataTableCellActionsPopover_${constants.ORCHESTRATOR_NAMESPACE_FIELD}` + ) + ).not.toBeInTheDocument(); + expect( + screen.queryByTestId(`dataTableCellActionsPopover_${constants.CLOUD_INSTANCE_ID_FIELD}`) + ).not.toBeInTheDocument(); + }); + + it('should render a badge indicating the count of additional resources', () => { + const record = getBaseRecord(); + renderSummary(record); + expect(screen.queryByText('+2')).toBeInTheDocument(); + expect(screen.queryByText('+3')).not.toBeInTheDocument(); + }); + + it('should render all the available resources in row autofit/custom mode', () => { + const record = getBaseRecord(); + renderSummary(record, { + density: DataGridDensity.COMPACT, + rowHeight: ROWS_HEIGHT_OPTIONS.auto, + }); + expect( + screen.queryByTestId(`dataTableCellActionsPopover_${constants.SERVICE_NAME_FIELD}`) + ).toBeInTheDocument(); + expect( + screen.queryByTestId(`dataTableCellActionsPopover_${constants.CONTAINER_NAME_FIELD}`) + ).toBeInTheDocument(); + expect( + screen.queryByTestId(`dataTableCellActionsPopover_${constants.HOST_NAME_FIELD}`) + ).toBeInTheDocument(); + expect( + screen.queryByTestId( + `dataTableCellActionsPopover_${constants.ORCHESTRATOR_NAMESPACE_FIELD}` + ) + ).toBeInTheDocument(); + expect( + screen.queryByTestId(`dataTableCellActionsPopover_${constants.CLOUD_INSTANCE_ID_FIELD}`) + ).toBeInTheDocument(); + expect(screen.queryByText('+2')).not.toBeInTheDocument(); + }); + + it('should display a popover with details and actions upon a badge click', () => { + const record = getBaseRecord(); + renderSummary(record); + // Open badge popover + screen.getByTestId(`dataTableCellActionsPopover_${constants.SERVICE_NAME_FIELD}`).click(); + + expect(screen.getByTestId('dataTableCellActionPopoverTitle')).toHaveTextContent( + 'service.name synth-service-2' + ); + expect( + screen.getByTestId(`dataTableCellAction_addToFilterAction_${constants.SERVICE_NAME_FIELD}`) + ).toBeInTheDocument(); + expect( + screen.getByTestId( + `dataTableCellAction_removeFromFilterAction_${constants.SERVICE_NAME_FIELD}` + ) + ).toBeInTheDocument(); + expect( + screen.getByTestId( + `dataTableCellAction_copyToClipboardAction_${constants.SERVICE_NAME_FIELD}` + ) + ).toBeInTheDocument(); + }); + }); + + describe('when rendering the main content', () => { + it('should display the message field as first choice', () => { + const record = getBaseRecord(); + renderSummary(record); + expect(screen.queryByTestId('discoverDataTableMessageValue')).toHaveTextContent( + record.flattened.message as string + ); + }); + + it(`should fallback to ${constants.ERROR_MESSAGE_FIELD} and ${constants.EVENT_ORIGINAL_FIELD} fields if message does not exist`, () => { + const recordWithoutMessage = getBaseRecord({ message: undefined }); + renderSummary(recordWithoutMessage); + expect(screen.queryByTestId('discoverDataTableMessageValue')).toHaveTextContent( + recordWithoutMessage.flattened[constants.EVENT_ORIGINAL_FIELD] as string + ); + }); + }); +}); diff --git a/src/plugins/discover/public/components/data_types/logs/summary_column/summary_column.tsx b/src/plugins/discover/public/components/data_types/logs/summary_column/summary_column.tsx new file mode 100644 index 0000000000000..ac7e20b944a4a --- /dev/null +++ b/src/plugins/discover/public/components/data_types/logs/summary_column/summary_column.tsx @@ -0,0 +1,169 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { + ROWS_HEIGHT_OPTIONS, + type DataGridCellValueElementProps, + DataGridDensity, +} from '@kbn/unified-data-table'; +import React from 'react'; +import { EuiButtonIcon, EuiCodeBlock, EuiFlexGroup, EuiText, EuiTitle } from '@elastic/eui'; +import { + ShouldShowFieldInTableHandler, + getLogDocumentOverview, + getMessageFieldWithFallbacks, +} from '@kbn/discover-utils'; +import { JsonCodeEditor } from '@kbn/unified-doc-viewer-plugin/public'; +import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; +import { Resource } from './resource'; +import { Content } from './content'; +import { + closeCellActionPopoverText, + contentLabel, + jsonLabel, + resourceLabel, +} from '../translations'; +import { createResourceFields, formatJsonDocumentForContent } from './utils'; + +export interface SummaryColumnFactoryDeps { + density: DataGridDensity | undefined; + rowHeight: number | undefined; + shouldShowFieldHandler: ShouldShowFieldInTableHandler; + onFilter?: DocViewFilterFn; +} + +export type SummaryColumnProps = DataGridCellValueElementProps; + +const SummaryColumn = (props: SummaryColumnProps & SummaryColumnFactoryDeps) => { + const { isDetails } = props; + + if (isDetails) { + return ; + } + + return ; +}; + +// eslint-disable-next-line import/no-default-export +export default SummaryColumn; + +const SummaryCell = ({ + density: maybeNullishDensity, + rowHeight: maybeNullishRowHeight, + ...props +}: SummaryColumnProps & SummaryColumnFactoryDeps) => { + const { onFilter, row } = props; + + const density = maybeNullishDensity ?? DataGridDensity.COMPACT; + const isCompressed = density === DataGridDensity.COMPACT; + + const rowHeight = maybeNullishRowHeight ?? ROWS_HEIGHT_OPTIONS.single; + const isSingleLine = rowHeight === ROWS_HEIGHT_OPTIONS.single || rowHeight === 1; + + const resourceFields = createResourceFields(row); + const shouldRenderResource = resourceFields.length > 0; + + return isSingleLine ? ( + + {shouldRenderResource && ( + + )} + + + ) : ( + <> + {shouldRenderResource && ( + + )} + + + ); +}; + +const SummaryCellPopover = (props: SummaryColumnProps & SummaryColumnFactoryDeps) => { + const { row, dataView, fieldFormats, onFilter, closePopover } = props; + + const resourceFields = createResourceFields(row); + const shouldRenderResource = resourceFields.length > 0; + + const documentOverview = getLogDocumentOverview(row, { dataView, fieldFormats }); + const { field, value } = getMessageFieldWithFallbacks(documentOverview); + const shouldRenderContent = Boolean(field && value); + + const shouldRenderSource = !shouldRenderContent; + + return ( + + + {shouldRenderResource && ( + + + {resourceLabel} + + + + )} + + + {contentLabel} + + {shouldRenderContent && ( + + + {field} + + + {value} + + + )} + {shouldRenderSource && ( + + + {jsonLabel} + + + + )} + + + ); +}; + +const singleLineResourceCss = { + flexGrow: 0, + lineHeight: 'normal', + marginTop: -1, +}; + +const multiLineResourceCss = { display: 'inline-flex' }; diff --git a/src/plugins/discover/public/components/data_types/logs/summary_column/utils.tsx b/src/plugins/discover/public/components/data_types/logs/summary_column/utils.tsx new file mode 100644 index 0000000000000..470ec8a0f86fa --- /dev/null +++ b/src/plugins/discover/public/components/data_types/logs/summary_column/utils.tsx @@ -0,0 +1,126 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { getFieldValue, LogDocument, ResourceFields } from '@kbn/discover-utils/src'; +import { DataTableRecord } from '@kbn/discover-utils'; +import { dynamic } from '@kbn/shared-ux-utility'; +import React from 'react'; +import { css } from '@emotion/react'; +import { AgentName } from '@kbn/elastic-agent-utils'; +import { euiThemeVars } from '@kbn/ui-theme'; +import { getAvailableResourceFields } from '../../../../utils/get_available_resource_fields'; +import * as constants from '../../../../../common/data_types/logs/constants'; +import { ServiceNameBadgeWithActions } from '../service_name_badge_with_actions'; +import { FieldBadgeWithActions, FieldBadgeWithActionsProps } from '../cell_actions_popover'; + +/** + * getUnformattedResourceFields definitions + */ +export const getUnformattedResourceFields = (doc: LogDocument): ResourceFields => { + const serviceName = getFieldValue(doc, constants.SERVICE_NAME_FIELD); + const hostName = getFieldValue(doc, constants.HOST_NAME_FIELD); + const agentName = getFieldValue(doc, constants.AGENT_NAME_FIELD); + const orchestratorClusterName = getFieldValue(doc, constants.ORCHESTRATOR_CLUSTER_NAME_FIELD); + const orchestratorResourceId = getFieldValue(doc, constants.ORCHESTRATOR_RESOURCE_ID_FIELD); + const orchestratorNamespace = getFieldValue(doc, constants.ORCHESTRATOR_NAMESPACE_FIELD); + const containerName = getFieldValue(doc, constants.CONTAINER_NAME_FIELD); + const containerId = getFieldValue(doc, constants.CONTAINER_ID_FIELD); + const cloudInstanceId = getFieldValue(doc, constants.CLOUD_INSTANCE_ID_FIELD); + + return { + [constants.SERVICE_NAME_FIELD]: serviceName, + [constants.HOST_NAME_FIELD]: hostName, + [constants.AGENT_NAME_FIELD]: agentName, + [constants.ORCHESTRATOR_CLUSTER_NAME_FIELD]: orchestratorClusterName, + [constants.ORCHESTRATOR_RESOURCE_ID_FIELD]: orchestratorResourceId, + [constants.ORCHESTRATOR_NAMESPACE_FIELD]: orchestratorNamespace, + [constants.CONTAINER_NAME_FIELD]: containerName, + [constants.CONTAINER_ID_FIELD]: containerId, + [constants.CLOUD_INSTANCE_ID_FIELD]: cloudInstanceId, + }; +}; + +/** + * createResourceFields definitions + */ +const AgentIcon = dynamic(() => import('@kbn/custom-icons/src/components/agent_icon')); + +const resourceCustomComponentsMap: Partial< + Record> +> = { + [constants.SERVICE_NAME_FIELD]: ServiceNameBadgeWithActions, +}; + +export interface ResourceFieldDescriptor { + ResourceBadge: React.ComponentType; + Icon?: () => JSX.Element; + name: keyof ResourceFields; + value: string; +} + +export const createResourceFields = (row: DataTableRecord): ResourceFieldDescriptor[] => { + const resourceDoc = getUnformattedResourceFields(row as LogDocument); + + const availableResourceFields = getAvailableResourceFields(resourceDoc); + + const resourceFields = availableResourceFields.map((name) => ({ + name, + value: resourceDoc[name] as string, + ResourceBadge: resourceCustomComponentsMap[name] ?? FieldBadgeWithActions, + ...(name === constants.SERVICE_NAME_FIELD && { + Icon: () => ( + + ), + }), + })); + + return resourceFields; +}; + +/** + * formatJsonDocumentForContent definitions + */ +export const formatJsonDocumentForContent = (row: DataTableRecord) => { + const flattenedResult: DataTableRecord['flattened'] = {}; + const rawFieldResult: DataTableRecord['raw']['fields'] = {}; + const { raw, flattened } = row; + const { fields } = raw; + + // We need 2 loops here for flattened and raw.fields. Flattened contains all fields, + // whereas raw.fields only contains certain fields excluding _ignored + for (const fieldName in flattened) { + if (isFieldAllowed(fieldName) && flattened[fieldName]) { + flattenedResult[fieldName] = flattened[fieldName]; + } + } + + for (const fieldName in fields) { + if (isFieldAllowed(fieldName) && fields[fieldName]) { + rawFieldResult[fieldName] = fields[fieldName]; + } + } + + return { + ...row, + flattened: flattenedResult, + raw: { + ...raw, + fields: rawFieldResult, + }, + }; +}; + +const isFieldAllowed = (field: string) => + !constants.FILTER_OUT_FIELDS_PREFIXES_FOR_CONTENT.some((prefix) => field.startsWith(prefix)); diff --git a/src/plugins/discover/public/components/data_types/logs/translations.tsx b/src/plugins/discover/public/components/data_types/logs/translations.tsx index a09675c66bcd7..bbc39022bd503 100644 --- a/src/plugins/discover/public/components/data_types/logs/translations.tsx +++ b/src/plugins/discover/public/components/data_types/logs/translations.tsx @@ -16,6 +16,10 @@ export const flyoutContentLabel = i18n.translate('discover.logs.flyoutDetail.lab defaultMessage: 'Content breakdown', }); +export const jsonLabel = i18n.translate('discover.logs.dataTable.header.popover.json', { + defaultMessage: 'JSON', +}); + export const contentLabel = i18n.translate('discover.logs.dataTable.header.popover.content', { defaultMessage: 'Content', }); diff --git a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/cell_renderer.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/cell_renderer.tsx deleted file mode 100644 index 87d07d073dde3..0000000000000 --- a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/cell_renderer.tsx +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React from 'react'; -import type { DataGridCellValueElementProps } from '@kbn/unified-data-table'; -import { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import { VirtualColumnServiceProvider } from '../../../../application/main/hooks/grid_customisations/use_virtual_column_services'; -import { CONTENT_FIELD, RESOURCE_FIELD } from '../../../../../common/data_types/logs/constants'; -import { Content } from './content'; -import { Resource } from './resource'; - -export const renderCell = - (type: string, { data }: { data: DataPublicPluginStart }) => - (props: DataGridCellValueElementProps) => { - const { dataView } = props; - const virtualColumnServices = { - data, - dataView, - }; - - let renderedCell = null; - - switch (type) { - case CONTENT_FIELD: - renderedCell = ; - break; - case RESOURCE_FIELD: - renderedCell = ; - break; - default: - break; - } - - return ( - - {renderedCell} - - ); - }; diff --git a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column.tsx deleted file mode 100644 index 61b77df7e0be1..0000000000000 --- a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column.tsx +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React from 'react'; -import { CustomGridColumnProps } from '@kbn/unified-data-table'; -import { CONTENT_FIELD, RESOURCE_FIELD } from '../../../../../common/data_types/logs/constants'; -import { ContentColumnTooltip } from './column_tooltips/content_column_tooltip'; -import { ResourceColumnTooltip } from './column_tooltips/resource_column_tooltip'; - -export const renderColumn = - (field: string) => - ({ column, headerRowHeight }: CustomGridColumnProps) => { - switch (field) { - case CONTENT_FIELD: - column.display = ; - break; - case RESOURCE_FIELD: - column.display = ( - - ); - break; - default: - break; - } - return column; - }; diff --git a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/content_column_tooltip.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/content_column_tooltip.tsx deleted file mode 100644 index db2cbd8ed6fc4..0000000000000 --- a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/content_column_tooltip.tsx +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { EuiText, useEuiTheme } from '@elastic/eui'; -import React from 'react'; -import { CustomGridColumnProps } from '@kbn/unified-data-table'; -import { css } from '@emotion/react'; -import { - contentHeaderTooltipParagraph1, - contentHeaderTooltipParagraph2, - contentLabel, -} from '../../../../data_types/logs/translations'; -import * as constants from '../../../../../../common/data_types/logs/constants'; -import { TooltipButton } from './tooltip_button'; -import { FieldWithToken } from './field_with_token'; - -export const ContentColumnTooltip = ({ column, headerRowHeight }: CustomGridColumnProps) => { - const { euiTheme } = useEuiTheme(); - const spacingCSS = css` - margin-bottom: ${euiTheme.size.s}; - `; - - return ( - -
- -

{contentHeaderTooltipParagraph1}

-
- -

{contentHeaderTooltipParagraph2}

-
- - -
-
- ); -}; diff --git a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/field_with_token.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/field_with_token.tsx deleted file mode 100644 index db334734670e6..0000000000000 --- a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/field_with_token.tsx +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { EuiFlexGroup, EuiFlexItem, EuiText, EuiToken } from '@elastic/eui'; -import React from 'react'; -import { css } from '@emotion/react'; -import { euiThemeVars } from '@kbn/ui-theme'; - -const spacingXsCss = css` - margin-bottom: ${euiThemeVars.euiSizeXS}; -`; - -export const FieldWithToken = ({ - field, - iconType = 'tokenKeyword', -}: { - field: string; - iconType?: string; -}) => { - return ( -
- - - - - - - {field} - - - -
- ); -}; diff --git a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/hover_popover.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/hover_popover.tsx deleted file mode 100644 index aab0e704dfc41..0000000000000 --- a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/hover_popover.tsx +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React, { useEffect, useRef, useState } from 'react'; -import { EuiPopover, EuiPopoverTitle } from '@elastic/eui'; - -export const HoverPopover = ({ - children, - button, - title, -}: { - children: React.ReactChild; - button: React.ReactElement; - title: string; -}) => { - const [isPopoverOpen, setIsPopoverOpen] = useState(false); - const leaveTimer = useRef(null); - - const clearTimer = () => { - if (leaveTimer.current) { - clearTimeout(leaveTimer.current); - } - }; - - const onMouseEnter = () => { - clearTimer(); - setIsPopoverOpen(true); - }; - - const onMouseLeave = () => { - leaveTimer.current = setTimeout(() => setIsPopoverOpen(false), 100); - }; - - useEffect(() => { - return () => { - clearTimer(); - }; - }, []); - - return ( -
- - {title} - {children} - -
- ); -}; diff --git a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/resource_column_tooltip.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/resource_column_tooltip.tsx deleted file mode 100644 index bbe5992724e52..0000000000000 --- a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/resource_column_tooltip.tsx +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React from 'react'; -import { css } from '@emotion/react'; -import { EuiText } from '@elastic/eui'; -import type { CustomGridColumnProps } from '@kbn/unified-data-table'; -import { euiThemeVars } from '@kbn/ui-theme'; -import { - resourceHeaderTooltipParagraph, - resourceLabel, -} from '../../../../data_types/logs/translations'; -import * as constants from '../../../../../../common/data_types/logs/constants'; -import { TooltipButton } from './tooltip_button'; -import { FieldWithToken } from './field_with_token'; - -const spacingCSS = css` - margin-bottom: ${euiThemeVars.euiSizeS}; -`; - -export const ResourceColumnTooltip = ({ column, headerRowHeight }: CustomGridColumnProps) => { - return ( - -
- -

{resourceHeaderTooltipParagraph}

-
- {[ - constants.SERVICE_NAME_FIELD, - constants.CONTAINER_NAME_FIELD, - constants.ORCHESTRATOR_NAMESPACE_FIELD, - constants.HOST_NAME_FIELD, - constants.CLOUD_INSTANCE_ID_FIELD, - ].map((field) => ( - - ))} -
-
- ); -}; diff --git a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/tooltip_button.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/tooltip_button.tsx deleted file mode 100644 index 716a345abb439..0000000000000 --- a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/tooltip_button.tsx +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React, { useEffect, useRef, useState, useCallback, useMemo } from 'react'; -import { EuiIcon } from '@elastic/eui'; -import ColumnHeaderTruncateContainer from '@kbn/unified-data-table/src/components/column_header_truncate_container'; - -import { EuiPopover, EuiPopoverTitle } from '@elastic/eui'; - -export const TooltipButton = ({ - children, - popoverTitle, - displayText, - headerRowHeight, - iconType = 'questionInCircle', -}: { - children: React.ReactChild; - popoverTitle: string; - displayText?: string; - headerRowHeight?: number; - iconType?: string; -}) => { - const [isPopoverOpen, setIsPopoverOpen] = useState(false); - const leaveTimer = useRef(null); - - const clearTimer = useMemo( - () => () => { - if (leaveTimer.current) { - clearTimeout(leaveTimer.current); - } - }, - [] - ); - - const onMouseEnter = useCallback(() => { - clearTimer(); - setIsPopoverOpen(true); - }, [clearTimer]); - - const onMouseLeave = useCallback(() => { - leaveTimer.current = setTimeout(() => setIsPopoverOpen(false), 100); - }, []); - - useEffect(() => { - return () => { - clearTimer(); - }; - }, [clearTimer]); - - return ( - - {displayText}{' '} - - } - isOpen={isPopoverOpen} - anchorPosition="upCenter" - panelPaddingSize="s" - ownFocus={false} - > - {popoverTitle} - {children} - - - ); -}; diff --git a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/content.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/content.tsx deleted file mode 100644 index 0cee9ee9cb267..0000000000000 --- a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/content.tsx +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React, { useMemo } from 'react'; -import { css } from '@emotion/css'; -import { EuiButtonIcon, EuiText } from '@elastic/eui'; -import { euiThemeVars } from '@kbn/ui-theme'; -import type { DataGridCellValueElementProps } from '@kbn/unified-data-table'; -import { - getLogDocumentOverview, - getMessageFieldWithFallbacks, - getShouldShowFieldHandler, -} from '@kbn/discover-utils'; -import { i18n } from '@kbn/i18n'; -import type { DataTableRecord } from '@kbn/discover-utils/src/types'; -import { dynamic } from '@kbn/shared-ux-utility'; -import * as constants from '../../../../../common/data_types/logs/constants'; -import { LogLevel } from '../../../data_types/logs/log_level'; - -const SourceDocument = dynamic( - () => import('@kbn/unified-data-table/src/components/source_document') -); - -const DiscoverSourcePopoverContent = dynamic( - () => import('@kbn/unified-data-table/src/components/source_popover_content') -); - -const sourceDocumentClassName = css` - display: inline !important; - margin-left: ${euiThemeVars.euiSizeXS}; -`; - -const LogMessage = ({ field, value }: { field?: string; value: string }) => { - const renderFieldPrefix = field && field !== constants.MESSAGE_FIELD; - return ( - - {renderFieldPrefix && {field}} - - {value} - - - ); -}; - -const SourcePopoverContent = ({ - row, - columnId, - closePopover, -}: { - row: DataTableRecord; - columnId: string; - closePopover: () => void; -}) => { - const closeButton = ( - - ); - return ( - - ); -}; - -export const Content = ({ - row, - dataView, - fieldFormats, - isDetails, - columnId, - closePopover, -}: DataGridCellValueElementProps) => { - const documentOverview = getLogDocumentOverview(row, { dataView, fieldFormats }); - const { field, value } = getMessageFieldWithFallbacks(documentOverview); - const renderLogMessage = field && value; - - const shouldShowFieldHandler = useMemo(() => { - const dataViewFields = dataView.fields.getAll().map((fld) => fld.name); - return getShouldShowFieldHandler(dataViewFields, dataView, true); - }, [dataView]); - - const formattedRow = useMemo(() => { - return formatJsonDocumentForContent(row); - }, [row]); - - if (isDetails && !renderLogMessage) { - return ( - - ); - } - - return ( - - {documentOverview[constants.LOG_LEVEL_FIELD] && ( - - )} - {renderLogMessage ? ( - - ) : ( - - )} - - ); -}; - -const formatJsonDocumentForContent = (row: DataTableRecord) => { - const flattenedResult: DataTableRecord['flattened'] = {}; - const rawFieldResult: DataTableRecord['raw']['fields'] = {}; - const { raw, flattened } = row; - const { fields } = raw; - - // We need 2 loops here for flattened and raw.fields. Flattened contains all fields, - // whereas raw.fields only contains certain fields excluding _ignored - for (const key in flattened) { - if ( - !constants.FILTER_OUT_FIELDS_PREFIXES_FOR_CONTENT.some((prefix) => key.startsWith(prefix)) - ) { - flattenedResult[key] = flattened[key]; - } - } - - for (const key in fields) { - if ( - !constants.FILTER_OUT_FIELDS_PREFIXES_FOR_CONTENT.some((prefix) => key.startsWith(prefix)) - ) { - rawFieldResult[key] = fields[key]; - } - } - - return { - ...row, - flattened: flattenedResult, - raw: { - ...raw, - fields: rawFieldResult, - }, - }; -}; diff --git a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/resource.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/resource.tsx deleted file mode 100644 index e00a84228ed0f..0000000000000 --- a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/resource.tsx +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React from 'react'; -import type { DataGridCellValueElementProps } from '@kbn/unified-data-table'; -import { AgentName } from '@kbn/elastic-agent-utils'; -import { dynamic } from '@kbn/shared-ux-utility'; -import { LogDocument } from '@kbn/discover-utils/src'; -import * as constants from '../../../../../common/data_types/logs/constants'; -import { getUnformattedResourceFields } from './utils/resource'; -import { ChipWithPopover } from '../../../data_types/logs/popover_chip'; -import { ServiceNameChipWithPopover } from '../../../data_types/logs/service_name_chip_with_popover'; - -const AgentIcon = dynamic(() => import('@kbn/custom-icons/src/components/agent_icon')); - -export const Resource = ({ row }: DataGridCellValueElementProps) => { - const resourceDoc = getUnformattedResourceFields(row as LogDocument); - return ( -
- {(resourceDoc[constants.SERVICE_NAME_FIELD] as string) && ( - - ) - } - /> - )} - {resourceDoc[constants.CONTAINER_NAME_FIELD] && ( - - )} - {resourceDoc[constants.HOST_NAME_FIELD] && ( - - )} - {resourceDoc[constants.ORCHESTRATOR_NAMESPACE_FIELD] && ( - - )} - {resourceDoc[constants.CLOUD_INSTANCE_ID_FIELD] && ( - - )} -
- ); -}; diff --git a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/utils/resource.ts b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/utils/resource.ts deleted file mode 100644 index f63c27e734af4..0000000000000 --- a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/utils/resource.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { getFieldFromDoc, LogDocument, ResourceFields } from '@kbn/discover-utils/src'; -import * as constants from '../../../../../../common/data_types/logs/constants'; - -export const getUnformattedResourceFields = (doc: LogDocument): ResourceFields => { - const serviceName = getFieldFromDoc(doc, constants.SERVICE_NAME_FIELD); - const hostName = getFieldFromDoc(doc, constants.HOST_NAME_FIELD); - const agentName = getFieldFromDoc(doc, constants.AGENT_NAME_FIELD); - const orchestratorClusterName = getFieldFromDoc(doc, constants.ORCHESTRATOR_CLUSTER_NAME_FIELD); - const orchestratorResourceId = getFieldFromDoc(doc, constants.ORCHESTRATOR_RESOURCE_ID_FIELD); - const orchestratorNamespace = getFieldFromDoc(doc, constants.ORCHESTRATOR_NAMESPACE_FIELD); - const containerName = getFieldFromDoc(doc, constants.CONTAINER_NAME_FIELD); - const containerId = getFieldFromDoc(doc, constants.CONTAINER_ID_FIELD); - const cloudInstanceId = getFieldFromDoc(doc, constants.CLOUD_INSTANCE_ID_FIELD); - - return { - [constants.SERVICE_NAME_FIELD]: serviceName, - [constants.HOST_NAME_FIELD]: hostName, - [constants.AGENT_NAME_FIELD]: agentName, - [constants.ORCHESTRATOR_CLUSTER_NAME_FIELD]: orchestratorClusterName, - [constants.ORCHESTRATOR_RESOURCE_ID_FIELD]: orchestratorResourceId, - [constants.ORCHESTRATOR_NAMESPACE_FIELD]: orchestratorNamespace, - [constants.CONTAINER_NAME_FIELD]: containerName, - [constants.CONTAINER_ID_FIELD]: containerId, - [constants.CLOUD_INSTANCE_ID_FIELD]: cloudInstanceId, - }; -}; diff --git a/src/plugins/discover/public/context_awareness/__mocks__/index.tsx b/src/plugins/discover/public/context_awareness/__mocks__/index.tsx index c0e3d981668cf..a15b7aa26a8a0 100644 --- a/src/plugins/discover/public/context_awareness/__mocks__/index.tsx +++ b/src/plugins/discover/public/context_awareness/__mocks__/index.tsx @@ -21,6 +21,7 @@ import { RootProfileService, SolutionType, } from '../profiles'; +import { ProfileProviderServices } from '../profile_providers/profile_provider_services'; import { ProfilesManager } from '../profiles_manager'; import { DiscoverEBTContextManager } from '../../services/discover_ebt_context_manager'; import { createLogsContextServiceMock } from '@kbn/discover-utils/src/__mocks__'; @@ -31,8 +32,8 @@ export const createContextAwarenessMocks = ({ const rootProfileProviderMock: RootProfileProvider = { profileId: 'root-profile', profile: { - getCellRenderers: jest.fn((prev) => () => ({ - ...prev(), + getCellRenderers: jest.fn((prev) => (params) => ({ + ...prev(params), rootProfile: () => <>root-profile, })), getAdditionalCellActions: jest.fn((prev) => () => [ @@ -59,8 +60,8 @@ export const createContextAwarenessMocks = ({ const dataSourceProfileProviderMock: DataSourceProfileProvider = { profileId: 'data-source-profile', profile: { - getCellRenderers: jest.fn((prev) => () => ({ - ...prev(), + getCellRenderers: jest.fn((prev) => (params) => ({ + ...prev(params), rootProfile: () => <>data-source-profile, })), getDefaultAppState: jest.fn(() => () => ({ @@ -179,5 +180,5 @@ export const createContextAwarenessMocks = ({ const createProfileProviderServicesMock = () => { return { logsContextService: createLogsContextServiceMock(), - }; + } as ProfileProviderServices; }; diff --git a/src/plugins/discover/public/context_awareness/composable_profile.test.ts b/src/plugins/discover/public/context_awareness/composable_profile.test.ts index 0e92709000596..34cf44449f20e 100644 --- a/src/plugins/discover/public/context_awareness/composable_profile.test.ts +++ b/src/plugins/discover/public/context_awareness/composable_profile.test.ts @@ -7,14 +7,23 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { DataGridDensity } from '@kbn/unified-data-table'; import { ComposableProfile, getMergedAccessor } from './composable_profile'; import { Profile } from './types'; +import { dataViewWithTimefieldMock } from '../__mocks__/data_view_with_timefield'; + +const getCellRenderersParams = { + actions: { addFilter: jest.fn() }, + dataView: dataViewWithTimefieldMock, + density: DataGridDensity.COMPACT, + rowHeight: 0, +}; describe('getMergedAccessor', () => { it('should return the base implementation if no profiles are provided', () => { const baseImpl: Profile['getCellRenderers'] = jest.fn(() => ({ base: jest.fn() })); const mergedAccessor = getMergedAccessor([], 'getCellRenderers', baseImpl); - const result = mergedAccessor(); + const result = mergedAccessor(getCellRenderersParams); expect(baseImpl).toHaveBeenCalled(); expect(result).toEqual({ base: expect.any(Function) }); }); @@ -22,19 +31,19 @@ describe('getMergedAccessor', () => { it('should merge the accessors in the correct order', () => { const baseImpl: Profile['getCellRenderers'] = jest.fn(() => ({ base: jest.fn() })); const profile1: ComposableProfile = { - getCellRenderers: jest.fn((prev) => () => ({ - ...prev(), + getCellRenderers: jest.fn((prev) => (params) => ({ + ...prev(params), profile1: jest.fn(), })), }; const profile2: ComposableProfile = { - getCellRenderers: jest.fn((prev) => () => ({ - ...prev(), + getCellRenderers: jest.fn((prev) => (params) => ({ + ...prev(params), profile2: jest.fn(), })), }; const mergedAccessor = getMergedAccessor([profile1, profile2], 'getCellRenderers', baseImpl); - const result = mergedAccessor(); + const result = mergedAccessor(getCellRenderersParams); expect(baseImpl).toHaveBeenCalled(); expect(profile1.getCellRenderers).toHaveBeenCalled(); expect(profile2.getCellRenderers).toHaveBeenCalled(); @@ -52,13 +61,13 @@ describe('getMergedAccessor', () => { getCellRenderers: jest.fn(() => () => ({ profile1: jest.fn() })), }; const profile2: ComposableProfile = { - getCellRenderers: jest.fn((prev) => () => ({ - ...prev(), + getCellRenderers: jest.fn((prev) => (params) => ({ + ...prev(params), profile2: jest.fn(), })), }; const mergedAccessor = getMergedAccessor([profile1, profile2], 'getCellRenderers', baseImpl); - const result = mergedAccessor(); + const result = mergedAccessor(getCellRenderersParams); expect(baseImpl).not.toHaveBeenCalled(); expect(profile1.getCellRenderers).toHaveBeenCalled(); expect(profile2.getCellRenderers).toHaveBeenCalled(); diff --git a/src/plugins/discover/public/context_awareness/hooks/use_profile_accessor.test.ts b/src/plugins/discover/public/context_awareness/hooks/use_profile_accessor.test.ts index 83d2381d79a5f..3fe3c0387149e 100644 --- a/src/plugins/discover/public/context_awareness/hooks/use_profile_accessor.test.ts +++ b/src/plugins/discover/public/context_awareness/hooks/use_profile_accessor.test.ts @@ -13,6 +13,7 @@ import { useProfileAccessor } from './use_profile_accessor'; import { getDataTableRecords } from '../../__fixtures__/real_hits'; import { dataViewWithTimefieldMock } from '../../__mocks__/data_view_with_timefield'; import { useProfiles } from './use_profiles'; +import { DataGridDensity } from '@kbn/unified-data-table'; let mockProfiles: ComposableProfile[] = []; @@ -30,12 +31,19 @@ jest.mock('../composable_profile', () => { const record = getDataTableRecords(dataViewWithTimefieldMock)[0]; +const getCellRenderersParams = { + actions: { addFilter: jest.fn() }, + dataView: dataViewWithTimefieldMock, + density: DataGridDensity.COMPACT, + rowHeight: 0, +}; + describe('useProfileAccessor', () => { beforeEach(() => { jest.clearAllMocks(); mockProfiles = [ - { getCellRenderers: (prev) => () => ({ ...prev(), profile1: jest.fn() }) }, - { getCellRenderers: (prev) => () => ({ ...prev(), profile2: jest.fn() }) }, + { getCellRenderers: (prev) => (params) => ({ ...prev(params), profile1: jest.fn() }) }, + { getCellRenderers: (prev) => (params) => ({ ...prev(params), profile2: jest.fn() }) }, ]; }); @@ -47,7 +55,7 @@ describe('useProfileAccessor', () => { const accessor = result.current(base); expect(getMergedAccessor).toHaveBeenCalledTimes(1); expect(getMergedAccessor).toHaveBeenCalledWith(mockProfiles, 'getCellRenderers', base); - const renderers = accessor(); + const renderers = accessor(getCellRenderersParams); expect(renderers).toEqual({ base: expect.any(Function), profile1: expect.any(Function), @@ -72,7 +80,9 @@ describe('useProfileAccessor', () => { useProfileAccessor('getCellRenderers', { record }) ); const prevResult = result.current; - mockProfiles = [{ getCellRenderers: (prev) => () => ({ ...prev(), profile3: jest.fn() }) }]; + mockProfiles = [ + { getCellRenderers: (prev) => (params) => ({ ...prev(params), profile3: jest.fn() }) }, + ]; rerender(); expect(result.current).not.toBe(prevResult); }); diff --git a/src/plugins/discover/public/context_awareness/profile_providers/common/logs_data_source_profile/accessors/get_cell_renderers.tsx b/src/plugins/discover/public/context_awareness/profile_providers/common/logs_data_source_profile/accessors/get_cell_renderers.tsx index 69a2009f0a4af..9e45892070120 100644 --- a/src/plugins/discover/public/context_awareness/profile_providers/common/logs_data_source_profile/accessors/get_cell_renderers.tsx +++ b/src/plugins/discover/public/context_awareness/profile_providers/common/logs_data_source_profile/accessors/get_cell_renderers.tsx @@ -7,17 +7,19 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { SOURCE_COLUMN } from '@kbn/unified-data-table'; +import { getSummaryColumn } from '../../../../../components/data_types/logs/summary_column'; import { LOG_LEVEL_FIELDS, SERVICE_NAME_FIELDS, } from '../../../../../../common/data_types/logs/constants'; import { getLogLevelBadgeCell } from '../../../../../components/data_types/logs/log_level_badge_cell'; import { getServiceNameCell } from '../../../../../components/data_types/logs/service_name_cell'; -import { DataSourceProfileProvider } from '../../../../profiles'; +import type { DataSourceProfileProvider } from '../../../../profiles'; export const getCellRenderers: DataSourceProfileProvider['profile']['getCellRenderers'] = - (prev) => () => ({ - ...prev(), + (prev) => (params) => ({ + ...prev(params), ...LOG_LEVEL_FIELDS.reduce( (acc, field) => ({ ...acc, @@ -34,4 +36,5 @@ export const getCellRenderers: DataSourceProfileProvider['profile']['getCellRend }), {} ), + [SOURCE_COLUMN]: getSummaryColumn(params), }); diff --git a/src/plugins/discover/public/context_awareness/profile_providers/common/logs_data_source_profile/profile.test.ts b/src/plugins/discover/public/context_awareness/profile_providers/common/logs_data_source_profile/profile.test.ts index 0240736000c66..861ef0b590224 100644 --- a/src/plugins/discover/public/context_awareness/profile_providers/common/logs_data_source_profile/profile.test.ts +++ b/src/plugins/discover/public/context_awareness/profile_providers/common/logs_data_source_profile/profile.test.ts @@ -14,6 +14,8 @@ import { createDataViewDataSource, createEsqlDataSource } from '../../../../../c import { DataSourceCategory, RootContext, SolutionType } from '../../../profiles'; import { createContextAwarenessMocks } from '../../../__mocks__'; import { createLogsDataSourceProfileProvider } from './profile'; +import { DataGridDensity } from '@kbn/unified-data-table'; +import { dataViewWithTimefieldMock } from '../../../../__mocks__/data_view_with_timefield'; const mockServices = createContextAwarenessMocks().profileProviderServices; @@ -151,7 +153,13 @@ describe('logsDataSourceProfileProvider', () => { describe('getCellRenderers', () => { it('should return cell renderers for log level fields', () => { const getCellRenderers = logsDataSourceProfileProvider.profile.getCellRenderers?.(() => ({})); - const cellRenderers = getCellRenderers?.(); + const getCellRenderersParams = { + actions: { addFilter: jest.fn() }, + dataView: dataViewWithTimefieldMock, + density: DataGridDensity.COMPACT, + rowHeight: 0, + }; + const cellRenderers = getCellRenderers?.(getCellRenderersParams); expect(cellRenderers).toBeDefined(); expect(cellRenderers?.['log.level']).toBeDefined(); diff --git a/src/plugins/discover/public/context_awareness/profile_providers/common/logs_data_source_profile/profile.ts b/src/plugins/discover/public/context_awareness/profile_providers/common/logs_data_source_profile/profile.ts index 7b9d5ef3e5961..f2818c336bf40 100644 --- a/src/plugins/discover/public/context_awareness/profile_providers/common/logs_data_source_profile/profile.ts +++ b/src/plugins/discover/public/context_awareness/profile_providers/common/logs_data_source_profile/profile.ts @@ -21,8 +21,8 @@ export const createLogsDataSourceProfileProvider = ( ): DataSourceProfileProvider => ({ profileId: 'logs-data-source-profile', profile: { - getRowIndicatorProvider, getCellRenderers, + getRowIndicatorProvider, getRowAdditionalLeadingControls, }, resolve: (params) => { diff --git a/src/plugins/discover/public/context_awareness/profile_providers/example/example_data_source_profile/profile.tsx b/src/plugins/discover/public/context_awareness/profile_providers/example/example_data_source_profile/profile.tsx index ae1d29170c852..c82cf1a893c8d 100644 --- a/src/plugins/discover/public/context_awareness/profile_providers/example/example_data_source_profile/profile.tsx +++ b/src/plugins/discover/public/context_awareness/profile_providers/example/example_data_source_profile/profile.tsx @@ -21,10 +21,10 @@ export const createExampleDataSourceProfileProvider = (): DataSourceProfileProvi profileId: 'example-data-source-profile', isExperimental: true, profile: { - getCellRenderers: (prev) => () => ({ - ...prev(), + getCellRenderers: (prev) => (params) => ({ + ...prev(params), 'log.level': (props) => { - const level = getFieldValue(props.row, 'log.level'); + const level = getFieldValue(props.row, 'log.level') as string; if (!level) { return ( diff --git a/src/plugins/discover/public/context_awareness/profile_providers/example/example_root_pofile/profile.tsx b/src/plugins/discover/public/context_awareness/profile_providers/example/example_root_pofile/profile.tsx index ad247eacee666..125cb609fb849 100644 --- a/src/plugins/discover/public/context_awareness/profile_providers/example/example_root_pofile/profile.tsx +++ b/src/plugins/discover/public/context_awareness/profile_providers/example/example_root_pofile/profile.tsx @@ -16,10 +16,10 @@ export const createExampleRootProfileProvider = (): RootProfileProvider => ({ profileId: 'example-root-profile', isExperimental: true, profile: { - getCellRenderers: (prev) => () => ({ - ...prev(), + getCellRenderers: (prev) => (params) => ({ + ...prev(params), '@timestamp': (props) => { - const timestamp = getFieldValue(props.row, '@timestamp'); + const timestamp = getFieldValue(props.row, '@timestamp') as string; return ( diff --git a/src/plugins/discover/public/context_awareness/profile_providers/profile_provider_services.ts b/src/plugins/discover/public/context_awareness/profile_providers/profile_provider_services.ts index a757f24308173..daa75586384aa 100644 --- a/src/plugins/discover/public/context_awareness/profile_providers/profile_provider_services.ts +++ b/src/plugins/discover/public/context_awareness/profile_providers/profile_provider_services.ts @@ -9,18 +9,19 @@ import { createLogsContextService, LogsContextService } from '@kbn/discover-utils'; import type { LogsDataAccessPluginStart } from '@kbn/logs-data-access-plugin/public'; +import type { DiscoverServices } from '../../build_services'; /** * Dependencies required by profile provider implementations */ -export interface ProfileProviderDeps { - logsDataAccessPlugin?: LogsDataAccessPluginStart; +export interface ProfileProviderDeps extends DiscoverServices { + logsDataAccess?: LogsDataAccessPluginStart; } /** * Services provided to profile provider implementations */ -export interface ProfileProviderServices { +export interface ProfileProviderServices extends DiscoverServices { /** * A service containing methods used for logs profiles */ @@ -33,11 +34,12 @@ export interface ProfileProviderServices { * @returns Profile provider services */ export const createProfileProviderServices = async ( - deps: ProfileProviderDeps = {} + discoverServices: ProfileProviderDeps ): Promise => { return { + ...discoverServices, logsContextService: await createLogsContextService({ - logsDataAccessPlugin: deps.logsDataAccessPlugin, + logsDataAccess: discoverServices.logsDataAccess, }), }; }; diff --git a/src/plugins/discover/public/context_awareness/profile_providers/register_profile_providers.test.ts b/src/plugins/discover/public/context_awareness/profile_providers/register_profile_providers.test.ts index 1269441df2f21..940eb6b67e591 100644 --- a/src/plugins/discover/public/context_awareness/profile_providers/register_profile_providers.test.ts +++ b/src/plugins/discover/public/context_awareness/profile_providers/register_profile_providers.test.ts @@ -8,7 +8,6 @@ */ import { createEsqlDataSource } from '../../../common/data_sources'; -import { DiscoverStartPlugins } from '../../types'; import { createContextAwarenessMocks } from '../__mocks__'; import { createExampleRootProfileProvider } from './example/example_root_pofile'; import { createExampleDataSourceProfileProvider } from './example/example_data_source_profile/profile'; @@ -70,12 +69,15 @@ describe('registerEnabledProfileProviders', () => { describe('registerProfileProviders', () => { it('should register enabled experimental profile providers', async () => { - const { rootProfileServiceMock, dataSourceProfileServiceMock, documentProfileServiceMock } = - createContextAwarenessMocks({ - shouldRegisterProviders: false, - }); + const { + rootProfileServiceMock, + dataSourceProfileServiceMock, + documentProfileServiceMock, + profileProviderServices, + } = createContextAwarenessMocks({ + shouldRegisterProviders: false, + }); await registerProfileProviders({ - plugins: {} as DiscoverStartPlugins, rootProfileService: rootProfileServiceMock, dataSourceProfileService: dataSourceProfileServiceMock, documentProfileService: documentProfileServiceMock, @@ -84,6 +86,7 @@ describe('registerProfileProviders', () => { exampleDataSourceProfileProvider.profileId, exampleDocumentProfileProvider.profileId, ], + services: profileProviderServices, }); const rootContext = await rootProfileServiceMock.resolve({ solutionNavId: null }); const dataSourceContext = await dataSourceProfileServiceMock.resolve({ @@ -106,16 +109,20 @@ describe('registerProfileProviders', () => { }); it('should not register disabled experimental profile providers', async () => { - const { rootProfileServiceMock, dataSourceProfileServiceMock, documentProfileServiceMock } = - createContextAwarenessMocks({ - shouldRegisterProviders: false, - }); + const { + rootProfileServiceMock, + dataSourceProfileServiceMock, + documentProfileServiceMock, + profileProviderServices, + } = createContextAwarenessMocks({ + shouldRegisterProviders: false, + }); await registerProfileProviders({ - plugins: {} as DiscoverStartPlugins, rootProfileService: rootProfileServiceMock, dataSourceProfileService: dataSourceProfileServiceMock, documentProfileService: documentProfileServiceMock, enabledExperimentalProfileIds: [], + services: profileProviderServices, }); const rootContext = await rootProfileServiceMock.resolve({ solutionNavId: null }); const dataSourceContext = await dataSourceProfileServiceMock.resolve({ diff --git a/src/plugins/discover/public/context_awareness/profile_providers/register_profile_providers.ts b/src/plugins/discover/public/context_awareness/profile_providers/register_profile_providers.ts index 3bd7ee9926f2d..58ff63ca35c19 100644 --- a/src/plugins/discover/public/context_awareness/profile_providers/register_profile_providers.ts +++ b/src/plugins/discover/public/context_awareness/profile_providers/register_profile_providers.ts @@ -23,20 +23,19 @@ import { createProfileProviderServices, ProfileProviderServices, } from './profile_provider_services'; -import type { DiscoverStartPlugins } from '../../types'; +import type { DiscoverServices } from '../../build_services'; /** * Register profile providers for root, data source, and document contexts to the profile profile services * @param options Register profile provider options */ export const registerProfileProviders = async ({ - plugins, rootProfileService, dataSourceProfileService, documentProfileService, enabledExperimentalProfileIds, + services, }: { - plugins: DiscoverStartPlugins; /** * Root profile service */ @@ -53,10 +52,9 @@ export const registerProfileProviders = async ({ * Array of experimental profile IDs which are enabled in `kibana.yml` */ enabledExperimentalProfileIds: string[]; + services: DiscoverServices; }) => { - const providerServices = await createProfileProviderServices({ - logsDataAccessPlugin: plugins.logsDataAccess, - }); + const providerServices = await createProfileProviderServices(services); const rootProfileProviders = createRootProfileProviders(providerServices); const dataSourceProfileProviders = createDataSourceProfileProviders(providerServices); const documentProfileProviders = createDocumentProfileProviders(providerServices); diff --git a/src/plugins/discover/public/context_awareness/profile_providers/security/security_root_profile/profile.tsx b/src/plugins/discover/public/context_awareness/profile_providers/security/security_root_profile/profile.tsx index aa74318f645e3..238d29302a910 100644 --- a/src/plugins/discover/public/context_awareness/profile_providers/security/security_root_profile/profile.tsx +++ b/src/plugins/discover/public/context_awareness/profile_providers/security/security_root_profile/profile.tsx @@ -19,8 +19,8 @@ export const createSecurityRootProfileProvider: SecurityProfileProviderFactory< profileId: 'security-root-profile', isExperimental: true, profile: { - getCellRenderers: (prev) => () => ({ - ...prev(), + getCellRenderers: (prev) => (params) => ({ + ...prev(params), 'host.name': (props) => { const CellRenderer = getDiscoverCellRenderer({ fieldName: 'host.name', diff --git a/src/plugins/discover/public/context_awareness/types.ts b/src/plugins/discover/public/context_awareness/types.ts index dacc2edbc218d..63c23bbb3d4b1 100644 --- a/src/plugins/discover/public/context_awareness/types.ts +++ b/src/plugins/discover/public/context_awareness/types.ts @@ -8,7 +8,11 @@ */ import type { DataView } from '@kbn/data-views-plugin/common'; -import type { CustomCellRenderer, UnifiedDataTableProps } from '@kbn/unified-data-table'; +import type { + CustomCellRenderer, + DataGridDensity, + UnifiedDataTableProps, +} from '@kbn/unified-data-table'; import type { DocViewsRegistry } from '@kbn/unified-doc-viewer'; import type { DataTableRecord } from '@kbn/discover-utils'; import type { CellAction, CellActionExecutionContext, CellActionsData } from '@kbn/cell-actions'; @@ -16,6 +20,7 @@ import type { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import type { AggregateQuery, Filter, Query, TimeRange } from '@kbn/es-query'; import type { OmitIndexSignature } from 'type-fest'; import type { Trigger } from '@kbn/ui-actions-plugin/public'; +import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; import type { DiscoverDataSource } from '../../common/data_sources'; import type { DiscoverAppState } from '../application/main/state_management/discover_app_state_container'; @@ -96,6 +101,30 @@ export interface DefaultAppStateExtension { rowHeight?: number; } +/** + * Parameters passed to the cell renderers extension + */ +export interface CellRenderersExtensionParams { + /** + * Available actions for cell renderers + */ + actions: { + addFilter?: DocViewFilterFn; + }; + /** + * The current data view + */ + dataView: DataView; + /** + * The current density applied to the data grid component + */ + density: DataGridDensity | undefined; + /** + * The current row height mode applied to the data grid component + */ + rowHeight: number | undefined; +} + /** * Parameters passed to the row controls extension */ @@ -216,7 +245,7 @@ export interface Profile { * Gets a map of column names to custom cell renderers to use in the data grid * @returns The custom cell renderers to use in the data grid */ - getCellRenderers: () => CustomCellRenderer; + getCellRenderers: (params: CellRenderersExtensionParams) => CustomCellRenderer; /** * Gets a row indicator provider, allowing rows in the data grid to be given coloured highlights diff --git a/src/plugins/discover/public/embeddable/components/saved_search_grid.tsx b/src/plugins/discover/public/embeddable/components/saved_search_grid.tsx index aa484098fb8a3..23e06062d166b 100644 --- a/src/plugins/discover/public/embeddable/components/saved_search_grid.tsx +++ b/src/plugins/discover/public/embeddable/components/saved_search_grid.tsx @@ -17,6 +17,8 @@ import { type DataTableColumnsMeta, DataLoadingState as DiscoverGridLoadingState, getRenderCustomToolbarWithElements, + getDataGridDensity, + getRowHeight, } from '@kbn/unified-data-table'; import { DiscoverGrid } from '../../components/discover_grid'; import './saved_search_grid.scss'; @@ -25,8 +27,7 @@ import { SavedSearchEmbeddableBase } from './saved_search_embeddable_base'; import { TotalDocuments } from '../../application/main/components/total_documents/total_documents'; import { useProfileAccessor } from '../../context_awareness'; -export interface DiscoverGridEmbeddableProps - extends Omit { +interface DiscoverGridEmbeddableProps extends Omit { sampleSizeState: number; // a required prop totalHitCount?: number; query?: AggregateQuery | Query; @@ -36,15 +37,11 @@ export interface DiscoverGridEmbeddableProps savedSearchId?: string; } -export type DiscoverGridEmbeddableSearchProps = Omit< - DiscoverGridEmbeddableProps, - 'sampleSizeState' | 'loadingState' | 'query' ->; - export const DiscoverGridMemoized = React.memo(DiscoverGrid); export function DiscoverGridEmbeddable(props: DiscoverGridEmbeddableProps) { const { interceptedWarnings, ...gridProps } = props; + const [expandedDoc, setExpandedDoc] = useState(undefined); const renderDocumentView = useCallback( @@ -94,8 +91,27 @@ export function DiscoverGridEmbeddable(props: DiscoverGridEmbeddableProps) { const getCellRenderersAccessor = useProfileAccessor('getCellRenderers'); const cellRenderers = useMemo(() => { const getCellRenderers = getCellRenderersAccessor(() => ({})); - return getCellRenderers(); - }, [getCellRenderersAccessor]); + return getCellRenderers({ + actions: { addFilter: props.onFilter }, + dataView: props.dataView, + density: + gridProps.dataGridDensityState ?? getDataGridDensity(props.services.storage, 'discover'), + rowHeight: getRowHeight({ + storage: props.services.storage, + consumer: 'discover', + rowHeightState: gridProps.rowHeightState, + configRowHeight: props.configRowHeight, + }), + }); + }, [ + getCellRenderersAccessor, + props.onFilter, + props.dataView, + props.services.storage, + props.configRowHeight, + gridProps.dataGridDensityState, + gridProps.rowHeightState, + ]); return ( { - const { registerProfileProviders } = await import('./context_awareness/profile_providers'); + private createProfileServices() { const rootProfileService = new RootProfileService(); const dataSourceProfileService = new DataSourceProfileService(); const documentProfileService = new DocumentProfileService(); + + return { rootProfileService, dataSourceProfileService, documentProfileService }; + } + + private createProfilesManager = async ( + core: CoreStart, + plugins: DiscoverStartPlugins, + ebtContextManager: DiscoverEBTContextManager + ) => { + const { registerProfileProviders } = await import('./context_awareness/profile_providers'); + const { rootProfileService, dataSourceProfileService, documentProfileService } = + this.createProfileServices(); + const enabledExperimentalProfileIds = this.experimentalFeatures.enabledProfiles ?? []; + const profilesManager = new ProfilesManager( + rootProfileService, + dataSourceProfileService, + documentProfileService, + ebtContextManager + ); + await registerProfileProviders({ - plugins, rootProfileService, dataSourceProfileService, documentProfileService, enabledExperimentalProfileIds, + services: this.getDiscoverServices(core, plugins, profilesManager, ebtContextManager), }); - return { rootProfileService, dataSourceProfileService, documentProfileService }; - }); - - private async createProfilesManager({ - plugins, - ebtContextManager, - }: { - plugins: DiscoverStartPlugins; - ebtContextManager: DiscoverEBTContextManager; - }) { + return profilesManager; + }; + + private createEmptyProfilesManager() { const { rootProfileService, dataSourceProfileService, documentProfileService } = - await this.createProfileServices({ plugins }); + this.createProfileServices(); return new ProfilesManager( rootProfileService, dataSourceProfileService, documentProfileService, - ebtContextManager - ); - } - - private createEmptyProfilesManager() { - return new ProfilesManager( - new RootProfileService(), - new DataSourceProfileService(), - new DocumentProfileService(), new DiscoverEBTContextManager() // it's not enabled outside of Discover ); } @@ -395,10 +399,7 @@ export class DiscoverPlugin const getDiscoverServicesInternal = async () => { const [coreStart, deps] = await core.getStartServices(); const ebtContextManager = new DiscoverEBTContextManager(); // it's not enabled outside of Discover - const profilesManager = await this.createProfilesManager({ - plugins: deps, - ebtContextManager, - }); + const profilesManager = await this.createProfilesManager(coreStart, deps, ebtContextManager); return this.getDiscoverServices(coreStart, deps, profilesManager, ebtContextManager); }; diff --git a/src/plugins/discover/public/types.ts b/src/plugins/discover/public/types.ts index 916833bdce1d5..3b24341e1a654 100644 --- a/src/plugins/discover/public/types.ts +++ b/src/plugins/discover/public/types.ts @@ -154,8 +154,10 @@ export interface DiscoverStartPlugins { embeddable: EmbeddableStart; expressions: ExpressionsStart; fieldFormats: FieldFormatsStart; + fieldsMetadata: FieldsMetadataPublicStart; inspector: InspectorPublicPluginStart; lens: LensPublicStart; + logsDataAccess?: LogsDataAccessPluginStart; navigation: NavigationStart; noDataPage?: NoDataPagePluginStart; observabilityAIAssistant?: ObservabilityAIAssistantPublicStart; @@ -170,6 +172,4 @@ export interface DiscoverStartPlugins { unifiedSearch: UnifiedSearchPublicPluginStart; urlForwarding: UrlForwardingStart; usageCollection?: UsageCollectionSetup; - fieldsMetadata: FieldsMetadataPublicStart; - logsDataAccess?: LogsDataAccessPluginStart; } diff --git a/src/plugins/discover/public/utils/get_available_resource_fields.ts b/src/plugins/discover/public/utils/get_available_resource_fields.ts new file mode 100644 index 0000000000000..588194d2a13ca --- /dev/null +++ b/src/plugins/discover/public/utils/get_available_resource_fields.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { ResourceFields } from '@kbn/discover-utils/src'; +import * as constants from '../../common/data_types/logs/constants'; + +export const getAvailableResourceFields = (resourceDoc: ResourceFields) => { + const resourceFields: Array = [ + constants.SERVICE_NAME_FIELD, + constants.CONTAINER_NAME_FIELD, + constants.HOST_NAME_FIELD, + constants.ORCHESTRATOR_NAMESPACE_FIELD, + constants.CLOUD_INSTANCE_ID_FIELD, + ]; + + return resourceFields.filter((fieldName) => Boolean(resourceDoc[fieldName])); +}; diff --git a/src/plugins/discover/tsconfig.json b/src/plugins/discover/tsconfig.json index 65b121f47d105..fb6ec66985647 100644 --- a/src/plugins/discover/tsconfig.json +++ b/src/plugins/discover/tsconfig.json @@ -98,6 +98,7 @@ "@kbn/security-solution-common", "@kbn/router-utils", "@kbn/management-settings-ids", + "@kbn/react-hooks", "@kbn/logs-data-access-plugin", "@kbn/core-lifecycle-browser" ], diff --git a/src/plugins/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview_header.tsx b/src/plugins/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview_header.tsx index bf7ea88be5907..d4259c0e6d852 100644 --- a/src/plugins/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview_header.tsx +++ b/src/plugins/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview_header.tsx @@ -81,9 +81,14 @@ export function LogsOverviewHeader({ doc }: { doc: LogDocumentOverview }) { {logLevelAndTimestamp} - - {value} - + ); diff --git a/test/functional/apps/discover/context_awareness/extensions/_get_cell_renderers.ts b/test/functional/apps/discover/context_awareness/extensions/_get_cell_renderers.ts index a1e884a82cb4f..cb66afc7ebc57 100644 --- a/test/functional/apps/discover/context_awareness/extensions/_get_cell_renderers.ts +++ b/test/functional/apps/discover/context_awareness/extensions/_get_cell_renderers.ts @@ -85,6 +85,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); }); + describe('Service Name Cell', () => { it('should render service.name cell', async () => { const state = kbnRison.encode({ @@ -133,6 +134,40 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); }); + + describe('Summary column', () => { + it('should render a summary of the log entry replacing the original document', async () => { + const state = kbnRison.encode({ + dataSource: { type: 'esql' }, + query: { + esql: 'from my-example-logs,logstash* | sort @timestamp desc | where `message` is not null', + }, + }); + await common.navigateToActualUrl('discover', `?_a=${state}`, { + ensureCurrentUrl: false, + }); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + + await testSubjects.existOrFail('discoverDataTableMessageValue'); + }); + + it('should NOT render the summary column if the source does not match logs', async () => { + const state = kbnRison.encode({ + dataSource: { type: 'esql' }, + query: { + esql: 'from my-example-*', + }, + }); + await common.navigateToActualUrl('discover', `?_a=${state}`, { + ensureCurrentUrl: false, + }); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + + await testSubjects.missingOrFail('discoverDataTableMessageValue'); + }); + }); }); describe('data view mode', () => { @@ -278,6 +313,34 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); }); + + describe('Summary column', () => { + it('should render a summary of the log entry replacing the original document', async () => { + await common.navigateToActualUrl('discover', undefined, { + ensureCurrentUrl: false, + }); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await dataViews.switchToAndValidate('my-example-logs,logstash*'); + + await retry.try(async () => { + await testSubjects.existOrFail('discoverDataTableMessageValue'); + }); + }); + + it('should NOT render the summary column if the source does not match logs', async () => { + await common.navigateToActualUrl('discover', undefined, { + ensureCurrentUrl: false, + }); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await dataViews.switchToAndValidate('my-example-*'); + + await retry.try(async () => { + await testSubjects.missingOrFail('discoverDataTableMessageValue'); + }); + }); + }); }); }); } diff --git a/test/functional/apps/discover/context_awareness/extensions/_get_default_app_state.ts b/test/functional/apps/discover/context_awareness/extensions/_get_default_app_state.ts index 6ed126bad8c7e..7e7a12840f76d 100644 --- a/test/functional/apps/discover/context_awareness/extensions/_get_default_app_state.ts +++ b/test/functional/apps/discover/context_awareness/extensions/_get_default_app_state.ts @@ -69,7 +69,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await expectColumns(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Summary']); await dataGrid.clickGridSettings(); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -99,7 +99,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await discover.waitUntilSearchingHasFinished(); await unifiedFieldList.clickFieldListItemRemove('log.level'); await unifiedFieldList.clickFieldListItemRemove('message'); - await expectColumns(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Summary']); await dataGrid.clickGridSettings(); await dataGrid.changeRowHeightValue('Single'); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); @@ -153,7 +153,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await header.waitUntilLoadingHasFinished(); await discover.waitUntilSearchingHasFinished(); await dataViews.switchToAndValidate('my-example-*'); - await expectColumns(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Summary']); await dataGrid.clickGridSettings(); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -178,7 +178,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await discover.waitUntilSearchingHasFinished(); await unifiedFieldList.clickFieldListItemRemove('log.level'); await unifiedFieldList.clickFieldListItemRemove('message'); - await expectColumns(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Summary']); await dataGrid.clickGridSettings(); await dataGrid.changeRowHeightValue('Single'); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); diff --git a/test/functional/apps/discover/esql/_esql_columns.ts b/test/functional/apps/discover/esql/_esql_columns.ts index 2eba53aaab806..59c4b8b816664 100644 --- a/test/functional/apps/discover/esql/_esql_columns.ts +++ b/test/functional/apps/discover/esql/_esql_columns.ts @@ -57,7 +57,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render initial columns for non-transformational commands correctly', async () => { - const columns = ['@timestamp', 'Document']; + const columns = ['@timestamp', 'Summary']; expect(await dataGrid.getHeaderFields()).to.eql(columns); await browser.refresh(); @@ -91,7 +91,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should reset columns only if index pattern changes in non-transformational query', async () => { - const columns = ['@timestamp', 'Document']; + const columns = ['@timestamp', 'Summary']; expect(await dataGrid.getHeaderFields()).to.eql(columns); await monacoEditor.setCodeEditorValue('from logstash-* | limit 500'); @@ -219,7 +219,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await discover.loadSavedSearch(SAVED_SEARCH_NON_TRANSFORMATIONAL_INITIAL_COLUMNS); await header.waitUntilLoadingHasFinished(); await discover.waitUntilSearchingHasFinished(); - expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); + expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Summary']); await discover.loadSavedSearch(SAVED_SEARCH_NON_TRANSFORMATIONAL_CUSTOM_COLUMNS); await header.waitUntilLoadingHasFinished(); @@ -239,7 +239,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await discover.clickNewSearchButton(); await header.waitUntilLoadingHasFinished(); await discover.waitUntilSearchingHasFinished(); - expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); + expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Summary']); }); }); } diff --git a/test/functional/apps/discover/group2_data_grid1/_data_grid.ts b/test/functional/apps/discover/group2_data_grid1/_data_grid.ts index 90cf9067cd852..0891482f306ed 100644 --- a/test/functional/apps/discover/group2_data_grid1/_data_grid.ts +++ b/test/functional/apps/discover/group2_data_grid1/_data_grid.ts @@ -39,7 +39,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const getTitles = async () => (await testSubjects.getVisibleText('dataGridHeader')).replace(/\s|\r?\n|\r/g, ' '); - expect(await getTitles()).to.be('@timestamp Document'); + expect(await getTitles()).to.be('@timestamp Summary'); await unifiedFieldList.clickFieldListItemAdd('bytes'); expect(await getTitles()).to.be('@timestamp bytes'); @@ -51,7 +51,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await getTitles()).to.be('@timestamp agent'); await unifiedFieldList.clickFieldListItemRemove('agent'); - expect(await getTitles()).to.be('@timestamp Document'); + expect(await getTitles()).to.be('@timestamp Summary'); }); const isVisible = async (selector: string) => { diff --git a/test/functional/apps/discover/group2_data_grid1/_data_grid_copy_to_clipboard.ts b/test/functional/apps/discover/group2_data_grid1/_data_grid_copy_to_clipboard.ts index a58dcf94e3a4a..e0378a9fbf6c4 100644 --- a/test/functional/apps/discover/group2_data_grid1/_data_grid_copy_to_clipboard.ts +++ b/test/functional/apps/discover/group2_data_grid1/_data_grid_copy_to_clipboard.ts @@ -65,7 +65,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { if (canReadClipboard) { const copiedSourceData = await browser.getClipboardValue(); - expect(copiedSourceData.startsWith('Document\n{"@message":["238.171.34.42')).to.be(true); + expect(copiedSourceData.startsWith('Summary\n{"@message":["238.171.34.42')).to.be(true); expect(copiedSourceData.endsWith('}')).to.be(true); } @@ -90,7 +90,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { if (canReadClipboard) { const copiedSourceName = await browser.getClipboardValue(); - expect(copiedSourceName).to.be('Document'); + expect(copiedSourceName).to.be('Summary'); } expect(await toasts.getCount()).to.be(1); diff --git a/test/functional/apps/discover/group2_data_grid2/_data_grid_field_data.ts b/test/functional/apps/discover/group2_data_grid2/_data_grid_field_data.ts index 9f826f9a75ee5..60fdb106f3bc0 100644 --- a/test/functional/apps/discover/group2_data_grid2/_data_grid_field_data.ts +++ b/test/functional/apps/discover/group2_data_grid2/_data_grid_field_data.ts @@ -67,7 +67,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('doc view should show @timestamp and _source columns', async function () { - const expectedHeader = '@timestamp Document'; + const expectedHeader = '@timestamp Summary'; const DocHeader = await dataGrid.getHeaderFields(); expect(DocHeader.join(' ')).to.be(expectedHeader); }); diff --git a/test/functional/apps/discover/group3/_drag_drop.ts b/test/functional/apps/discover/group3/_drag_drop.ts index b6ea2186c0ce2..07d23ab28c2ea 100644 --- a/test/functional/apps/discover/group3/_drag_drop.ts +++ b/test/functional/apps/discover/group3/_drag_drop.ts @@ -51,7 +51,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '48 available fields. 5 empty fields. 4 meta fields.' ); - expect((await discover.getColumnHeaders()).join(', ')).to.be('@timestamp, Document'); + expect((await discover.getColumnHeaders()).join(', ')).to.be('@timestamp, Summary'); await discover.dragFieldToTable('extension'); @@ -71,7 +71,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '48 available fields. 5 empty fields. 4 meta fields.' ); - expect((await discover.getColumnHeaders()).join(', ')).to.be('@timestamp, Document'); + expect((await discover.getColumnHeaders()).join(', ')).to.be('@timestamp, Summary'); await discover.dragFieldWithKeyboardToTable('@message'); diff --git a/test/functional/apps/discover/group4/_discover_fields_api.ts b/test/functional/apps/discover/group4/_discover_fields_api.ts index dd10c4020a87d..1706da0ab3c79 100644 --- a/test/functional/apps/discover/group4/_discover_fields_api.ts +++ b/test/functional/apps/discover/group4/_discover_fields_api.ts @@ -46,7 +46,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should correctly display documents', async function () { log.debug('check if Document title exists in the grid'); - expect(await discover.getDocHeader()).to.have.string('Document'); + expect(await discover.getDocHeader()).to.have.string('Summary'); const rowData = await discover.getDocTableIndex(1); log.debug('check the newest doc timestamp in UTC (check diff timezone in last test)'); expect(rowData.startsWith('Sep 22, 2015 @ 23:50:13.253')).to.be.ok(); @@ -59,13 +59,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('adding a column removes a default column', async function () { await unifiedFieldList.clickFieldListItemAdd('_score'); expect(await discover.getDocHeader()).to.have.string('_score'); - expect(await discover.getDocHeader()).not.to.have.string('Document'); + expect(await discover.getDocHeader()).not.to.have.string('Summary'); }); it('removing a column adds a default column', async function () { await unifiedFieldList.clickFieldListItemRemove('_score'); expect(await discover.getDocHeader()).not.to.have.string('_score'); - expect(await discover.getDocHeader()).to.have.string('Document'); + expect(await discover.getDocHeader()).to.have.string('Summary'); }); it('displays _source viewer in doc viewer', async function () { @@ -83,7 +83,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await common.navigateToApp('discover'); await timePicker.setDefaultAbsoluteRange(); - expect(await discover.getDocHeader()).to.have.string('Document'); + expect(await discover.getDocHeader()).to.have.string('Summary'); }); it('switches to Document column when fields API is used', async function () { @@ -94,7 +94,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await common.navigateToApp('discover'); await timePicker.setDefaultAbsoluteRange(); - expect(await discover.getDocHeader()).to.have.string('Document'); + expect(await discover.getDocHeader()).to.have.string('Summary'); }); }); } diff --git a/test/functional/apps/discover/group5/_field_data_with_fields_api.ts b/test/functional/apps/discover/group5/_field_data_with_fields_api.ts index 4b301c3d5e946..4b9a225eb471f 100644 --- a/test/functional/apps/discover/group5/_field_data_with_fields_api.ts +++ b/test/functional/apps/discover/group5/_field_data_with_fields_api.ts @@ -68,10 +68,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - it('doc view should show @timestamp and Document columns', async function () { + it('doc view should show @timestamp and Summary columns', async function () { const Docheader = await discover.getDocHeader(); expect(Docheader).to.contain('@timestamp'); - expect(Docheader).to.contain('Document'); + expect(Docheader).to.contain('Summary'); }); it('a bad syntax query should show an error message', async function () { diff --git a/test/functional/apps/discover/group5/_source_filters.ts b/test/functional/apps/discover/group5/_source_filters.ts index 9c66cff8f0df3..c74aa38628e7f 100644 --- a/test/functional/apps/discover/group5/_source_filters.ts +++ b/test/functional/apps/discover/group5/_source_filters.ts @@ -46,7 +46,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await discover.waitUntilSearchingHasFinished(); await retry.try(async function () { - expect(await discover.getDocHeader()).to.have.string('Document'); + expect(await discover.getDocHeader()).to.have.string('Summary'); }); }); diff --git a/test/functional/apps/discover/group6/_sidebar.ts b/test/functional/apps/discover/group6/_sidebar.ts index 51066cd3c04e0..a88623bb58d12 100644 --- a/test/functional/apps/discover/group6/_sidebar.ts +++ b/test/functional/apps/discover/group6/_sidebar.ts @@ -806,7 +806,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { let selectedFields = await unifiedFieldList.getSidebarSectionFieldNames('selected'); expect(selectedFields.includes(newField)).to.be(false); - expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); + expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Summary']); await unifiedFieldList.clickFieldListItemAdd(newField); await header.waitUntilLoadingHasFinished(); @@ -824,7 +824,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return !(await unifiedFieldList.getAllFieldNames()).includes(newField); }); - expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); + expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Summary']); }); }); }); diff --git a/test/functional/apps/discover/group6/_time_field_column.ts b/test/functional/apps/discover/group6/_time_field_column.ts index 7e058a71eac0b..93b72ddcf3676 100644 --- a/test/functional/apps/discover/group6/_time_field_column.ts +++ b/test/functional/apps/discover/group6/_time_field_column.ts @@ -67,7 +67,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }) { // check in Discover expect(await dataGrid.getHeaderFields()).to.eql( - hideTimeFieldColumnSetting || !hasTimeField ? ['Document'] : ['@timestamp', 'Document'] + hideTimeFieldColumnSetting || !hasTimeField ? ['Summary'] : ['@timestamp', 'Summary'] ); await discover.saveSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}`); await discover.waitUntilSearchingHasFinished(); @@ -81,8 +81,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { !hasTimeField ? ['@timestamp'] : hideTimeFieldColumnSetting - ? ['Document'] // legacy behaviour - : ['@timestamp', 'Document'] // legacy behaviour + ? ['Summary'] // legacy behaviour + : ['@timestamp', 'Summary'] // legacy behaviour ); }); @@ -92,7 +92,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await unifiedFieldList.clickFieldListItemRemove('@timestamp'); await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql( - hideTimeFieldColumnSetting || !hasTimeField ? ['Document'] : ['@timestamp', 'Document'] + hideTimeFieldColumnSetting || !hasTimeField ? ['Summary'] : ['@timestamp', 'Summary'] ); }); } @@ -107,7 +107,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql( - hideTimeFieldColumnSetting || !hasTimeField ? ['Document'] : ['@timestamp', 'Document'] + hideTimeFieldColumnSetting || !hasTimeField ? ['Summary'] : ['@timestamp', 'Summary'] ); }); @@ -124,8 +124,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { !hasTimeField ? ['@timestamp'] : hideTimeFieldColumnSetting - ? ['Document'] // legacy behaviour - : ['@timestamp', 'Document'] // legacy behaviour + ? ['Summary'] // legacy behaviour + : ['@timestamp', 'Summary'] // legacy behaviour ); }); } @@ -338,22 +338,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await discover.loadSavedSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}`); await discover.waitUntilSearchingHasFinished(); expect(await docTable.getHeaderFields()).to.eql( - hideTimeFieldColumnSetting ? ['Document'] : ['@timestamp', 'Document'] + hideTimeFieldColumnSetting ? ['Summary'] : ['@timestamp', 'Summary'] ); await discover.loadSavedSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}-`); await discover.waitUntilSearchingHasFinished(); - expect(await docTable.getHeaderFields()).to.eql(['Document']); + expect(await docTable.getHeaderFields()).to.eql(['Summary']); await discover.loadSavedSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}ESQL`); await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql( - hideTimeFieldColumnSetting ? ['Document'] : ['@timestamp', 'Document'] + hideTimeFieldColumnSetting ? ['Summary'] : ['@timestamp', 'Summary'] ); await discover.loadSavedSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}ESQLdrop`); await discover.waitUntilSearchingHasFinished(); - expect(await dataGrid.getHeaderFields()).to.eql(['Document']); + expect(await dataGrid.getHeaderFields()).to.eql(['Summary']); // only @timestamp is selected await discover.loadSavedSearch(`${SEARCH_WITH_ONLY_TIMESTAMP}${savedSearchSuffix}`); @@ -369,7 +369,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await discover.loadSavedSearch(`${SEARCH_WITH_ONLY_TIMESTAMP}${savedSearchSuffix}ESQL`); await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql( - hideTimeFieldColumnSetting ? ['@timestamp'] : ['@timestamp', 'Document'] + hideTimeFieldColumnSetting ? ['@timestamp'] : ['@timestamp', 'Summary'] ); }); diff --git a/x-pack/plugins/observability_solution/logs_explorer/common/constants.ts b/x-pack/plugins/observability_solution/logs_explorer/common/constants.ts index 54ef1b50c587c..7054d8b49fbe1 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/common/constants.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/common/constants.ts @@ -40,7 +40,16 @@ export const SMART_FALLBACK_FIELDS = { }; // UI preferences -export const DEFAULT_COLUMNS = [RESOURCE_FIELD_CONFIGURATION, CONTENT_FIELD_CONFIGURATION]; +export const DEFAULT_COLUMNS = [ + /** + * We are switching from these virtual columns to the One Discover Summary column. + * In this effort we don't want to immediately cleanup everything about these virtual columns, + * but only disable their instantiation. + * We'll clean this part as soon as we decide to definitevely discard these columns. + **/ + // RESOURCE_FIELD_CONFIGURATION, + // CONTENT_FIELD_CONFIGURATION +]; export const DEFAULT_ROWS_PER_PAGE = 100; // List of prefixes which needs to be filtered out for Display in Content Column diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/logs_explorer_profile.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/logs_explorer_profile.tsx index 557cbe4dd2728..19d0f539be6ce 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/logs_explorer_profile.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/logs_explorer_profile.tsx @@ -89,7 +89,13 @@ export const createLogsExplorerProfileCustomizations = customizations.set({ id: 'field_list', - logsFieldsEnabled: true, + /** + * We are switching from these virtual columns to the One Discover Summary column. + * In this effort we don't want to immediately cleanup everything about these virtual columns, + * but only disable their instantiation. + * We'll clean this part as soon as we decide to definitevely discard these columns. + **/ + logsFieldsEnabled: false, }); // Fix bug where filtering on histogram does not work diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/hooks/use_virtual_column_services.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/hooks/use_virtual_column_services.tsx deleted file mode 100644 index 84963c166b77c..0000000000000 --- a/x-pack/plugins/observability_solution/logs_explorer/public/hooks/use_virtual_column_services.tsx +++ /dev/null @@ -1,21 +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 createContainer from 'constate'; -import type { DataView } from '@kbn/data-views-plugin/common'; -import { LogsExplorerDiscoverServices } from '../controller'; - -export interface UseVirtualColumnServices { - services: { - data: LogsExplorerDiscoverServices['data']; - dataView: DataView; - }; -} - -const useVirtualColumns = ({ services }: UseVirtualColumnServices) => services; - -export const [VirtualColumnServiceProvider, useVirtualColumnServiceContext] = - createContainer(useVirtualColumns); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 4dd7938aeee0e..f012f3cdf627e 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -2526,7 +2526,6 @@ "discover.logs.flyoutDetail.value.hover.filterForFieldPresent": "Filtrer sur le champ", "discover.logs.flyoutDetail.value.hover.filterOut": "Exclure cette {value}", "discover.logs.flyoutDetail.value.hover.toggleColumn": "Afficher/Masquer la colonne dans le tableau", - "discover.logs.grid.closePopover": "Fermer la fenêtre contextuelle", "discover.logs.popoverAction.closePopover": "Fermer la fenêtre contextuelle", "discover.logs.popoverAction.copyValue": "Copier la valeur", "discover.logs.popoverAction.copyValueAriaText": "Copier la valeur de {fieldName}", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 14827bdf3b7d1..71e2496a7d526 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2525,7 +2525,6 @@ "discover.logs.flyoutDetail.value.hover.filterForFieldPresent": "フィールド表示のフィルター", "discover.logs.flyoutDetail.value.hover.filterOut": "この{value}を除外", "discover.logs.flyoutDetail.value.hover.toggleColumn": "表の列を切り替える", - "discover.logs.grid.closePopover": "ポップオーバーを閉じる", "discover.logs.popoverAction.closePopover": "ポップオーバーを閉じる", "discover.logs.popoverAction.copyValue": "値をコピー", "discover.logs.popoverAction.copyValueAriaText": "{fieldName}の値をコピー", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 116a07f28c787..272cc11bfa08b 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2527,7 +2527,6 @@ "discover.logs.flyoutDetail.value.hover.filterForFieldPresent": "筛留存在的字段", "discover.logs.flyoutDetail.value.hover.filterOut": "筛除此 {value}", "discover.logs.flyoutDetail.value.hover.toggleColumn": "在表中切换列", - "discover.logs.grid.closePopover": "关闭弹出框", "discover.logs.popoverAction.closePopover": "关闭弹出框", "discover.logs.popoverAction.copyValue": "复制值", "discover.logs.popoverAction.copyValueAriaText": "复制 {fieldName} 的值", diff --git a/x-pack/test/functional/apps/observability_logs_explorer/columns_selection.ts b/x-pack/test/functional/apps/observability_logs_explorer/columns_selection.ts index 1308492044f67..295c06682af30 100644 --- a/x-pack/test/functional/apps/observability_logs_explorer/columns_selection.ts +++ b/x-pack/test/functional/apps/observability_logs_explorer/columns_selection.ts @@ -9,7 +9,7 @@ import moment from 'moment/moment'; import { log, timerange } from '@kbn/apm-synthtrace-client'; import { FtrProviderContext } from './config'; -const defaultLogColumns = ['@timestamp', 'resource', 'content']; +const defaultLogColumns = ['@timestamp', 'Summary']; export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); @@ -57,32 +57,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { to, mode: 'absolute', }, - columns: [ - { - smartField: 'resource', - type: 'smart-field', - fallbackFields: ['host.name', 'service.name'], - }, - { - smartField: 'content', - type: 'smart-field', - fallbackFields: ['message'], - }, - { field: 'data_stream.namespace', type: 'document-field' }, - ], + columns: [{ field: 'data_stream.namespace', type: 'document-field' }], }, }); await retry.tryForTime(TEST_TIMEOUT, async () => { expect(await PageObjects.discover.getColumnHeaders()).to.eql([ - ...defaultLogColumns, + '@timestamp', 'data_stream.namespace', ]); }); }); }); - describe('render content virtual column properly', () => { + describe.skip('render content virtual column properly', () => { it('should render log level and log message when present', async () => { await retry.tryForTime(TEST_TIMEOUT, async () => { const cellElement = await dataGrid.getCellElementExcludingControlColumns(0, 2); @@ -151,7 +139,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - describe('render resource virtual column properly', () => { + describe.skip('render resource virtual column properly', () => { it('should render service name and host name when present', async () => { await retry.tryForTime(TEST_TIMEOUT, async () => { const cellElement = await dataGrid.getCellElementExcludingControlColumns(0, 1); @@ -162,7 +150,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - describe('virtual column cell actions', () => { + describe.skip('virtual column cell actions', () => { beforeEach(async () => { await navigateToLogsExplorer(); }); @@ -224,7 +212,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.tryForTime(TEST_TIMEOUT, async () => { const cellElement = await dataGrid.getCellElementExcludingControlColumns(0, 1); const serviceNameChip = await cellElement.findByTestSubject( - 'dataTablePopoverChip_service.name' + 'dataTableCellActionsPopover_service.name' ); const actionSelector = 'dataTableCellAction_addToFilterAction_service.name'; @@ -238,7 +226,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await filterInButton.click(); const rowWithLogLevelInfo = await testSubjects.findAll( - 'dataTablePopoverChip_service.name' + 'dataTableCellActionsPopover_service.name' ); expect(rowWithLogLevelInfo.length).to.be(2); diff --git a/x-pack/test/functional/apps/observability_logs_explorer/field_list.ts b/x-pack/test/functional/apps/observability_logs_explorer/field_list.ts index 9c593a03ac4db..977c951b2fd02 100644 --- a/x-pack/test/functional/apps/observability_logs_explorer/field_list.ts +++ b/x-pack/test/functional/apps/observability_logs_explorer/field_list.ts @@ -28,7 +28,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }, }); - describe('When virtual columns loads', () => { + describe.skip('When virtual columns loads', () => { before(async () => { await synthtrace.index(generateLogsData({ from, to })); await navigateToLogsExplorer(); diff --git a/x-pack/test/functional/apps/observability_logs_explorer/header_menu.ts b/x-pack/test/functional/apps/observability_logs_explorer/header_menu.ts index 71b5d77964b23..feb2df2b6e40e 100644 --- a/x-pack/test/functional/apps/observability_logs_explorer/header_menu.ts +++ b/x-pack/test/functional/apps/observability_logs_explorer/header_menu.ts @@ -66,12 +66,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataViews.waitForSwitcherToBe('All logs'); await retry.try(async () => { - expect(await PageObjects.discover.getColumnHeaders()).to.eql([ - '@timestamp', - 'host.name', - 'service.name', - 'message', - ]); + expect(await PageObjects.discover.getColumnHeaders()).to.eql(['@timestamp', 'Summary']); }); await retry.try(async () => { diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_cell_renderers.ts b/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_cell_renderers.ts index 3816f61e83f05..0cf8aeedd257a 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_cell_renderers.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_cell_renderers.ts @@ -85,6 +85,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); }); + describe('Service Name Cell', () => { it('should render service.name cell', async () => { const state = kbnRison.encode({ @@ -133,6 +134,40 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); }); + + describe('Summary column', () => { + it('should render a summary of the log entry replacing the original document', async () => { + const state = kbnRison.encode({ + dataSource: { type: 'esql' }, + query: { + esql: 'from my-example-logs,logstash* | sort @timestamp desc | where `message` is not null', + }, + }); + await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + ensureCurrentUrl: false, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await testSubjects.existOrFail('discoverDataTableMessageValue'); + }); + + it('should NOT render the summary column if the source does not match logs', async () => { + const state = kbnRison.encode({ + dataSource: { type: 'esql' }, + query: { + esql: 'from my-example-*', + }, + }); + await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + ensureCurrentUrl: false, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await testSubjects.missingOrFail('discoverDataTableMessageValue'); + }); + }); }); describe('data view mode', () => { @@ -277,6 +312,34 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); }); + + describe('Summary column', () => { + it('should render a summary of the log entry replacing the original document', async () => { + await PageObjects.common.navigateToActualUrl('discover', undefined, { + ensureCurrentUrl: false, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataViews.switchToAndValidate('my-example-logs,logstash*'); + + await retry.try(async () => { + await testSubjects.existOrFail('discoverDataTableMessageValue'); + }); + }); + + it('should NOT render the summary column if the source does not match logs', async () => { + await PageObjects.common.navigateToActualUrl('discover', undefined, { + ensureCurrentUrl: false, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataViews.switchToAndValidate('my-example-*'); + + await retry.try(async () => { + await testSubjects.missingOrFail('discoverDataTableMessageValue'); + }); + }); + }); }); }); } diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_default_app_state.ts b/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_default_app_state.ts index 0aa58e85056ba..5867eb528bf8a 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_default_app_state.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_default_app_state.ts @@ -72,7 +72,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await expectColumns(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Summary']); await dataGrid.clickGridSettings(); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -102,7 +102,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.unifiedFieldList.clickFieldListItemRemove('log.level'); await PageObjects.unifiedFieldList.clickFieldListItemRemove('message'); - await expectColumns(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Summary']); await dataGrid.clickGridSettings(); await dataGrid.changeRowHeightValue('Single'); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); @@ -156,7 +156,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.discover.waitUntilSearchingHasFinished(); await dataViews.switchToAndValidate('my-example-*'); - await expectColumns(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Summary']); await dataGrid.clickGridSettings(); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -182,7 +182,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.unifiedFieldList.clickFieldListItemRemove('log.level'); await PageObjects.unifiedFieldList.clickFieldListItemRemove('message'); - await expectColumns(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Summary']); await dataGrid.clickGridSettings(); await dataGrid.changeRowHeightValue('Single'); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/group6/_sidebar.ts b/x-pack/test_serverless/functional/test_suites/common/discover/group6/_sidebar.ts index 5c8fd77347abd..c6ecd1386cbe9 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/group6/_sidebar.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/group6/_sidebar.ts @@ -726,7 +726,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'selected' ); expect(selectedFields.includes(newField)).to.be(false); - expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); + expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Summary']); await PageObjects.unifiedFieldList.clickFieldListItemAdd(newField); await PageObjects.header.waitUntilLoadingHasFinished(); @@ -744,7 +744,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return !(await PageObjects.unifiedFieldList.getAllFieldNames()).includes(newField); }); - expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); + expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Summary']); }); }); }); diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/columns_selection.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/columns_selection.ts index c019b06b588b0..1668cc0478b1c 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/columns_selection.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/columns_selection.ts @@ -9,7 +9,7 @@ import { log, timerange } from '@kbn/apm-synthtrace-client'; import moment from 'moment'; import { FtrProviderContext } from '../../../ftr_provider_context'; -const defaultLogColumns = ['@timestamp', 'resource', 'content']; +const defaultLogColumns = ['@timestamp', 'Summary']; export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); @@ -58,32 +58,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { to, mode: 'absolute', }, - columns: [ - { - smartField: 'resource', - type: 'smart-field', - fallbackFields: ['host.name', 'service.name'], - }, - { - smartField: 'content', - type: 'smart-field', - fallbackFields: ['message'], - }, - { field: 'data_stream.namespace', type: 'document-field' }, - ], + columns: [{ field: 'data_stream.namespace', type: 'document-field' }], }, }); await retry.tryForTime(TEST_TIMEOUT, async () => { expect(await PageObjects.discover.getColumnHeaders()).to.eql([ - ...defaultLogColumns, + '@timestamp', 'data_stream.namespace', ]); }); }); }); - describe('render content virtual column properly', () => { + describe.skip('render content virtual column properly', () => { it('should render log level and log message when present', async () => { await retry.tryForTime(TEST_TIMEOUT, async () => { const cellElement = await dataGrid.getCellElementExcludingControlColumns(0, 2); @@ -152,7 +140,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - describe('render resource virtual column properly', () => { + describe.skip('render resource virtual column properly', () => { it('should render service name and host name when present', async () => { await retry.tryForTime(TEST_TIMEOUT, async () => { const cellElement = await dataGrid.getCellElementExcludingControlColumns(0, 1); @@ -163,7 +151,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - describe('virtual column cell actions', () => { + describe.skip('virtual column cell actions', () => { beforeEach(async () => { await navigateToLogsExplorer(); }); @@ -225,7 +213,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.tryForTime(TEST_TIMEOUT, async () => { const cellElement = await dataGrid.getCellElementExcludingControlColumns(0, 1); const serviceNameChip = await cellElement.findByTestSubject( - 'dataTablePopoverChip_service.name' + 'dataTableCellActionsPopover_service.name' ); const actionSelector = 'dataTableCellAction_addToFilterAction_service.name'; @@ -239,7 +227,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await filterInButton.click(); const rowWithLogLevelInfo = await testSubjects.findAll( - 'dataTablePopoverChip_service.name' + 'dataTableCellActionsPopover_service.name' ); expect(rowWithLogLevelInfo.length).to.be(2); diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/field_list.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/field_list.ts index 858139757dc65..547ce7c86339c 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/field_list.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/field_list.ts @@ -32,7 +32,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }, }); - describe('When virtual columns loads', () => { + describe.skip('When virtual columns loads', () => { before(async () => { await synthtrace.index(generateLogsData({ from, to })); await PageObjects.svlCommonPage.loginWithPrivilegedRole(); diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/header_menu.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/header_menu.ts index efdd818b0f71d..b9d514cd0b79d 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/header_menu.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/header_menu.ts @@ -88,12 +88,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataViews.waitForSwitcherToBe('All logs'); await retry.try(async () => { - expect(await PageObjects.discover.getColumnHeaders()).to.eql([ - '@timestamp', - 'host.name', - 'service.name', - 'message', - ]); + expect(await PageObjects.discover.getColumnHeaders()).to.eql(['@timestamp', 'Summary']); }); await retry.try(async () => { expect(await PageObjects.timePicker.getTimeConfig()).to.eql(timeConfig); From 5849c86e8d4303415f9d7b8115d3efdaa965deb9 Mon Sep 17 00:00:00 2001 From: Ido Cohen <90558359+CohenIdo@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:08:49 +0300 Subject: [PATCH 09/60] [Cloud Security] UI counter telemetry --- .../index.ts | 1 + .../tsconfig.json | 2 + .../utils/ui_metrics.ts | 57 +++++++++++++++++++ .../use_cloud_security_grouping.ts | 6 ++ .../components/detection_rule_counter.tsx | 6 ++ .../public/components/take_action.tsx | 10 +++- .../latest_findings/latest_findings_table.tsx | 7 ++- .../public/pages/rules/rules_table.tsx | 6 ++ .../vulnerability_overview_tab.tsx | 8 +++ .../cloud_security_posture/public/plugin.tsx | 4 ++ .../cloud_security_posture/tsconfig.json | 3 +- ...isconfiguration_findings_details_table.tsx | 14 +++++ .../entity_details_flyout/index.tsx | 31 ++++++---- .../security_solution/public/plugin.tsx | 4 ++ 14 files changed, 145 insertions(+), 14 deletions(-) create mode 100644 x-pack/packages/kbn-cloud-security-posture-common/utils/ui_metrics.ts diff --git a/x-pack/packages/kbn-cloud-security-posture-common/index.ts b/x-pack/packages/kbn-cloud-security-posture-common/index.ts index 4cb5a8d6e1bd8..dc4e930f537e6 100644 --- a/x-pack/packages/kbn-cloud-security-posture-common/index.ts +++ b/x-pack/packages/kbn-cloud-security-posture-common/index.ts @@ -27,3 +27,4 @@ export { buildEntityFlyoutPreviewQuery, } from './utils/helpers'; export { getAbbreviatedNumber } from './utils/get_abbreviated_number'; +export { UiMetricService } from './utils/ui_metrics'; diff --git a/x-pack/packages/kbn-cloud-security-posture-common/tsconfig.json b/x-pack/packages/kbn-cloud-security-posture-common/tsconfig.json index 17961df586258..c6bdf82c1d223 100644 --- a/x-pack/packages/kbn-cloud-security-posture-common/tsconfig.json +++ b/x-pack/packages/kbn-cloud-security-posture-common/tsconfig.json @@ -18,5 +18,7 @@ "@kbn/config-schema", "@kbn/data-views-plugin", "@kbn/i18n", + "@kbn/analytics", + "@kbn/usage-collection-plugin", ] } diff --git a/x-pack/packages/kbn-cloud-security-posture-common/utils/ui_metrics.ts b/x-pack/packages/kbn-cloud-security-posture-common/utils/ui_metrics.ts new file mode 100644 index 0000000000000..9ea12ef7ed45f --- /dev/null +++ b/x-pack/packages/kbn-cloud-security-posture-common/utils/ui_metrics.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { UiCounterMetricType } from '@kbn/analytics'; +import type { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; + +export const APP_NAME = 'cloud-security'; + +export const ENTITY_FLYOUT_MISCONFIGURATION_VIEW_VISITS = + 'entity-flyout-misconfiguration-view-visits'; +export const NAV_TO_FINDINGS_BY_HOST_NAME_FRPOM_ENTITY_FLYOUT = + 'nav-to-findings-by-host-name-from-entity-flyout'; +export const NAV_TO_FINDINGS_BY_RULE_NAME_FRPOM_ENTITY_FLYOUT = + 'nav-to-findings-by-rule-name-from-entity-flyout'; +export const CREATE_DETECTION_RULE_FROM_FLYOUT = 'create-detection-rule-from-flyout'; +export const CREATE_DETECTION_FROM_TABLE_ROW_ACTION = 'create-detection-from-table-row-action'; +export const VULNERABILITIES_FLYOUT_VISITS = 'vulnerabilities-flyout-visits'; +export const OPEN_FINDINGS_FLYOUT = 'open-findings-flyout'; +export const GROUP_BY_CLICK = 'group-by-click'; +export const CHANGE_RULE_STATE = 'change-rule-state'; + +type CloudSecurityUiCounters = + | typeof ENTITY_FLYOUT_MISCONFIGURATION_VIEW_VISITS + | typeof NAV_TO_FINDINGS_BY_HOST_NAME_FRPOM_ENTITY_FLYOUT + | typeof VULNERABILITIES_FLYOUT_VISITS + | typeof NAV_TO_FINDINGS_BY_RULE_NAME_FRPOM_ENTITY_FLYOUT + | typeof OPEN_FINDINGS_FLYOUT + | typeof CREATE_DETECTION_RULE_FROM_FLYOUT + | typeof CREATE_DETECTION_FROM_TABLE_ROW_ACTION + | typeof GROUP_BY_CLICK + | typeof CHANGE_RULE_STATE; + +export class UiMetricService { + private usageCollection: UsageCollectionSetup | undefined; + + public setup(usageCollection: UsageCollectionSetup) { + this.usageCollection = usageCollection; + } + + private track(metricType: UiCounterMetricType, eventName: CloudSecurityUiCounters) { + if (!this.usageCollection) { + // Usage collection might be disabled in Kibana config. + return; + } + return this.usageCollection.reportUiCounter(APP_NAME, metricType, eventName); + } + + public trackUiMetric(metricType: UiCounterMetricType, eventName: CloudSecurityUiCounters) { + return this.track(metricType, eventName); + } +} + +export const uiMetricService = new UiMetricService(); diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_grouping/use_cloud_security_grouping.ts b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_grouping/use_cloud_security_grouping.ts index e480233f376fa..026ec612ea115 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_grouping/use_cloud_security_grouping.ts +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_grouping/use_cloud_security_grouping.ts @@ -9,6 +9,11 @@ import { isNoneGroup, useGrouping } from '@kbn/grouping'; import * as uuid from 'uuid'; import type { DataView } from '@kbn/data-views-plugin/common'; import { GroupOption, GroupPanelRenderer, GetGroupStats } from '@kbn/grouping/src'; +import { + GROUP_BY_CLICK, + uiMetricService, +} from '@kbn/cloud-security-posture-common/utils/ui_metrics'; +import { METRIC_TYPE } from '@kbn/analytics'; import { useUrlQuery } from '../../common/hooks/use_url_query'; @@ -73,6 +78,7 @@ export const useCloudSecurityGrouping = ({ setUrlQuery({ groupBy: groupByFields, }); + uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, GROUP_BY_CLICK); }, }); diff --git a/x-pack/plugins/cloud_security_posture/public/components/detection_rule_counter.tsx b/x-pack/plugins/cloud_security_posture/public/components/detection_rule_counter.tsx index 5465c144b6772..01309ce334d3c 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/detection_rule_counter.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/detection_rule_counter.tsx @@ -9,6 +9,11 @@ import React, { useCallback, useState } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiLink, EuiLoadingSpinner, EuiSkeletonText, EuiText } from '@elastic/eui'; import type { HttpSetup } from '@kbn/core/public'; +import { + CREATE_DETECTION_RULE_FROM_FLYOUT, + uiMetricService, +} from '@kbn/cloud-security-posture-common/utils/ui_metrics'; +import { METRIC_TYPE } from '@kbn/analytics'; import { useHistory } from 'react-router-dom'; import useSessionStorage from 'react-use/lib/useSessionStorage'; import { useQueryClient } from '@tanstack/react-query'; @@ -62,6 +67,7 @@ export const DetectionRuleCounter = ({ tags, createRuleFn }: DetectionRuleCounte }, [history]); const createDetectionRuleOnClick = useCallback(async () => { + uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, CREATE_DETECTION_RULE_FROM_FLYOUT); const startServices = { analytics, notifications, i18n, theme }; setIsCreateRuleLoading(true); const ruleResponse = await createRuleFn(http); diff --git a/x-pack/plugins/cloud_security_posture/public/components/take_action.tsx b/x-pack/plugins/cloud_security_posture/public/components/take_action.tsx index 5db9482c8b41a..8c7bcb5886d8d 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/take_action.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/take_action.tsx @@ -22,6 +22,11 @@ import type { HttpSetup } from '@kbn/core/public'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n as kbnI18n } from '@kbn/i18n'; import { QueryClient, useMutation, useQueryClient } from '@tanstack/react-query'; +import { + CREATE_DETECTION_FROM_TABLE_ROW_ACTION, + uiMetricService, +} from '@kbn/cloud-security-posture-common/utils/ui_metrics'; +import { METRIC_TYPE } from '@kbn/analytics'; import type { RuleResponse } from '../common/types'; import { CREATE_RULE_ACTION_SUBJ, TAKE_ACTION_SUBJ } from './test_subjects'; import { useKibana } from '../common/hooks/use_kibana'; @@ -239,7 +244,10 @@ const CreateDetectionRule = ({ mutate()} + onClick={() => { + mutate(); + uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, CREATE_DETECTION_FROM_TABLE_ROW_ACTION); + }} data-test-subj={CREATE_RULE_ACTION_SUBJ} > | undefined): CspFinding | un const flyoutComponent = (row: DataTableRecord, onCloseFlyout: () => void): JSX.Element => { const finding = row.raw._source; if (!finding || !isCspFinding(finding)) return <>; - + uiMetricService.trackUiMetric(METRIC_TYPE.COUNT, OPEN_FINDINGS_FLYOUT); return ; }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table.tsx index 54513283cec5c..a30e009c85198 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table.tsx @@ -19,6 +19,11 @@ import { EuiTableSortingType, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { METRIC_TYPE } from '@kbn/analytics'; +import { + CHANGE_RULE_STATE, + uiMetricService, +} from '@kbn/cloud-security-posture-common/utils/ui_metrics'; import { uniqBy } from 'lodash'; import { ColumnNameWithTooltip } from '../../components/column_name_with_tooltip'; import type { CspBenchmarkRulesWithStates, RulesState } from './rules_container'; @@ -281,6 +286,7 @@ const RuleStateSwitch = ({ rule }: { rule: CspBenchmarkRulesWithStates }) => { }; const changeCspRuleStateFn = async () => { if (rule?.metadata.benchmark.rule_number) { + uiMetricService.trackUiMetric(METRIC_TYPE.COUNT, CHANGE_RULE_STATE); mutateRulesStates({ newState: nextRuleState, ruleIds: [rulesObjectRequest], diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_finding_flyout/vulnerability_overview_tab.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_finding_flyout/vulnerability_overview_tab.tsx index e25bbbf6c3111..b050b374d692a 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_finding_flyout/vulnerability_overview_tab.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_finding_flyout/vulnerability_overview_tab.tsx @@ -23,6 +23,12 @@ import { VectorScoreBase, CspVulnerabilityFinding, } from '@kbn/cloud-security-posture-common/schema/vulnerabilities/latest'; +import { METRIC_TYPE } from '@kbn/analytics'; + +import { + VULNERABILITIES_FLYOUT_VISITS, + uiMetricService, +} from '@kbn/cloud-security-posture-common/utils/ui_metrics'; import { getDatasetDisplayName } from '../../../common/utils/get_dataset_display_name'; import { CspFlyoutMarkdown } from '../../configurations/findings_flyout/findings_flyout'; import { NvdLogo } from '../../../assets/icons/nvd_logo_svg'; @@ -218,6 +224,8 @@ const VulnerabilityOverviewTiles = ({ vulnerabilityRecord }: VulnerabilityTabPro export const VulnerabilityOverviewTab = ({ vulnerabilityRecord }: VulnerabilityTabProps) => { const { vulnerability } = vulnerabilityRecord; + uiMetricService.trackUiMetric(METRIC_TYPE.COUNT, VULNERABILITIES_FLYOUT_VISITS); + const emptyFixesMessageState = i18n.translate( 'xpack.csp.vulnerabilities.vulnerabilityOverviewTab.emptyFixesMessage', { diff --git a/x-pack/plugins/cloud_security_posture/public/plugin.tsx b/x-pack/plugins/cloud_security_posture/public/plugin.tsx index d07d930660ec6..b66e7a2b62f2e 100755 --- a/x-pack/plugins/cloud_security_posture/public/plugin.tsx +++ b/x-pack/plugins/cloud_security_posture/public/plugin.tsx @@ -10,6 +10,7 @@ import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; import type { CspClientPluginStartDeps } from '@kbn/cloud-security-posture'; +import { uiMetricService } from '@kbn/cloud-security-posture-common/utils/ui_metrics'; import { CspLoadingState } from './components/csp_loading_state'; import type { CspRouterProps } from './application/csp_router'; import type { CspClientPluginSetup, CspClientPluginStart, CspClientPluginSetupDeps } from './types'; @@ -47,6 +48,9 @@ export class CspPlugin plugins: CspClientPluginSetupDeps ): CspClientPluginSetup { this.isCloudEnabled = plugins.cloud.isCloudEnabled; + + if (plugins.usageCollection) uiMetricService.setup(plugins.usageCollection); + // Return methods that should be available to other plugins return {}; } diff --git a/x-pack/plugins/cloud_security_posture/tsconfig.json b/x-pack/plugins/cloud_security_posture/tsconfig.json index 4e43b6df2485e..501f9a560cdf6 100755 --- a/x-pack/plugins/cloud_security_posture/tsconfig.json +++ b/x-pack/plugins/cloud_security_posture/tsconfig.json @@ -64,7 +64,8 @@ "@kbn/react-kibana-mount", "@kbn/spaces-plugin", "@kbn/cloud-security-posture-common", - "@kbn/cloud-security-posture" + "@kbn/cloud-security-posture", + "@kbn/analytics" ], "exclude": ["target/**/*"] } diff --git a/x-pack/plugins/security_solution/public/cloud_security_posture/components/csp_details/misconfiguration_findings_details_table.tsx b/x-pack/plugins/security_solution/public/cloud_security_posture/components/csp_details/misconfiguration_findings_details_table.tsx index ba413709d6cca..a27f92407fbdd 100644 --- a/x-pack/plugins/security_solution/public/cloud_security_posture/components/csp_details/misconfiguration_findings_details_table.tsx +++ b/x-pack/plugins/security_solution/public/cloud_security_posture/components/csp_details/misconfiguration_findings_details_table.tsx @@ -17,6 +17,12 @@ import { DistributionBar } from '@kbn/security-solution-distribution-bar'; import { useNavigateFindings } from '@kbn/cloud-security-posture/src/hooks/use_navigate_findings'; import type { CspBenchmarkRuleMetadata } from '@kbn/cloud-security-posture-common/schema/rules/latest'; import { CspEvaluationBadge } from '@kbn/cloud-security-posture'; +import { + NAV_TO_FINDINGS_BY_HOST_NAME_FRPOM_ENTITY_FLYOUT, + NAV_TO_FINDINGS_BY_RULE_NAME_FRPOM_ENTITY_FLYOUT, + uiMetricService, +} from '@kbn/cloud-security-posture-common/utils/ui_metrics'; +import { METRIC_TYPE } from '@kbn/analytics'; type MisconfigurationFindingDetailFields = Pick; @@ -107,6 +113,10 @@ export const MisconfigurationFindingsDetailsTable = memo( }; const navToFindingsByName = (name: string, queryField: 'host.name' | 'user.name') => { + uiMetricService.trackUiMetric( + METRIC_TYPE.CLICK, + NAV_TO_FINDINGS_BY_RULE_NAME_FRPOM_ENTITY_FLYOUT + ); navToFindings({ [queryField]: name }, ['rule.name']); }; @@ -154,6 +164,10 @@ export const MisconfigurationFindingsDetailsTable = memo( { + uiMetricService.trackUiMetric( + METRIC_TYPE.CLICK, + NAV_TO_FINDINGS_BY_HOST_NAME_FRPOM_ENTITY_FLYOUT + ); navToFindingsByName(queryName, fieldName); }} > diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_details_flyout/index.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_details_flyout/index.tsx index 2a94ee0438293..ddcdc252bff76 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_details_flyout/index.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_details_flyout/index.tsx @@ -7,6 +7,11 @@ import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; +import { + ENTITY_FLYOUT_MISCONFIGURATION_VIEW_VISITS, + uiMetricService, +} from '@kbn/cloud-security-posture-common/utils/ui_metrics'; +import { METRIC_TYPE } from '@kbn/analytics'; import { EntityDetailsLeftPanelTab } from '../../../flyout/entity_details/shared/components/left_panel/left_panel_header'; import { PREFIX } from '../../../flyout/shared/test_ids'; import type { RiskInputsTabProps } from './tabs/risk_inputs/risk_inputs_tab'; @@ -34,14 +39,18 @@ export const getInsightsInputTab = ({ }: { name: string; fieldName: 'host.name' | 'user.name'; -}) => ({ - id: EntityDetailsLeftPanelTab.CSP_INSIGHTS, - 'data-test-subj': INSIGHTS_TAB_TEST_ID, - name: ( - - ), - content: , -}); +}) => { + uiMetricService.trackUiMetric(METRIC_TYPE.COUNT, ENTITY_FLYOUT_MISCONFIGURATION_VIEW_VISITS); + + return { + id: EntityDetailsLeftPanelTab.CSP_INSIGHTS, + 'data-test-subj': INSIGHTS_TAB_TEST_ID, + name: ( + + ), + content: , + }; +}; diff --git a/x-pack/plugins/security_solution/public/plugin.tsx b/x-pack/plugins/security_solution/public/plugin.tsx index 991f591773aa7..f7c35fbcb99f5 100644 --- a/x-pack/plugins/security_solution/public/plugin.tsx +++ b/x-pack/plugins/security_solution/public/plugin.tsx @@ -20,6 +20,7 @@ import type { import { DEFAULT_APP_CATEGORIES } from '@kbn/core/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import type { TriggersAndActionsUIPublicPluginSetup } from '@kbn/triggers-actions-ui-plugin/public'; +import { uiMetricService } from '@kbn/cloud-security-posture-common/utils/ui_metrics'; import { getLazyCloudSecurityPosturePliAuthBlockExtension } from './cloud_security_posture/lazy_cloud_security_posture_pli_auth_block_extension'; import { getLazyEndpointAgentTamperProtectionExtension } from './management/pages/policy/view/ingest_manager_integration/lazy_endpoint_agent_tamper_protection_extension'; import type { @@ -107,6 +108,9 @@ export class Plugin implements IPlugin Date: Mon, 30 Sep 2024 19:15:38 +1000 Subject: [PATCH 10/60] [ResponseOps][Cases] De-duplicate assignees object name (#194359) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Common client generators fail with the current Kibana spec due to duplicate type names used within the Case API. ``` ❯ go run github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen -package=kibana -generate=types,client -o ../generated/kibana.gen.go ../kibana-openapi-source.yaml error generating code: error generating type definitions: error generating code for type definitions: duplicate typename 'CasesAssignees' detected, can't auto-rename, please use x-go-name to specify your own name for one of them exit status 1 ``` ### 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] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [x] 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] 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) ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- oas_docs/output/kibana.staging.yaml | 4 ++-- oas_docs/output/kibana.yaml | 4 ++-- x-pack/plugins/cases/docs/openapi/bundled.json | 4 ++-- x-pack/plugins/cases/docs/openapi/bundled.yaml | 4 ++-- .../parameters/{assignees.yaml => assignees_filter.yaml} | 0 x-pack/plugins/cases/docs/openapi/paths/api@cases@_find.yaml | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) rename x-pack/plugins/cases/docs/openapi/components/parameters/{assignees.yaml => assignees_filter.yaml} (100%) diff --git a/oas_docs/output/kibana.staging.yaml b/oas_docs/output/kibana.staging.yaml index 6b95c8ed892b3..c70f9b4bce454 100644 --- a/oas_docs/output/kibana.staging.yaml +++ b/oas_docs/output/kibana.staging.yaml @@ -6948,7 +6948,7 @@ paths: feature privileges, depending on the owner of the cases you're seeking. operationId: findCasesDefaultSpace parameters: - - $ref: '#/components/parameters/Cases_assignees' + - $ref: '#/components/parameters/Cases_assignees_filter' - $ref: '#/components/parameters/Cases_category' - $ref: '#/components/parameters/Cases_defaultSearchOperator' - $ref: '#/components/parameters/Cases_from' @@ -24388,7 +24388,7 @@ components: schema: example: 09f0c261e39e36351d75995b78bb83673774d1bc2cca9df2d15f0e5c0a99a540 type: string - Cases_assignees: + Cases_assignees_filter: description: > Filters the returned cases by assignees. Valid values are `none` or unique identifiers for the user profiles. These identifiers can be found diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index 55f14f11a2d6f..947ae1155041f 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -6684,7 +6684,7 @@ paths: feature privileges, depending on the owner of the cases you're seeking. operationId: findCasesDefaultSpace parameters: - - $ref: '#/components/parameters/Cases_assignees' + - $ref: '#/components/parameters/Cases_assignees_filter' - $ref: '#/components/parameters/Cases_category' - $ref: '#/components/parameters/Cases_defaultSearchOperator' - $ref: '#/components/parameters/Cases_from' @@ -16415,7 +16415,7 @@ components: schema: example: 09f0c261e39e36351d75995b78bb83673774d1bc2cca9df2d15f0e5c0a99a540 type: string - Cases_assignees: + Cases_assignees_filter: description: > Filters the returned cases by assignees. Valid values are `none` or unique identifiers for the user profiles. These identifiers can be found diff --git a/x-pack/plugins/cases/docs/openapi/bundled.json b/x-pack/plugins/cases/docs/openapi/bundled.json index f9f2550580c80..44093a1dfdb51 100644 --- a/x-pack/plugins/cases/docs/openapi/bundled.json +++ b/x-pack/plugins/cases/docs/openapi/bundled.json @@ -179,7 +179,7 @@ ], "parameters": [ { - "$ref": "#/components/parameters/assignees" + "$ref": "#/components/parameters/assignees_filter" }, { "$ref": "#/components/parameters/category" @@ -1897,7 +1897,7 @@ }, "example": "d4e7abb0-b462-11ec-9a8d-698504725a43" }, - "assignees": { + "assignees_filter": { "in": "query", "name": "assignees", "description": "Filters the returned cases by assignees. Valid values are `none` or unique identifiers for the user profiles. These identifiers can be found by using the suggest user profile API.\n", diff --git a/x-pack/plugins/cases/docs/openapi/bundled.yaml b/x-pack/plugins/cases/docs/openapi/bundled.yaml index 5c56a0196ec24..4702121fb4b30 100644 --- a/x-pack/plugins/cases/docs/openapi/bundled.yaml +++ b/x-pack/plugins/cases/docs/openapi/bundled.yaml @@ -112,7 +112,7 @@ paths: tags: - cases parameters: - - $ref: '#/components/parameters/assignees' + - $ref: '#/components/parameters/assignees_filter' - $ref: '#/components/parameters/category' - $ref: '#/components/parameters/defaultSearchOperator' - $ref: '#/components/parameters/from' @@ -1230,7 +1230,7 @@ components: minItems: 1 maxItems: 100 example: d4e7abb0-b462-11ec-9a8d-698504725a43 - assignees: + assignees_filter: in: query name: assignees description: | diff --git a/x-pack/plugins/cases/docs/openapi/components/parameters/assignees.yaml b/x-pack/plugins/cases/docs/openapi/components/parameters/assignees_filter.yaml similarity index 100% rename from x-pack/plugins/cases/docs/openapi/components/parameters/assignees.yaml rename to x-pack/plugins/cases/docs/openapi/components/parameters/assignees_filter.yaml diff --git a/x-pack/plugins/cases/docs/openapi/paths/api@cases@_find.yaml b/x-pack/plugins/cases/docs/openapi/paths/api@cases@_find.yaml index bfceadc7a7c55..a8f6175e98842 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/api@cases@_find.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/api@cases@_find.yaml @@ -8,7 +8,7 @@ get: tags: - cases parameters: - - $ref: '../components/parameters/assignees.yaml' + - $ref: '../components/parameters/assignees_filter.yaml' - $ref: '../components/parameters/category.yaml' - $ref: '../components/parameters/defaultSearchOperator.yaml' - $ref: '../components/parameters/from.yaml' From 74e7044b85911b88cee8077d3d2bba41ad79f5ca Mon Sep 17 00:00:00 2001 From: Bharat Pasupula <123897612+bhapas@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:18:10 +0200 Subject: [PATCH 11/60] [Automatic Import] Fix integrationName when uploading an existing zipped integration (#194298) ## Release Note Fixes a bug when uploading an existing EPR integration with a new version ## Summary This PR fixes an issue where an integration from integrations repo is built using `elastic-package` and the zip is uploaded using zip upload functionality. The response items from Fleet UploadIntegration [API](https://www.elastic.co/guide/en/fleet/current/fleet-apis.html#install_package_by_upload_200_response_items_inner) is of the form `response: { items: [ {id , type }] }` and we are looking at type `ingest_pipeline` specifically to identify the `integrationName` and `version`. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Elastic Machine --- .../public/common/lib/api.ts | 2 +- .../public/common/lib/api_parsers.test.ts | 35 +++++++++++++++++-- .../public/common/lib/api_parsers.ts | 17 ++++----- .../use_load_package_names.ts | 4 +-- .../steps/deploy_step/deploy_step.test.tsx | 2 +- 5 files changed, 43 insertions(+), 17 deletions(-) diff --git a/x-pack/plugins/integration_assistant/public/common/lib/api.ts b/x-pack/plugins/integration_assistant/public/common/lib/api.ts index ea9fba83dc094..46c9487df4b7f 100644 --- a/x-pack/plugins/integration_assistant/public/common/lib/api.ts +++ b/x-pack/plugins/integration_assistant/public/common/lib/api.ts @@ -29,7 +29,7 @@ import { import { ANALYZE_LOGS_PATH, FLEET_PACKAGES_PATH } from '../../../common/constants'; export interface EpmPackageResponse { - response: [{ id: string; name: string }]; + items: [{ id: string; type: string }]; } const defaultHeaders = { diff --git a/x-pack/plugins/integration_assistant/public/common/lib/api_parsers.test.ts b/x-pack/plugins/integration_assistant/public/common/lib/api_parsers.test.ts index c7d427cb5b01a..83e90c446af7c 100644 --- a/x-pack/plugins/integration_assistant/public/common/lib/api_parsers.test.ts +++ b/x-pack/plugins/integration_assistant/public/common/lib/api_parsers.test.ts @@ -13,15 +13,18 @@ describe('getIntegrationNameFromResponse', () => { ['audit-security.data-stream-1.0.0', 'security-1.0.0'], ['audit-endpoint_security.data_stream-1.0.0', 'endpoint_security-1.0.0'], ['audit-endpoint_security_2.data_stream-1.0.0', 'endpoint_security_2-1.0.0'], + ['audit-endpoint_security.data_stream-1.0.0-power', 'endpoint_security-1.0.0'], ])( 'should return the integration name from the ingest pipeline name %s', (ingestPipelineName, expected) => { - const response = { response: [{ id: ingestPipelineName }] } as EpmPackageResponse; + const response = { + items: [{ id: ingestPipelineName, type: 'ingest_pipeline' }], + } as EpmPackageResponse; expect(getIntegrationNameFromResponse(response)).toEqual(expected); } ); it('should return an empty string if the response is empty', () => { - const response = { response: [] } as unknown as EpmPackageResponse; + const response = { items: [] } as unknown as EpmPackageResponse; expect(getIntegrationNameFromResponse(response)).toEqual(''); }); it('should return an empty string if the response is undefined', () => { @@ -29,7 +32,33 @@ describe('getIntegrationNameFromResponse', () => { expect(getIntegrationNameFromResponse(response)).toEqual(''); }); it('should return an empty string if the response is null', () => { - const response = { response: null } as unknown as EpmPackageResponse; + const response = { items: null } as unknown as EpmPackageResponse; + expect(getIntegrationNameFromResponse(response)).toEqual(''); + }); + it('should return the integration name from the ingest pipeline name', () => { + const response = { + items: [ + { type: 'ingest_pipeline', id: 'audit-security.data-stream-1.0.0' }, + { type: 'other', id: 'some-id' }, + ], + } as unknown as EpmPackageResponse; + expect(getIntegrationNameFromResponse(response)).toEqual('security-1.0.0'); + }); + + it('should return an empty string if the response does not contain an ingest pipeline item', () => { + const response = { + items: [ + { type: 'other', id: 'some-id' }, + { type: 'another', id: 'another-id' }, + ], + } as unknown as EpmPackageResponse; + expect(getIntegrationNameFromResponse(response)).toEqual(''); + }); + + it('should return an empty string if the ingest pipeline name does not match the expected pattern', () => { + const response = { + items: [{ type: 'ingest_pipeline', id: 'invalid-pipeline-name' }], + } as EpmPackageResponse; expect(getIntegrationNameFromResponse(response)).toEqual(''); }); }); diff --git a/x-pack/plugins/integration_assistant/public/common/lib/api_parsers.ts b/x-pack/plugins/integration_assistant/public/common/lib/api_parsers.ts index 20b371ff0c002..bfbdf5734ad99 100644 --- a/x-pack/plugins/integration_assistant/public/common/lib/api_parsers.ts +++ b/x-pack/plugins/integration_assistant/public/common/lib/api_parsers.ts @@ -13,14 +13,11 @@ import type { EpmPackageResponse } from './api'; * TODO: Return the package name from the fleet API: https://github.com/elastic/kibana/issues/185932 */ export const getIntegrationNameFromResponse = (response: EpmPackageResponse) => { - const ingestPipelineName = response.response?.[0]?.id; - if (ingestPipelineName) { - const match = ingestPipelineName.match(/^.*-([a-z\d_]+)\..*-([\d\.]+)$/); - const integrationName = match?.at(1); - const version = match?.at(2); - if (integrationName && version) { - return `${integrationName}-${version}`; - } - } - return ''; + return ( + response?.items + ?.find((item) => item.type === 'ingest_pipeline') + ?.id?.match(/^.*-([a-z\d_]+)\..*-([\d\.]+)\-*([a-z]*)$/) + ?.slice(1, 3) + ?.join('-') ?? '' + ); }; diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/use_load_package_names.ts b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/use_load_package_names.ts index f25b3a809650e..25de5b8cfcc60 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/use_load_package_names.ts +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/use_load_package_names.ts @@ -23,10 +23,10 @@ export const useLoadPackageNames = () => { setIsLoading(true); const packagesResponse = await getInstalledPackages(deps); if (abortController.signal.aborted) return; - if (!packagesResponse?.response?.length) { + if (!packagesResponse?.items?.length) { throw Error('No packages found'); } - setPackageNames(new Set(packagesResponse.response.map((pkg) => pkg.name))); + setPackageNames(new Set(packagesResponse.items.map((pkg) => pkg.id))); } catch (e) { if (!abortController.signal.aborted) { notifications?.toasts.addError(e, { diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/deploy_step/deploy_step.test.tsx b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/deploy_step/deploy_step.test.tsx index ef8a5187430b7..758e9ca06a06f 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/deploy_step/deploy_step.test.tsx +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/deploy_step/deploy_step.test.tsx @@ -44,7 +44,7 @@ const builtIntegration = new Blob(); const mockRunBuildIntegration = jest.fn((_: unknown) => builtIntegration); const integrationName = 'my_integration_33-1.0.0'; const mockRunInstallPackage = jest.fn((_: unknown) => ({ - response: [{ id: 'audit-my_integration_33.data-stream-1.0.0' }], + items: [{ id: 'audit-my_integration_33.data-stream-1.0.0', type: 'ingest_pipeline' }], })); jest.mock('../../../../../common/lib/api', () => ({ runBuildIntegration: (params: unknown) => mockRunBuildIntegration(params), From b5c21696883527a2c204fca1e4659507623c8159 Mon Sep 17 00:00:00 2001 From: Tomasz Ciecierski Date: Mon, 30 Sep 2024 11:20:00 +0200 Subject: [PATCH 12/60] [EDR Workflows] Fix dash inequality assertion (#194255) --- .../apps/endpoint/endpoint_permissions.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_permissions.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_permissions.ts index ed5b7b44bb98b..0a878dbd2fbd0 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_permissions.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_permissions.ts @@ -91,8 +91,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { expect(endpointSummary['Endpoint version']).to.be(endpoint.agent.version); // The values for these are calculated, so let's just make sure its not teh default when no data is returned - expect(endpointSummary['Policy status']).not.be('—'); - expect(endpointSummary['Agent status']).not.to.be('—'); + expect(endpointSummary['Policy status']).not.to.equal('—'); + expect(endpointSummary['Agent status']).not.to.equal('—'); }); }); } From abffb37ead4f4dec159e91742e4380a36cefdf10 Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Mon, 30 Sep 2024 11:33:36 +0200 Subject: [PATCH 13/60] [ES|QL][Lens] Fixes the filter out legend action (#194374) ## Summary Closes https://github.com/elastic/kibana/issues/194373 Fixes the filter out legend action ### Checklist - [ ] [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 --- .../create_filters_from_value_click.test.ts | 18 ++++++++++++++++++ .../filters/create_filters_from_value_click.ts | 9 ++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/plugins/data/public/actions/filters/create_filters_from_value_click.test.ts b/src/plugins/data/public/actions/filters/create_filters_from_value_click.test.ts index 10d773c61533c..cc228374271ea 100644 --- a/src/plugins/data/public/actions/filters/create_filters_from_value_click.test.ts +++ b/src/plugins/data/public/actions/filters/create_filters_from_value_click.test.ts @@ -172,5 +172,23 @@ describe('createFiltersFromClickEvent', () => { expect(queryString).toEqual(`from meow | WHERE \`columnA\`=="2048"`); }); + + test('should return the update query string for negated action', async () => { + dataPoints[0].table.columns[0] = { + name: 'columnA', + id: 'columnA', + meta: { + type: 'string', + }, + }; + const queryString = await appendFilterToESQLQueryFromValueClickAction({ + data: dataPoints, + query: { esql: 'from meow' }, + negate: true, + }); + + expect(queryString).toEqual(`from meow +| WHERE \`columnA\`!="2048"`); + }); }); }); diff --git a/src/plugins/data/public/actions/filters/create_filters_from_value_click.ts b/src/plugins/data/public/actions/filters/create_filters_from_value_click.ts index b949bb051631c..201eefac7d528 100644 --- a/src/plugins/data/public/actions/filters/create_filters_from_value_click.ts +++ b/src/plugins/data/public/actions/filters/create_filters_from_value_click.ts @@ -162,6 +162,7 @@ export const createFiltersFromValueClickAction = async ({ export const appendFilterToESQLQueryFromValueClickAction = ({ data, query, + negate, }: ValueClickDataContext) => { if (!query) { return; @@ -183,6 +184,12 @@ export const appendFilterToESQLQueryFromValueClickAction = ({ if (value == null) { return; } - return appendWhereClauseToESQLQuery(query.esql, column.name, value, '+', column.meta?.type); + return appendWhereClauseToESQLQuery( + query.esql, + column.name, + value, + negate ? '-' : '+', + column.meta?.type + ); } }; From 10c337387485d77fd264c11888b2c28131ee515a Mon Sep 17 00:00:00 2001 From: Tre Date: Mon, 30 Sep 2024 10:41:22 +0100 Subject: [PATCH 14/60] [FTR] Merge Alerting Apis from `x-pack/test_serverless/shared` into `x-pack/test/api_integration/deployment_agnostic` (#193975) ## Summary Follow up of [this pr](https://github.com/elastic/kibana/pull/192216), per [this discussion](https://github.com/elastic/kibana/pull/192216#discussion_r1760894369). Also, switch from `svlCommonApi` to `samlAuth` for internal headers. --------- Co-authored-by: Elastic Machine Co-authored-by: Dzmitry Lemechko --- .../observability/alerting/burn_rate_rule.ts | 2 +- .../services/alerting_api.ts | 899 +++++++++++++- .../custom_threshold_rule/avg_pct_fired.ts | 2 +- .../custom_threshold_rule/avg_pct_no_data.ts | 2 +- .../custom_eq_avg_bytes_fired.ts | 2 +- .../documents_count_fired.ts | 2 +- .../custom_threshold_rule/group_by_fired.ts | 2 +- .../custom_threshold_rule/p99_pct_fired.ts | 2 +- .../es_query_rule/es_query_rule.ts | 2 +- .../shared/services/alerting_api.ts | 1072 ----------------- .../services/deployment_agnostic_services.ts | 8 +- 11 files changed, 910 insertions(+), 1085 deletions(-) delete mode 100644 x-pack/test_serverless/shared/services/alerting_api.ts diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/alerting/burn_rate_rule.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/alerting/burn_rate_rule.ts index 22a70ad439851..e556db2e09a28 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/alerting/burn_rate_rule.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/alerting/burn_rate_rule.ts @@ -306,7 +306,7 @@ export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { }); it('should find the created rule with correct information about the consumer', async () => { - const match = await alertingApi.findRule(ruleId, adminRoleAuthc); + const match = await alertingApi.findInRules(adminRoleAuthc, ruleId); expect(match).not.to.be(undefined); expect(match.consumer).to.be(expectedConsumer); }); diff --git a/x-pack/test/api_integration/deployment_agnostic/services/alerting_api.ts b/x-pack/test/api_integration/deployment_agnostic/services/alerting_api.ts index 430fd51efdc32..2956ee412a478 100644 --- a/x-pack/test/api_integration/deployment_agnostic/services/alerting_api.ts +++ b/x-pack/test/api_integration/deployment_agnostic/services/alerting_api.ts @@ -12,6 +12,10 @@ import type { import { MetricThresholdParams } from '@kbn/infra-plugin/common/alerting/metrics'; import { ThresholdParams } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import { RoleCredentials } from '@kbn/ftr-common-functional-services'; +import type { Client } from '@elastic/elasticsearch'; +import type { TryWithRetriesOptions } from '@kbn/ftr-common-functional-services'; +import { v4 as uuidv4 } from 'uuid'; +import moment from 'moment'; import { DeploymentAgnosticFtrProviderContext } from '../ftr_provider_context'; export interface SloBurnRateRuleParams { @@ -41,6 +45,29 @@ interface Duration { unit: DurationUnit; } +interface CreateEsQueryRuleParams { + size: number; + thresholdComparator: string; + threshold: number[]; + timeWindowSize?: number; + timeWindowUnit?: string; + esQuery?: string; + timeField?: string; + searchConfiguration?: unknown; + indexName?: string; + excludeHitsFromPreviousRun?: boolean; + aggType?: string; + aggField?: string; + groupBy?: string; + termField?: string; + termSize?: number; + index?: string[]; +} + +const RETRY_COUNT = 10; +const RETRY_DELAY = 1000; +const generateUniqueKey = () => uuidv4().replace(/-/g, ''); + export function AlertingApiProvider({ getService }: DeploymentAgnosticFtrProviderContext) { const samlAuth = getService('samlAuth'); const supertestWithoutAuth = getService('supertestWithoutAuth'); @@ -51,7 +78,877 @@ export function AlertingApiProvider({ getService }: DeploymentAgnosticFtrProvide const retryTimeout = config.get('timeouts.try'); const requestTimeout = 30 * 1000; + const helpers = { + async waitForAlertInIndex({ + esClient, + filter, + indexName, + ruleId, + num = 1, + retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, + }: { + esClient: Client; + filter: Date; + indexName: string; + ruleId: string; + num: number; + retryOptions?: TryWithRetriesOptions; + }): Promise>> { + return await retry.tryWithRetries( + `Alerting API - waitForAlertInIndex, retryOptions: ${JSON.stringify(retryOptions)}`, + async () => { + const response = await esClient.search({ + index: indexName, + body: { + query: { + bool: { + must: [ + { + term: { + 'kibana.alert.rule.uuid': ruleId, + }, + }, + { + range: { + '@timestamp': { + gte: filter.getTime().toString(), + }, + }, + }, + ], + }, + }, + }, + }); + if (response.hits.hits.length < num) + throw new Error(`Only found ${response.hits.hits.length} / ${num} documents`); + + return response; + }, + retryOptions + ); + }, + + async waitForDocumentInIndexForTime({ + esClient, + indexName, + ruleId, + num = 1, + sort = 'desc', + timeout = 1000, + }: { + esClient: Client; + indexName: string; + ruleId: string; + num?: number; + sort?: 'asc' | 'desc'; + timeout?: number; + }): Promise { + return await retry.tryForTime(timeout, async () => { + const response = await esClient.search({ + index: indexName, + sort: `date:${sort}`, + body: { + query: { + bool: { + must: [ + { + term: { + 'ruleId.keyword': ruleId, + }, + }, + ], + }, + }, + }, + }); + if (response.hits.hits.length < num) { + throw new Error(`Only found ${response.hits.hits.length} / ${num} documents`); + } + return response; + }); + }, + + async waitForDocumentInIndex({ + esClient, + indexName, + ruleId, + num = 1, + sort = 'desc', + retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, + }: { + esClient: Client; + indexName: string; + ruleId: string; + num?: number; + sort?: 'asc' | 'desc'; + retryOptions?: TryWithRetriesOptions; + }): Promise { + return await retry.tryWithRetries( + `Alerting API - waitForDocumentInIndex, retryOptions: ${JSON.stringify(retryOptions)}`, + async () => { + const response = await esClient.search({ + index: indexName, + sort: `date:${sort}`, + body: { + query: { + bool: { + must: [ + { + term: { + 'ruleId.keyword': ruleId, + }, + }, + ], + }, + }, + }, + }); + if (response.hits.hits.length < num) { + throw new Error(`Only found ${response.hits.hits.length} / ${num} documents`); + } + return response; + }, + retryOptions + ); + }, + + async createIndexConnector({ + roleAuthc, + name, + indexName, + }: { + roleAuthc: RoleCredentials; + name: string; + indexName: string; + }) { + const { body } = await supertestWithoutAuth + .post(`/api/actions/connector`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .send({ + name, + config: { + index: indexName, + refresh: true, + }, + connector_type_id: '.index', + }) + .expect(200); + return body; + }, + + async createSlackConnector({ roleAuthc, name }: { roleAuthc: RoleCredentials; name: string }) { + const { body } = await supertestWithoutAuth + .post(`/api/actions/connector`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .send({ + name, + config: {}, + secrets: { + webhookUrl: 'http://test', + }, + connector_type_id: '.slack', + }) + .expect(200); + return body; + }, + + async createEsQueryRule({ + roleAuthc, + name, + ruleTypeId, + params, + actions = [], + tags = [], + schedule, + consumer, + notifyWhen, + enabled = true, + }: { + roleAuthc: RoleCredentials; + ruleTypeId: string; + name: string; + params: CreateEsQueryRuleParams; + consumer: string; + actions?: any[]; + tags?: any[]; + schedule?: { interval: string }; + notifyWhen?: string; + enabled?: boolean; + }) { + const { body } = await supertestWithoutAuth + .post(`/api/alerting/rule`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .send({ + enabled, + params, + consumer, + schedule: schedule || { + interval: '1h', + }, + tags, + name, + rule_type_id: ruleTypeId, + actions, + ...(notifyWhen ? { notify_when: notifyWhen, throttle: '5m' } : {}), + }) + .expect(200); + return body; + }, + + async createAnomalyRule({ + roleAuthc, + name = generateUniqueKey(), + actions = [], + tags = ['foo', 'bar'], + schedule, + consumer = 'alerts', + notifyWhen, + enabled = true, + ruleTypeId = 'apm.anomaly', + params, + }: { + roleAuthc: RoleCredentials; + name?: string; + consumer?: string; + actions?: any[]; + tags?: any[]; + schedule?: { interval: string }; + notifyWhen?: string; + enabled?: boolean; + ruleTypeId?: string; + params?: any; + }) { + const { body } = await supertestWithoutAuth + .post(`/api/alerting/rule`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .send({ + enabled, + params: params || { + anomalySeverityType: 'critical', + anomalyDetectorTypes: ['txLatency'], + environment: 'ENVIRONMENT_ALL', + windowSize: 30, + windowUnit: 'm', + }, + consumer, + schedule: schedule || { + interval: '1m', + }, + tags, + name, + rule_type_id: ruleTypeId, + actions, + ...(notifyWhen ? { notify_when: notifyWhen, throttle: '5m' } : {}), + }) + .expect(200); + return body; + }, + + async createLatencyThresholdRule({ + roleAuthc, + name = generateUniqueKey(), + actions = [], + tags = ['foo', 'bar'], + schedule, + consumer = 'apm', + notifyWhen, + enabled = true, + ruleTypeId = 'apm.transaction_duration', + params, + }: { + roleAuthc: RoleCredentials; + name?: string; + consumer?: string; + actions?: any[]; + tags?: any[]; + schedule?: { interval: string }; + notifyWhen?: string; + enabled?: boolean; + ruleTypeId?: string; + params?: any; + }) { + const { body } = await supertestWithoutAuth + .post(`/api/alerting/rule`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .send({ + enabled, + params: params || { + aggregationType: 'avg', + environment: 'ENVIRONMENT_ALL', + threshold: 1500, + windowSize: 5, + windowUnit: 'm', + }, + consumer, + schedule: schedule || { + interval: '1m', + }, + tags, + name, + rule_type_id: ruleTypeId, + actions, + ...(notifyWhen ? { notify_when: notifyWhen, throttle: '5m' } : {}), + }); + return body; + }, + + async createInventoryRule({ + roleAuthc, + name = generateUniqueKey(), + actions = [], + tags = ['foo', 'bar'], + schedule, + consumer = 'alerts', + notifyWhen, + enabled = true, + ruleTypeId = 'metrics.alert.inventory.threshold', + params, + }: { + roleAuthc: RoleCredentials; + name?: string; + consumer?: string; + actions?: any[]; + tags?: any[]; + schedule?: { interval: string }; + notifyWhen?: string; + enabled?: boolean; + ruleTypeId?: string; + params?: any; + }) { + const { body } = await supertestWithoutAuth + .post(`/api/alerting/rule`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .send({ + enabled, + params: params || { + nodeType: 'host', + criteria: [ + { + metric: 'cpu', + comparator: '>', + threshold: [5], + timeSize: 1, + timeUnit: 'm', + customMetric: { + type: 'custom', + id: 'alert-custom-metric', + field: '', + aggregation: 'avg', + }, + }, + ], + sourceId: 'default', + }, + consumer, + schedule: schedule || { + interval: '1m', + }, + tags, + name, + rule_type_id: ruleTypeId, + actions, + ...(notifyWhen ? { notify_when: notifyWhen, throttle: '5m' } : {}), + }) + .expect(200); + return body; + }, + + async disableRule({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) { + const { body } = await supertestWithoutAuth + .post(`/api/alerting/rule/${ruleId}/_disable`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .expect(204); + return body; + }, + + async updateEsQueryRule({ + roleAuthc, + ruleId, + updates, + }: { + roleAuthc: RoleCredentials; + ruleId: string; + updates: any; + }) { + const { body: r } = await supertestWithoutAuth + .get(`/api/alerting/rule/${ruleId}`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .expect(200); + const body = await supertestWithoutAuth + .put(`/api/alerting/rule/${ruleId}`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .send({ + ...{ + name: r.name, + schedule: r.schedule, + throttle: r.throttle, + tags: r.tags, + params: r.params, + notify_when: r.notifyWhen, + actions: r.actions.map((action: any) => ({ + group: action.group, + params: action.params, + id: action.id, + frequency: action.frequency, + })), + }, + ...updates, + }) + .expect(200); + return body; + }, + + async runRule({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) { + const response = await supertestWithoutAuth + .post(`/internal/alerting/rule/${ruleId}/_run_soon`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .expect(204); + return response; + }, + + async waitForNumRuleRuns({ + roleAuthc, + numOfRuns, + ruleId, + esClient, + testStart, + retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, + }: { + roleAuthc: RoleCredentials; + numOfRuns: number; + ruleId: string; + esClient: Client; + testStart: Date; + retryOptions?: TryWithRetriesOptions; + }) { + for (let i = 0; i < numOfRuns; i++) { + await retry.tryWithRetries( + `Alerting API - waitForNumRuleRuns, retryOptions: ${JSON.stringify(retryOptions)}`, + async () => { + await this.runRule({ roleAuthc, ruleId }); + await this.waiting.waitForExecutionEventLog({ + esClient, + filter: testStart, + ruleId, + num: i + 1, + }); + await this.waiting.waitForAllTasksIdle({ esClient, filter: testStart }); + }, + retryOptions + ); + } + }, + + async muteRule({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) { + const { body } = await supertestWithoutAuth + .post(`/api/alerting/rule/${ruleId}/_mute_all`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .expect(204); + return body; + }, + + async enableRule({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) { + const { body } = await supertestWithoutAuth + .post(`/api/alerting/rule/${ruleId}/_enable`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .expect(204); + return body; + }, + + async muteAlert({ + roleAuthc, + ruleId, + alertId, + }: { + roleAuthc: RoleCredentials; + ruleId: string; + alertId: string; + }) { + const { body } = await supertestWithoutAuth + .post(`/api/alerting/rule/${ruleId}/alert/${alertId}/_mute`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .expect(204); + return body; + }, + + async unmuteRule({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) { + const { body } = await supertestWithoutAuth + .post(`/api/alerting/rule/${ruleId}/_unmute_all`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .expect(204); + return body; + }, + + async snoozeRule({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) { + const { body } = await supertestWithoutAuth + .post(`/internal/alerting/rule/${ruleId}/_snooze`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .send({ + snooze_schedule: { + duration: 100000000, + rRule: { + count: 1, + dtstart: moment().format(), + tzid: 'UTC', + }, + }, + }) + .expect(204); + return body; + }, + + async findRuleById(roleAuthc: RoleCredentials, ruleId: string) { + if (!ruleId) { + throw new Error(`'ruleId' is undefined`); + } + const response = await supertestWithoutAuth + .get(`/api/alerting/rule/${ruleId}`) + .set(samlAuth.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader); + return response.body || {}; + }, + + waiting: { + async waitForDocumentInIndex({ + esClient, + indexName, + ruleId, + num = 1, + sort = 'desc', + retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, + }: { + esClient: Client; + indexName: string; + ruleId: string; + num?: number; + sort?: 'asc' | 'desc'; + retryOptions?: TryWithRetriesOptions; + }): Promise { + return await retry.tryWithRetries( + `Alerting API - waiting.waitForDocumentInIndex, retryOptions: ${JSON.stringify( + retryOptions + )}`, + async () => { + const response = await esClient.search({ + index: indexName, + sort: `date:${sort}`, + body: { + query: { + bool: { + must: [ + { + term: { + 'ruleId.keyword': ruleId, + }, + }, + ], + }, + }, + }, + }); + if (response.hits.hits.length < num) { + throw new Error(`Only found ${response.hits.hits.length} / ${num} documents`); + } + return response; + }, + retryOptions + ); + }, + + async getDocumentsInIndex({ + esClient, + indexName, + ruleId, + }: { + esClient: Client; + indexName: string; + ruleId: string; + }): Promise { + return await esClient.search({ + index: indexName, + body: { + query: { + bool: { + must: [ + { + term: { + 'ruleId.keyword': ruleId, + }, + }, + ], + }, + }, + }, + }); + }, + + async waitForAllTasksIdle({ + esClient, + filter, + retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, + }: { + esClient: Client; + filter: Date; + retryOptions?: TryWithRetriesOptions; + }): Promise { + return await retry.tryWithRetries( + `Alerting API - waiting.waitForAllTasksIdle, retryOptions: ${JSON.stringify( + retryOptions + )}`, + async () => { + const response = await esClient.search({ + index: '.kibana_task_manager', + body: { + query: { + bool: { + must: [ + { + terms: { + 'task.scope': ['actions', 'alerting'], + }, + }, + { + range: { + 'task.scheduledAt': { + gte: filter.getTime().toString(), + }, + }, + }, + ], + must_not: [ + { + term: { + 'task.status': 'idle', + }, + }, + ], + }, + }, + }, + }); + if (response.hits.hits.length !== 0) { + throw new Error(`Expected 0 hits but received ${response.hits.hits.length}`); + } + return response; + }, + retryOptions + ); + }, + + async waitForExecutionEventLog({ + esClient, + filter, + ruleId, + num = 1, + retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, + }: { + esClient: Client; + filter: Date; + ruleId: string; + num?: number; + retryOptions?: TryWithRetriesOptions; + }): Promise { + return await retry.tryWithRetries( + `Alerting API - waiting.waitForExecutionEventLog, retryOptions: ${JSON.stringify( + retryOptions + )}`, + async () => { + const response = await esClient.search({ + index: '.kibana-event-log*', + body: { + query: { + bool: { + filter: [ + { + term: { + 'rule.id': { + value: ruleId, + }, + }, + }, + { + term: { + 'event.provider': { + value: 'alerting', + }, + }, + }, + { + term: { + 'event.action': 'execute', + }, + }, + { + range: { + '@timestamp': { + gte: filter.getTime().toString(), + }, + }, + }, + ], + }, + }, + }, + }); + if (response.hits.hits.length < num) { + throw new Error('No hits found'); + } + return response; + }, + retryOptions + ); + }, + + async createIndex({ esClient, indexName }: { esClient: Client; indexName: string }) { + return await esClient.indices.create( + { + index: indexName, + body: {}, + }, + { meta: true } + ); + }, + + async waitForAllTasks({ + esClient, + filter, + taskType, + attempts, + retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, + }: { + esClient: Client; + filter: Date; + taskType: string; + attempts: number; + retryOptions?: TryWithRetriesOptions; + }): Promise { + return await retry.tryWithRetries( + `Alerting API - waiting.waitForAllTasks, retryOptions: ${JSON.stringify(retryOptions)}`, + async () => { + const response = await esClient.search({ + index: '.kibana_task_manager', + body: { + query: { + bool: { + must: [ + { + term: { + 'task.status': 'idle', + }, + }, + { + term: { + 'task.attempts': attempts, + }, + }, + { + terms: { + 'task.scope': ['actions', 'alerting'], + }, + }, + { + term: { + 'task.taskType': taskType, + }, + }, + { + range: { + 'task.scheduledAt': { + gte: filter.getTime().toString(), + }, + }, + }, + ], + }, + }, + }, + }); + if (response.hits.hits.length === 0) { + throw new Error('No hits found'); + } + return response; + }, + retryOptions + ); + }, + + async waitForDisabled({ + esClient, + ruleId, + filter, + retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, + }: { + esClient: Client; + ruleId: string; + filter: Date; + retryOptions?: TryWithRetriesOptions; + }): Promise { + return await retry.tryWithRetries( + `Alerting API - waiting.waitForDisabled, retryOptions: ${JSON.stringify(retryOptions)}`, + async () => { + const response = await esClient.search({ + index: '.kibana_task_manager', + body: { + query: { + bool: { + must: [ + { + term: { + 'task.id': `task:${ruleId}`, + }, + }, + { + terms: { + 'task.scope': ['actions', 'alerting'], + }, + }, + { + range: { + 'task.scheduledAt': { + gte: filter.getTime().toString(), + }, + }, + }, + { + term: { + 'task.enabled': true, + }, + }, + ], + }, + }, + }, + }); + if (response.hits.hits.length !== 0) { + throw new Error(`Expected 0 hits but received ${response.hits.hits.length}`); + } + return response; + }, + retryOptions + ); + }, + }, + }; + return { + helpers, + async waitForRuleStatus({ ruleId, expectedStatus, @@ -192,7 +1089,7 @@ export function AlertingApiProvider({ getService }: DeploymentAgnosticFtrProvide return body; }, - async findRule(ruleId: string, roleAuthc: RoleCredentials) { + async findInRules(roleAuthc: RoleCredentials, ruleId: string) { const response = await supertestWithoutAuth .get('/api/alerting/rules/_find') .set(roleAuthc.apiKeyHeader) diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts index 707d4742fd3b4..358fabd7956ef 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts @@ -169,7 +169,7 @@ export default function ({ getService }: FtrProviderContext) { }); it('should find the created rule with correct information about the consumer', async () => { - const match = await alertingApi.findRule(roleAuthc, ruleId); + const match = await alertingApi.findInRules(roleAuthc, ruleId); expect(match).not.to.be(undefined); expect(match.consumer).to.be('observability'); }); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts index c95482f2c2a74..4928e69a939c1 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts @@ -142,7 +142,7 @@ export default function ({ getService }: FtrProviderContext) { }); it('should find the created rule with correct information about the consumer', async () => { - const match = await alertingApi.findRule(roleAuthc, ruleId); + const match = await alertingApi.findInRules(roleAuthc, ruleId); expect(match).not.to.be(undefined); expect(match.consumer).to.be('observability'); }); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts index 489f495fc169f..f2f98fe1ff2de 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts @@ -172,7 +172,7 @@ export default function ({ getService }: FtrProviderContext) { }); it('should find the created rule with correct information about the consumer', async () => { - const match = await alertingApi.findRule(roleAuthc, ruleId); + const match = await alertingApi.findInRules(roleAuthc, ruleId); expect(match).not.to.be(undefined); expect(match.consumer).to.be('observability'); }); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts index d7c87ffce0588..ac0e034279cbe 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts @@ -170,7 +170,7 @@ export default function ({ getService }: FtrProviderContext) { }); it('should find the created rule with correct information about the consumer', async () => { - const match = await alertingApi.findRule(roleAuthc, ruleId); + const match = await alertingApi.findInRules(roleAuthc, ruleId); expect(match).not.to.be(undefined); expect(match.consumer).to.be('observability'); }); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts index cd7eecb1ab290..3b38eed6b6166 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts @@ -177,7 +177,7 @@ export default function ({ getService }: FtrProviderContext) { }); it('should find the created rule with correct information about the consumer', async () => { - const match = await alertingApi.findRule(roleAuthc, ruleId); + const match = await alertingApi.findInRules(roleAuthc, ruleId); expect(match).not.to.be(undefined); expect(match.consumer).to.be('observability'); }); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/p99_pct_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/p99_pct_fired.ts index c233ecbe39f1a..291db4defac47 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/p99_pct_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/p99_pct_fired.ts @@ -170,7 +170,7 @@ export default function ({ getService }: FtrProviderContext) { }); it('should find the created rule with correct information about the consumer', async () => { - const match = await alertingApi.findRule(roleAuthc, ruleId); + const match = await alertingApi.findInRules(roleAuthc, ruleId); expect(match).not.to.be(undefined); expect(match.consumer).to.be('observability'); }); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/es_query_rule/es_query_rule.ts b/x-pack/test_serverless/api_integration/test_suites/observability/es_query_rule/es_query_rule.ts index 8d627413ecbc0..caaecd9f3332a 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/es_query_rule/es_query_rule.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/es_query_rule/es_query_rule.ts @@ -112,7 +112,7 @@ export default function ({ getService }: FtrProviderContext) { }); it('should find the created rule with correct information about the consumer', async () => { - const match = await alertingApi.findRule(roleAuthc, ruleId); + const match = await alertingApi.findInRules(roleAuthc, ruleId); expect(match).not.to.be(undefined); expect(match.consumer).to.be('observability'); }); diff --git a/x-pack/test_serverless/shared/services/alerting_api.ts b/x-pack/test_serverless/shared/services/alerting_api.ts deleted file mode 100644 index 86fcad5060cc6..0000000000000 --- a/x-pack/test_serverless/shared/services/alerting_api.ts +++ /dev/null @@ -1,1072 +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 moment from 'moment'; -import type { - AggregationsAggregate, - SearchResponse, -} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { Client } from '@elastic/elasticsearch'; -import { MetricThresholdParams } from '@kbn/infra-plugin/common/alerting/metrics'; -import { ThresholdParams } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; -import { v4 as uuidv4 } from 'uuid'; -import type { TryWithRetriesOptions } from '@kbn/ftr-common-functional-services'; -import { RoleCredentials } from '.'; -import type { SloBurnRateRuleParams } from '../../api_integration/services/slo_api'; -import { FtrProviderContext } from '../../functional/ftr_provider_context'; - -interface CreateEsQueryRuleParams { - size: number; - thresholdComparator: string; - threshold: number[]; - timeWindowSize?: number; - timeWindowUnit?: string; - esQuery?: string; - timeField?: string; - searchConfiguration?: unknown; - indexName?: string; - excludeHitsFromPreviousRun?: boolean; - aggType?: string; - aggField?: string; - groupBy?: string; - termField?: string; - termSize?: number; - index?: string[]; -} -const RETRY_COUNT = 10; -const RETRY_DELAY = 1000; - -export function AlertingApiProvider({ getService }: FtrProviderContext) { - const retry = getService('retry'); - const es = getService('es'); - const requestTimeout = 30 * 1000; - const retryTimeout = 120 * 1000; - const logger = getService('log'); - const svlCommonApi = getService('svlCommonApi'); - const supertestWithoutAuth = getService('supertestWithoutAuth'); - - const generateUniqueKey = () => uuidv4().replace(/-/g, ''); - - const helpers = { - async waitForAlertInIndex({ - esClient, - filter, - indexName, - ruleId, - num = 1, - retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, - }: { - esClient: Client; - filter: Date; - indexName: string; - ruleId: string; - num: number; - retryOptions?: TryWithRetriesOptions; - }): Promise>> { - return await retry.tryWithRetries( - `Alerting API - waitForAlertInIndex, retryOptions: ${JSON.stringify(retryOptions)}`, - async () => { - const response = await esClient.search({ - index: indexName, - body: { - query: { - bool: { - must: [ - { - term: { - 'kibana.alert.rule.uuid': ruleId, - }, - }, - { - range: { - '@timestamp': { - gte: filter.getTime().toString(), - }, - }, - }, - ], - }, - }, - }, - }); - if (response.hits.hits.length < num) - throw new Error(`Only found ${response.hits.hits.length} / ${num} documents`); - - return response; - }, - retryOptions - ); - }, - - async waitForDocumentInIndexForTime({ - esClient, - indexName, - ruleId, - num = 1, - sort = 'desc', - timeout = 1000, - }: { - esClient: Client; - indexName: string; - ruleId: string; - num?: number; - sort?: 'asc' | 'desc'; - timeout?: number; - }): Promise { - return await retry.tryForTime(timeout, async () => { - const response = await esClient.search({ - index: indexName, - sort: `date:${sort}`, - body: { - query: { - bool: { - must: [ - { - term: { - 'ruleId.keyword': ruleId, - }, - }, - ], - }, - }, - }, - }); - if (response.hits.hits.length < num) { - throw new Error(`Only found ${response.hits.hits.length} / ${num} documents`); - } - return response; - }); - }, - - async waitForDocumentInIndex({ - esClient, - indexName, - ruleId, - num = 1, - sort = 'desc', - retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, - }: { - esClient: Client; - indexName: string; - ruleId: string; - num?: number; - sort?: 'asc' | 'desc'; - retryOptions?: TryWithRetriesOptions; - }): Promise { - return await retry.tryWithRetries( - `Alerting API - waitForDocumentInIndex, retryOptions: ${JSON.stringify(retryOptions)}`, - async () => { - const response = await esClient.search({ - index: indexName, - sort: `date:${sort}`, - body: { - query: { - bool: { - must: [ - { - term: { - 'ruleId.keyword': ruleId, - }, - }, - ], - }, - }, - }, - }); - if (response.hits.hits.length < num) { - throw new Error(`Only found ${response.hits.hits.length} / ${num} documents`); - } - return response; - }, - retryOptions - ); - }, - - async createIndexConnector({ - roleAuthc, - name, - indexName, - }: { - roleAuthc: RoleCredentials; - name: string; - indexName: string; - }) { - const { body } = await supertestWithoutAuth - .post(`/api/actions/connector`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .send({ - name, - config: { - index: indexName, - refresh: true, - }, - connector_type_id: '.index', - }) - .expect(200); - return body; - }, - - async createSlackConnector({ roleAuthc, name }: { roleAuthc: RoleCredentials; name: string }) { - const { body } = await supertestWithoutAuth - .post(`/api/actions/connector`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .send({ - name, - config: {}, - secrets: { - webhookUrl: 'http://test', - }, - connector_type_id: '.slack', - }) - .expect(200); - return body; - }, - - async createEsQueryRule({ - roleAuthc, - name, - ruleTypeId, - params, - actions = [], - tags = [], - schedule, - consumer, - notifyWhen, - enabled = true, - }: { - roleAuthc: RoleCredentials; - ruleTypeId: string; - name: string; - params: CreateEsQueryRuleParams; - consumer: string; - actions?: any[]; - tags?: any[]; - schedule?: { interval: string }; - notifyWhen?: string; - enabled?: boolean; - }) { - const { body } = await supertestWithoutAuth - .post(`/api/alerting/rule`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .send({ - enabled, - params, - consumer, - schedule: schedule || { - interval: '1h', - }, - tags, - name, - rule_type_id: ruleTypeId, - actions, - ...(notifyWhen ? { notify_when: notifyWhen, throttle: '5m' } : {}), - }) - .expect(200); - return body; - }, - - async createAnomalyRule({ - roleAuthc, - name = generateUniqueKey(), - actions = [], - tags = ['foo', 'bar'], - schedule, - consumer = 'alerts', - notifyWhen, - enabled = true, - ruleTypeId = 'apm.anomaly', - params, - }: { - roleAuthc: RoleCredentials; - name?: string; - consumer?: string; - actions?: any[]; - tags?: any[]; - schedule?: { interval: string }; - notifyWhen?: string; - enabled?: boolean; - ruleTypeId?: string; - params?: any; - }) { - const { body } = await supertestWithoutAuth - .post(`/api/alerting/rule`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .send({ - enabled, - params: params || { - anomalySeverityType: 'critical', - anomalyDetectorTypes: ['txLatency'], - environment: 'ENVIRONMENT_ALL', - windowSize: 30, - windowUnit: 'm', - }, - consumer, - schedule: schedule || { - interval: '1m', - }, - tags, - name, - rule_type_id: ruleTypeId, - actions, - ...(notifyWhen ? { notify_when: notifyWhen, throttle: '5m' } : {}), - }) - .expect(200); - return body; - }, - - async createLatencyThresholdRule({ - roleAuthc, - name = generateUniqueKey(), - actions = [], - tags = ['foo', 'bar'], - schedule, - consumer = 'apm', - notifyWhen, - enabled = true, - ruleTypeId = 'apm.transaction_duration', - params, - }: { - roleAuthc: RoleCredentials; - name?: string; - consumer?: string; - actions?: any[]; - tags?: any[]; - schedule?: { interval: string }; - notifyWhen?: string; - enabled?: boolean; - ruleTypeId?: string; - params?: any; - }) { - const { body } = await supertestWithoutAuth - .post(`/api/alerting/rule`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .send({ - enabled, - params: params || { - aggregationType: 'avg', - environment: 'ENVIRONMENT_ALL', - threshold: 1500, - windowSize: 5, - windowUnit: 'm', - }, - consumer, - schedule: schedule || { - interval: '1m', - }, - tags, - name, - rule_type_id: ruleTypeId, - actions, - ...(notifyWhen ? { notify_when: notifyWhen, throttle: '5m' } : {}), - }); - return body; - }, - - async createInventoryRule({ - roleAuthc, - name = generateUniqueKey(), - actions = [], - tags = ['foo', 'bar'], - schedule, - consumer = 'alerts', - notifyWhen, - enabled = true, - ruleTypeId = 'metrics.alert.inventory.threshold', - params, - }: { - roleAuthc: RoleCredentials; - name?: string; - consumer?: string; - actions?: any[]; - tags?: any[]; - schedule?: { interval: string }; - notifyWhen?: string; - enabled?: boolean; - ruleTypeId?: string; - params?: any; - }) { - const { body } = await supertestWithoutAuth - .post(`/api/alerting/rule`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .send({ - enabled, - params: params || { - nodeType: 'host', - criteria: [ - { - metric: 'cpu', - comparator: '>', - threshold: [5], - timeSize: 1, - timeUnit: 'm', - customMetric: { - type: 'custom', - id: 'alert-custom-metric', - field: '', - aggregation: 'avg', - }, - }, - ], - sourceId: 'default', - }, - consumer, - schedule: schedule || { - interval: '1m', - }, - tags, - name, - rule_type_id: ruleTypeId, - actions, - ...(notifyWhen ? { notify_when: notifyWhen, throttle: '5m' } : {}), - }) - .expect(200); - return body; - }, - - async disableRule({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) { - const { body } = await supertestWithoutAuth - .post(`/api/alerting/rule/${ruleId}/_disable`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .expect(204); - return body; - }, - - async updateEsQueryRule({ - roleAuthc, - ruleId, - updates, - }: { - roleAuthc: RoleCredentials; - ruleId: string; - updates: any; - }) { - const { body: r } = await supertestWithoutAuth - .get(`/api/alerting/rule/${ruleId}`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .expect(200); - const body = await supertestWithoutAuth - .put(`/api/alerting/rule/${ruleId}`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .send({ - ...{ - name: r.name, - schedule: r.schedule, - throttle: r.throttle, - tags: r.tags, - params: r.params, - notify_when: r.notifyWhen, - actions: r.actions.map((action: any) => ({ - group: action.group, - params: action.params, - id: action.id, - frequency: action.frequency, - })), - }, - ...updates, - }) - .expect(200); - return body; - }, - - async runRule({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) { - const response = await supertestWithoutAuth - .post(`/internal/alerting/rule/${ruleId}/_run_soon`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .expect(204); - return response; - }, - - async waitForNumRuleRuns({ - roleAuthc, - numOfRuns, - ruleId, - esClient, - testStart, - retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, - }: { - roleAuthc: RoleCredentials; - numOfRuns: number; - ruleId: string; - esClient: Client; - testStart: Date; - retryOptions?: TryWithRetriesOptions; - }) { - for (let i = 0; i < numOfRuns; i++) { - await retry.tryWithRetries( - `Alerting API - waitForNumRuleRuns, retryOptions: ${JSON.stringify(retryOptions)}`, - async () => { - await this.runRule({ roleAuthc, ruleId }); - await this.waiting.waitForExecutionEventLog({ - esClient, - filter: testStart, - ruleId, - num: i + 1, - }); - await this.waiting.waitForAllTasksIdle({ esClient, filter: testStart }); - }, - retryOptions - ); - } - }, - - async muteRule({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) { - const { body } = await supertestWithoutAuth - .post(`/api/alerting/rule/${ruleId}/_mute_all`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .expect(204); - return body; - }, - - async enableRule({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) { - const { body } = await supertestWithoutAuth - .post(`/api/alerting/rule/${ruleId}/_enable`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .expect(204); - return body; - }, - - async muteAlert({ - roleAuthc, - ruleId, - alertId, - }: { - roleAuthc: RoleCredentials; - ruleId: string; - alertId: string; - }) { - const { body } = await supertestWithoutAuth - .post(`/api/alerting/rule/${ruleId}/alert/${alertId}/_mute`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .expect(204); - return body; - }, - - async unmuteRule({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) { - const { body } = await supertestWithoutAuth - .post(`/api/alerting/rule/${ruleId}/_unmute_all`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .expect(204); - return body; - }, - - async snoozeRule({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) { - const { body } = await supertestWithoutAuth - .post(`/internal/alerting/rule/${ruleId}/_snooze`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .send({ - snooze_schedule: { - duration: 100000000, - rRule: { - count: 1, - dtstart: moment().format(), - tzid: 'UTC', - }, - }, - }) - .expect(204); - return body; - }, - - async findRule({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) { - if (!ruleId) { - throw new Error(`'ruleId' is undefined`); - } - const response = await supertestWithoutAuth - .get(`/api/alerting/rule/${ruleId}`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader); - return response.body || {}; - }, - - waiting: { - async waitForDocumentInIndex({ - esClient, - indexName, - ruleId, - num = 1, - sort = 'desc', - retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, - }: { - esClient: Client; - indexName: string; - ruleId: string; - num?: number; - sort?: 'asc' | 'desc'; - retryOptions?: TryWithRetriesOptions; - }): Promise { - return await retry.tryWithRetries( - `Alerting API - waiting.waitForDocumentInIndex, retryOptions: ${JSON.stringify( - retryOptions - )}`, - async () => { - const response = await esClient.search({ - index: indexName, - sort: `date:${sort}`, - body: { - query: { - bool: { - must: [ - { - term: { - 'ruleId.keyword': ruleId, - }, - }, - ], - }, - }, - }, - }); - if (response.hits.hits.length < num) { - throw new Error(`Only found ${response.hits.hits.length} / ${num} documents`); - } - return response; - }, - retryOptions - ); - }, - - async getDocumentsInIndex({ - esClient, - indexName, - ruleId, - }: { - esClient: Client; - indexName: string; - ruleId: string; - }): Promise { - return await esClient.search({ - index: indexName, - body: { - query: { - bool: { - must: [ - { - term: { - 'ruleId.keyword': ruleId, - }, - }, - ], - }, - }, - }, - }); - }, - - async waitForAllTasksIdle({ - esClient, - filter, - retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, - }: { - esClient: Client; - filter: Date; - retryOptions?: TryWithRetriesOptions; - }): Promise { - return await retry.tryWithRetries( - `Alerting API - waiting.waitForAllTasksIdle, retryOptions: ${JSON.stringify( - retryOptions - )}`, - async () => { - const response = await esClient.search({ - index: '.kibana_task_manager', - body: { - query: { - bool: { - must: [ - { - terms: { - 'task.scope': ['actions', 'alerting'], - }, - }, - { - range: { - 'task.scheduledAt': { - gte: filter.getTime().toString(), - }, - }, - }, - ], - must_not: [ - { - term: { - 'task.status': 'idle', - }, - }, - ], - }, - }, - }, - }); - if (response.hits.hits.length !== 0) { - throw new Error(`Expected 0 hits but received ${response.hits.hits.length}`); - } - return response; - }, - retryOptions - ); - }, - - async waitForExecutionEventLog({ - esClient, - filter, - ruleId, - num = 1, - retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, - }: { - esClient: Client; - filter: Date; - ruleId: string; - num?: number; - retryOptions?: TryWithRetriesOptions; - }): Promise { - return await retry.tryWithRetries( - `Alerting API - waiting.waitForExecutionEventLog, retryOptions: ${JSON.stringify( - retryOptions - )}`, - async () => { - const response = await esClient.search({ - index: '.kibana-event-log*', - body: { - query: { - bool: { - filter: [ - { - term: { - 'rule.id': { - value: ruleId, - }, - }, - }, - { - term: { - 'event.provider': { - value: 'alerting', - }, - }, - }, - { - term: { - 'event.action': 'execute', - }, - }, - { - range: { - '@timestamp': { - gte: filter.getTime().toString(), - }, - }, - }, - ], - }, - }, - }, - }); - if (response.hits.hits.length < num) { - throw new Error('No hits found'); - } - return response; - }, - retryOptions - ); - }, - - async createIndex({ esClient, indexName }: { esClient: Client; indexName: string }) { - return await esClient.indices.create( - { - index: indexName, - body: {}, - }, - { meta: true } - ); - }, - - async waitForAllTasks({ - esClient, - filter, - taskType, - attempts, - retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, - }: { - esClient: Client; - filter: Date; - taskType: string; - attempts: number; - retryOptions?: TryWithRetriesOptions; - }): Promise { - return await retry.tryWithRetries( - `Alerting API - waiting.waitForAllTasks, retryOptions: ${JSON.stringify(retryOptions)}`, - async () => { - const response = await esClient.search({ - index: '.kibana_task_manager', - body: { - query: { - bool: { - must: [ - { - term: { - 'task.status': 'idle', - }, - }, - { - term: { - 'task.attempts': attempts, - }, - }, - { - terms: { - 'task.scope': ['actions', 'alerting'], - }, - }, - { - term: { - 'task.taskType': taskType, - }, - }, - { - range: { - 'task.scheduledAt': { - gte: filter.getTime().toString(), - }, - }, - }, - ], - }, - }, - }, - }); - if (response.hits.hits.length === 0) { - throw new Error('No hits found'); - } - return response; - }, - retryOptions - ); - }, - - async waitForDisabled({ - esClient, - ruleId, - filter, - retryOptions = { retryCount: RETRY_COUNT, retryDelay: RETRY_DELAY }, - }: { - esClient: Client; - ruleId: string; - filter: Date; - retryOptions?: TryWithRetriesOptions; - }): Promise { - return await retry.tryWithRetries( - `Alerting API - waiting.waitForDisabled, retryOptions: ${JSON.stringify(retryOptions)}`, - async () => { - const response = await esClient.search({ - index: '.kibana_task_manager', - body: { - query: { - bool: { - must: [ - { - term: { - 'task.id': `task:${ruleId}`, - }, - }, - { - terms: { - 'task.scope': ['actions', 'alerting'], - }, - }, - { - range: { - 'task.scheduledAt': { - gte: filter.getTime().toString(), - }, - }, - }, - { - term: { - 'task.enabled': true, - }, - }, - ], - }, - }, - }, - }); - if (response.hits.hits.length !== 0) { - throw new Error(`Expected 0 hits but received ${response.hits.hits.length}`); - } - return response; - }, - retryOptions - ); - }, - }, - }; - - return { - helpers, - - async waitForRuleStatus({ - roleAuthc, - ruleId, - expectedStatus, - }: { - roleAuthc: RoleCredentials; - ruleId: string; - expectedStatus: string; - }) { - if (!ruleId) { - throw new Error(`'ruleId' is undefined`); - } - return await retry.tryForTime(retryTimeout, async () => { - const response = await supertestWithoutAuth - .get(`/api/alerting/rule/${ruleId}`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .timeout(requestTimeout); - const { execution_status: executionStatus } = response.body || {}; - const { status } = executionStatus || {}; - if (status !== expectedStatus) { - throw new Error(`waitForStatus(${expectedStatus}): got ${status}`); - } - return executionStatus?.status; - }); - }, - - async waitForDocumentInIndex({ - indexName, - docCountTarget = 1, - }: { - indexName: string; - docCountTarget?: number; - }): Promise>> { - return await retry.tryForTime(retryTimeout, async () => { - const response = await es.search({ - index: indexName, - rest_total_hits_as_int: true, - }); - logger.debug(`Found ${response.hits.total} docs, looking for at least ${docCountTarget}.`); - if (!response.hits.total || (response.hits.total as number) < docCountTarget) { - throw new Error('No hits found'); - } - return response; - }); - }, - - async waitForAlertInIndex({ - indexName, - ruleId, - }: { - indexName: string; - ruleId: string; - }): Promise>> { - if (!ruleId) { - throw new Error(`'ruleId' is undefined`); - } - return await retry.tryForTime(retryTimeout, async () => { - const response = await es.search({ - index: indexName, - body: { - query: { - term: { - 'kibana.alert.rule.uuid': ruleId, - }, - }, - }, - }); - if (response.hits.hits.length === 0) { - throw new Error('No hits found'); - } - return response; - }); - }, - - async createIndexConnector({ - roleAuthc, - name, - indexName, - }: { - roleAuthc: RoleCredentials; - name: string; - indexName: string; - }) { - const { body } = await supertestWithoutAuth - .post(`/api/actions/connector`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .send({ - name, - config: { - index: indexName, - refresh: true, - }, - connector_type_id: '.index', - }); - return body.id as string; - }, - - async createRule({ - roleAuthc, - name, - ruleTypeId, - params, - actions = [], - tags = [], - schedule, - consumer, - }: { - roleAuthc: RoleCredentials; - ruleTypeId: string; - name: string; - params: MetricThresholdParams | ThresholdParams | SloBurnRateRuleParams; - actions?: any[]; - tags?: any[]; - schedule?: { interval: string }; - consumer: string; - }) { - const { body } = await supertestWithoutAuth - .post(`/api/alerting/rule`) - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader) - .send({ - params, - consumer, - schedule: schedule || { - interval: '5m', - }, - tags, - name, - rule_type_id: ruleTypeId, - actions, - }); - return body; - }, - - async findRule(roleAuthc: RoleCredentials, ruleId: string) { - if (!ruleId) { - throw new Error(`'ruleId' is undefined`); - } - const response = await supertestWithoutAuth - .get('/api/alerting/rules/_find') - .set(svlCommonApi.getInternalRequestHeader()) - .set(roleAuthc.apiKeyHeader); - return response.body.data.find((obj: any) => obj.id === ruleId); - }, - }; -} diff --git a/x-pack/test_serverless/shared/services/deployment_agnostic_services.ts b/x-pack/test_serverless/shared/services/deployment_agnostic_services.ts index 2272890e52eb4..fa9a1671871a8 100644 --- a/x-pack/test_serverless/shared/services/deployment_agnostic_services.ts +++ b/x-pack/test_serverless/shared/services/deployment_agnostic_services.ts @@ -8,12 +8,12 @@ import _ from 'lodash'; import { services as apiIntegrationServices } from '@kbn/test-suites-xpack/api_integration/services'; -import { AlertingApiProvider } from './alerting_api'; +import { services as apiIntegrationDeploymentAgnosticServices } from '@kbn/test-suites-xpack/api_integration/deployment_agnostic/services'; /* * Some FTR services from api integration stateful tests are compatible with serverless environment * While adding a new one, make sure to verify that it works on both Kibana CI and MKI */ -const deploymentAgnosticApiIntegrationServices = _.pick(apiIntegrationServices, [ +const pickedServices = _.pick(apiIntegrationServices, [ 'deployment', 'es', 'esArchiver', @@ -34,6 +34,6 @@ const deploymentAgnosticApiIntegrationServices = _.pick(apiIntegrationServices, export const services = { // deployment agnostic FTR services - ...deploymentAgnosticApiIntegrationServices, - alertingApi: AlertingApiProvider, + ...pickedServices, + alertingApi: apiIntegrationDeploymentAgnosticServices.alertingApi, }; From 65014d1b6aba514ae29bb66f9ff2f869f8526d0a Mon Sep 17 00:00:00 2001 From: Elena Shostak <165678770+elena-shostak@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:53:04 +0200 Subject: [PATCH 15/60] Revert "[Spaces] Filtering out features that do not have space scope" (#194329) Reverts elastic/kibana#194157 --- .../create_space/create_space_page.test.tsx | 58 ------------------- .../create_space/create_space_page.tsx | 11 +--- 2 files changed, 2 insertions(+), 67 deletions(-) diff --git a/x-pack/plugins/spaces/public/management/create_space/create_space_page.test.tsx b/x-pack/plugins/spaces/public/management/create_space/create_space_page.test.tsx index 757e882bf741c..4c8617ff007b8 100644 --- a/x-pack/plugins/spaces/public/management/create_space/create_space_page.test.tsx +++ b/x-pack/plugins/spaces/public/management/create_space/create_space_page.test.tsx @@ -14,7 +14,6 @@ import { act } from 'react-dom/test-utils'; import { DEFAULT_APP_CATEGORIES } from '@kbn/core/public'; import { notificationServiceMock, scopedHistoryMock } from '@kbn/core/public/mocks'; -import { KibanaFeatureScope } from '@kbn/features-plugin/common'; import { KibanaFeature } from '@kbn/features-plugin/public'; import { featuresPluginMock } from '@kbn/features-plugin/public/mocks'; import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; @@ -49,15 +48,6 @@ featuresStart.getFeatures.mockResolvedValue([ app: [], category: DEFAULT_APP_CATEGORIES.kibana, privileges: null, - scope: [KibanaFeatureScope.Spaces, KibanaFeatureScope.Security], - }), - new KibanaFeature({ - id: 'feature-2', - name: 'feature 2', - app: [], - category: DEFAULT_APP_CATEGORIES.kibana, - privileges: null, - scope: [KibanaFeatureScope.Security], }), ]); @@ -651,54 +641,6 @@ describe('ManageSpacePage', () => { expect(spacesManager.updateSpace).toHaveBeenCalledTimes(1); }); - - it('shows only features with space scope', async () => { - const spacesManager = spacesManagerMock.create(); - spacesManager.getSpace = jest.fn().mockResolvedValue({ - id: 'my-space', - name: 'Existing Space', - description: 'hey an existing space', - color: '#aabbcc', - initials: 'AB', - disabledFeatures: [], - }); - spacesManager.getActiveSpace = jest.fn().mockResolvedValue(space); - - const wrapper = mountWithIntl( - - ); - - await waitFor(() => { - wrapper.update(); - expect(spacesManager.getSpace).toHaveBeenCalledWith('my-space'); - }); - - expect(wrapper.state('features')).toEqual([ - new KibanaFeature({ - id: 'feature-1', - name: 'feature 1', - app: [], - category: DEFAULT_APP_CATEGORIES.kibana, - privileges: null, - scope: [KibanaFeatureScope.Spaces, KibanaFeatureScope.Security], - }), - ]); - }); }); function updateSpace( diff --git a/x-pack/plugins/spaces/public/management/create_space/create_space_page.tsx b/x-pack/plugins/spaces/public/management/create_space/create_space_page.tsx index ed0e52edd6c4b..e8204a53fe345 100644 --- a/x-pack/plugins/spaces/public/management/create_space/create_space_page.tsx +++ b/x-pack/plugins/spaces/public/management/create_space/create_space_page.tsx @@ -22,7 +22,6 @@ import React, { Component } from 'react'; import type { Capabilities, NotificationsStart, ScopedHistory } from '@kbn/core/public'; import { SectionLoading } from '@kbn/es-ui-shared-plugin/public'; -import { KibanaFeatureScope } from '@kbn/features-plugin/common'; import type { FeaturesPluginStart, KibanaFeature } from '@kbn/features-plugin/public'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -92,10 +91,6 @@ export class CreateSpacePage extends Component { }; } - private filterSpaceFeatures = (features: KibanaFeature[]) => { - return features.filter((feature) => feature.scope?.includes(KibanaFeatureScope.Spaces)); - }; - public async componentDidMount() { if (!this.props.capabilities.spaces.manage) { return; @@ -108,8 +103,7 @@ export class CreateSpacePage extends Component { await this.loadSpace(spaceId, getFeatures()); } else { const features = await getFeatures(); - - this.setState({ isLoading: false, features: this.filterSpaceFeatures(features) }); + this.setState({ isLoading: false, features }); } } catch (e) { notifications.toasts.addError(e, { @@ -416,7 +410,6 @@ export class CreateSpacePage extends Component { spacesManager.getSpace(spaceId), featuresPromise, ]); - if (space) { if (onLoadSpace) { onLoadSpace(space); @@ -433,7 +426,7 @@ export class CreateSpacePage extends Component { !!space.initials && getSpaceInitials({ name: space.name }) !== space.initials, customAvatarColor: !!space.color && getSpaceColor({ name: space.name }) !== space.color, }, - features: this.filterSpaceFeatures(features), + features, originalSpace: space, isLoading: false, }); From 23effbedd4f88219b71088b34d8e9221527e7a91 Mon Sep 17 00:00:00 2001 From: Anton Dosov Date: Mon, 30 Sep 2024 12:24:09 +0200 Subject: [PATCH 16/60] [TableListView] Fix letters are skipped when typing fast (#194009) --- .../src/table_list_view.test.tsx | 122 ++++++++---------- .../src/table_list_view_table.tsx | 22 ++-- .../src/use_url_state.ts | 28 ++-- 3 files changed, 76 insertions(+), 96 deletions(-) diff --git a/packages/content-management/table_list_view_table/src/table_list_view.test.tsx b/packages/content-management/table_list_view_table/src/table_list_view.test.tsx index 50c8cdfdfde3b..a4e06fbb1e4a4 100644 --- a/packages/content-management/table_list_view_table/src/table_list_view.test.tsx +++ b/packages/content-management/table_list_view_table/src/table_list_view.test.tsx @@ -1222,37 +1222,41 @@ describe('TableListView', () => { describe('url state', () => { let router: Router | undefined; - const setupTagFiltering = registerTestBed( - WithServices(TableListViewTable, { - getTagList: () => [ - { - id: 'id-tag-1', - name: 'tag-1', - type: 'tag', - description: '', - color: '', - managed: false, - }, - { - id: 'id-tag-2', - name: 'tag-2', - type: 'tag', - description: '', - color: '', - managed: false, - }, - ], - }), - { - defaultProps: { ...requiredProps, urlStateEnabled: true }, - memoryRouter: { - wrapComponent: true, - onRouter: (_router: Router) => { - router = _router; + const setupInitialUrl = (initialSearchQuery: string = '') => + registerTestBed( + WithServices(TableListViewTable, { + getTagList: () => [ + { + id: 'id-tag-1', + name: 'tag-1', + type: 'tag', + description: '', + color: '', + managed: false, + }, + { + id: 'id-tag-2', + name: 'tag-2', + type: 'tag', + description: '', + color: '', + managed: false, + }, + ], + }), + { + defaultProps: { ...requiredProps, urlStateEnabled: true }, + memoryRouter: { + wrapComponent: true, + initialEntries: [{ search: initialSearchQuery }], + onRouter: (_router: Router) => { + router = _router; + }, }, - }, - } - ); + } + ); + + const setupTagFiltering = setupInitialUrl(); const hits: UserContentCommonSchema[] = [ { @@ -1277,13 +1281,13 @@ describe('TableListView', () => { }, ]; - test('should read search term from URL', async () => { + test('should read the initial search term from URL', async () => { let testBed: TestBed; const findItems = jest.fn().mockResolvedValue({ total: hits.length, hits: [...hits] }); await act(async () => { - testBed = await setupTagFiltering({ + testBed = await setupInitialUrl('?s=hello')({ findItems, }); }); @@ -1294,22 +1298,23 @@ describe('TableListView', () => { const getSearchBoxValue = () => find('tableListSearchBox').props().defaultValue; // Start with empty search box - expect(getSearchBoxValue()).toBe(''); - expect(router?.history.location?.search).toBe(''); + expect(getSearchBoxValue()).toBe('hello'); + expect(router?.history.location?.search).toBe('?s=hello'); // Change the URL await act(async () => { if (router?.history.push) { router.history.push({ - search: `?${queryString.stringify({ s: 'hello' }, { encode: false })}`, + search: `?${queryString.stringify({ s: '' }, { encode: false })}`, }); } }); + component.update(); - // Search box is updated + // Search box is not updated expect(getSearchBoxValue()).toBe('hello'); - expect(router?.history.location?.search).toBe('?s=hello'); + expect(router?.history.location?.search).toBe('?s='); }); test('should update the URL when changing the search term', async () => { @@ -1338,13 +1343,15 @@ describe('TableListView', () => { expect(router?.history.location?.search).toBe('?s=search-changed'); }); - test('should filter by tag from the URL', async () => { + test('should filter by initial tag from the URL', async () => { let testBed: TestBed; const findItems = jest.fn().mockResolvedValue({ total: hits.length, hits: [...hits] }); await act(async () => { - testBed = await setupTagFiltering({ + testBed = await setupInitialUrl( + `?${queryString.stringify({ s: 'tag:(tag-2)' }, { encode: false })}` + )({ findItems, }); }); @@ -1357,7 +1364,7 @@ describe('TableListView', () => { const getSearchBoxValue = () => find('tableListSearchBox').props().defaultValue; - let expected = ''; + let expected = 'tag:(tag-2)'; let [searchTerm] = getLastCallArgsFromFindItems(); expect(getSearchBoxValue()).toBe(expected); expect(searchTerm).toBe(expected); @@ -1366,13 +1373,13 @@ describe('TableListView', () => { await act(async () => { if (router?.history.push) { router.history.push({ - search: `?${queryString.stringify({ s: 'tag:(tag-2)' }, { encode: false })}`, + search: `?${queryString.stringify({ s: '' }, { encode: false })}`, }); } }); component.update(); - // The search bar should be updated + // The search bar shouldn't be updated expected = 'tag:(tag-2)'; [searchTerm] = getLastCallArgsFromFindItems(); expect(getSearchBoxValue()).toBe(expected); @@ -1413,13 +1420,15 @@ describe('TableListView', () => { expect(router?.history.location?.search).toBe('?s=tag:(tag-2)'); }); - test('should set sort column and direction from URL', async () => { + test('should set initial sort column and direction from URL', async () => { let testBed: TestBed; const findItems = jest.fn().mockResolvedValue({ total: hits.length, hits: [...hits] }); await act(async () => { - testBed = await setupTagFiltering({ + testBed = await setupInitialUrl( + `?${queryString.stringify({ sort: 'updatedAt', sortdir: 'asc' })}` + )({ findItems, }); }); @@ -1427,37 +1436,18 @@ describe('TableListView', () => { const { component, table } = testBed!; component.update(); - // Start with empty search box - expect(router?.history.location?.search).toBe(''); - let { tableCellsValues } = table.getMetaData('itemsInMemTable'); expect(tableCellsValues).toEqual([ - ['Item 1tag-1', yesterdayToString], ['Item 2tag-2', twoDaysAgoToString], - ]); - - // Change the URL - await act(async () => { - if (router?.history.push) { - router.history.push({ - search: `?${queryString.stringify({ sort: 'updatedAt', sortdir: 'asc' })}`, - }); - } - }); - component.update(); - - ({ tableCellsValues } = table.getMetaData('itemsInMemTable')); - - expect(tableCellsValues).toEqual([ - ['Item 2tag-2', twoDaysAgoToString], // Sort got inverted ['Item 1tag-1', yesterdayToString], ]); + // Change the URL await act(async () => { if (router?.history.push) { router.history.push({ - search: `?${queryString.stringify({ sort: 'title' })}`, // if dir not specified, asc by default + search: `?${queryString.stringify({ sort: 'updatedAt', sortdir: 'desc' })}`, }); } }); @@ -1466,8 +1456,8 @@ describe('TableListView', () => { ({ tableCellsValues } = table.getMetaData('itemsInMemTable')); expect(tableCellsValues).toEqual([ - ['Item 1tag-1', yesterdayToString], ['Item 2tag-2', twoDaysAgoToString], + ['Item 1tag-1', yesterdayToString], // Sort stayed the same ]); }); diff --git a/packages/content-management/table_list_view_table/src/table_list_view_table.tsx b/packages/content-management/table_list_view_table/src/table_list_view_table.tsx index 504440d27406e..0f6df7c81533b 100644 --- a/packages/content-management/table_list_view_table/src/table_list_view_table.tsx +++ b/packages/content-management/table_list_view_table/src/table_list_view_table.tsx @@ -384,7 +384,7 @@ function TableListViewTableComp({ ); } - const [urlState, setUrlState] = useUrlState({ + const [initialUrlState, setUrlState] = useUrlState({ queryParamsDeserializer: urlStateDeserializer, queryParamsSerializer: urlStateSerializer, }); @@ -495,7 +495,6 @@ function TableListViewTableComp({ (query: Query) => { if (urlStateEnabled) { setUrlState({ s: query.text }); - return; } dispatch({ @@ -849,12 +848,10 @@ function TableListViewTableComp({ }); } - if (data.page || !urlStateEnabled) { - dispatch({ - type: 'onTableChange', - data, - }); - } + dispatch({ + type: 'onTableChange', + data, + }); }, [setUrlState, urlStateEnabled] ); @@ -1024,6 +1021,7 @@ function TableListViewTableComp({ // ------------ useDebounce(fetchItems, 300, [fetchItems, refreshListBouncer]); + // set the initial state from the URL useEffect(() => { if (!urlStateEnabled) { return; @@ -1075,10 +1073,10 @@ function TableListViewTableComp({ }); }; - updateQueryFromURL(urlState.s); - updateSortFromURL(urlState.sort); - updateFilterFromURL(urlState.filter); - }, [urlState, buildQueryFromText, urlStateEnabled]); + updateQueryFromURL(initialUrlState.s); + updateSortFromURL(initialUrlState.sort); + updateFilterFromURL(initialUrlState.filter); + }, [initialUrlState, buildQueryFromText, urlStateEnabled]); useEffect(() => { isMounted.current = true; diff --git a/packages/content-management/table_list_view_table/src/use_url_state.ts b/packages/content-management/table_list_view_table/src/use_url_state.ts index 466fdd6ece09a..8b06a7cd98a2c 100644 --- a/packages/content-management/table_list_view_table/src/use_url_state.ts +++ b/packages/content-management/table_list_view_table/src/use_url_state.ts @@ -8,8 +8,8 @@ */ import queryString from 'query-string'; -import { useCallback, useMemo, useState, useEffect } from 'react'; -import { useLocation, useHistory } from 'react-router-dom'; +import { useCallback, useState } from 'react'; +import { useHistory, useLocation } from 'react-router-dom'; export function useInRouterContext() { try { @@ -20,11 +20,6 @@ export function useInRouterContext() { } } -function useQuery = {}>() { - const { search } = useLocation(); - return useMemo(() => queryString.parse(search) as T, [search]); -} - export function useUrlState< T extends Record = {}, Q extends Record = {} @@ -36,15 +31,17 @@ export function useUrlState< queryParamsSerializer: (params: Record) => Partial; }): [T, (updated: Record) => void] { const history = useHistory(); - const params = useQuery(); - const [urlState, setUrlState] = useState({} as T); - const updateQuerParams = useCallback( + const [initialUrlState] = useState(() => + queryParamsDeserializer(queryString.parse(history.location.search) as Q) + ); + + const updateQueryParams = useCallback( (updated: Record) => { const updatedQuery = queryParamsSerializer(updated); const queryParams = { - ...params, + ...queryString.parse(history.location.search), ...updatedQuery, }; @@ -52,13 +49,8 @@ export function useUrlState< search: `?${queryString.stringify(queryParams, { encode: false })}`, }); }, - [history, params, queryParamsSerializer] + [history, queryParamsSerializer] ); - useEffect(() => { - const updatedState = queryParamsDeserializer(params); - setUrlState(updatedState); - }, [params, queryParamsDeserializer]); - - return [urlState, updateQuerParams]; + return [initialUrlState, updateQueryParams]; } From 26f5e1482b23548d1b06bec9e5fedf7dfa93a620 Mon Sep 17 00:00:00 2001 From: Irene Blanco Date: Mon, 30 Sep 2024 12:37:37 +0200 Subject: [PATCH 17/60] [Inventory] Use observability:entitycentricexperience to enable + side nav adjustments (#193533) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Closes https://github.com/elastic/kibana/issues/192323 and https://github.com/elastic/kibana/issues/193393. ### Plugin enablement The enablement of the new Inventory plugin was previously managed via the `xpack.inventory.enabled` setting in kibana.yml. With this PR, we transition to enabling it through the `observability:entitycentricexperience` advanced setting. ### Position in side nav Additionally, this PR includes adjustments to the placement of the new Inventory page within the side navigation and the addition of the "Tech Preview" badge in the navigation where it was supported. |Navigation|Screenshot| |-|-| |Stateful classic (first nav)|![Screenshot 2024-09-25 at 11 25 46](https://github.com/user-attachments/assets/54e92632-9931-4f5b-8648-8a32afcd0caf)| |Stateful classic (O11y)|![Screenshot 2024-09-25 at 11 25 56](https://github.com/user-attachments/assets/ae644eb2-2559-4be0-8659-ef709399a871)| |Stateful new O11y|![Screenshot 2024-09-25 at 11 27 52](https://github.com/user-attachments/assets/c404232c-2630-4220-9bb8-315b0f0fc55f)| |Serverless|![Screenshot 2024-09-25 at 11 23 07](https://github.com/user-attachments/assets/7f7e6c79-7f0f-4f7d-8fed-260d73ad4d3f)| ### Global search A modification was made to the global search to prevent a duplicate result from appearing during searches by removing the deeplinks when registering the plugin. The UI changes are shown below. >[!WARNING] If this modification causes any other issues, please let me know in a comment. |With deeplink (before)|Without deeplink (after)| |-|-| |![global_search_with_deeplink](https://github.com/user-attachments/assets/3ef5641c-3add-4892-af2f-46f72ff1722e)|![global_search_without_deeplink](https://github.com/user-attachments/assets/8ad92f27-13a2-4b85-8958-588e597f94d9)| ### Services rename to Service Inventory Another needed change was to rename the nav item Services to Service Inventory >[!NOTE] Screenshots were taken before the navigation sorting was agreed with product, so the "Inventory" item does not appear in the right position. |Navigation|Screenshot| |-|-| |Stateful classic (O11y)|![services_stateful_classic](https://github.com/user-attachments/assets/25ed1294-40fe-47be-9319-fe294acce8f8)| |Stateful new O11y|![services_stateful_new](https://github.com/user-attachments/assets/4ae9495c-56bc-4327-b2f6-b6ac9f68bd21)| |Serverless|![services_serverless](https://github.com/user-attachments/assets/81ff51f4-3b0e-41fd-b7c6-79e8aa44e575)| >[!NOTE] The rename of infra Inventory to Infrastructure Inventory is being tracked separately in https://github.com/elastic/kibana/issues/192324. ### Tech preview badge in page Lastly, the "Technical Preview" badge has been added to the page title. >[!NOTE] The screenshot was taken before the navigation sorting was agreed with product, so the "Inventory" item does not appear in the right position. ![inventory_title_badge](https://github.com/user-attachments/assets/172c5b8e-258e-4127-b792-40910e9dede0) ### Plugin registration in server To make the Inventory available in the spaces and privileges configuration the plugin has been registered in the features service. >[!WARNING] I lack detailed context in this area, so I’ve added default empty configurations for most attributes. If any adjustments or improvements are needed, please let me know. |Space config|Privileges| |-|-| |![Screenshot 2024-09-23 at 10 57 35](https://github.com/user-attachments/assets/1c3a45b6-fd67-4706-8fc4-ee42a9206787)|![Screenshot 2024-09-23 at 10 57 14](https://github.com/user-attachments/assets/a852c15d-133c-459d-be77-2d73e662ffdb)| --------- Co-authored-by: Kate Patticha Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../collectors/application_usage/schema.ts | 1 + src/plugins/telemetry/schema/oss_plugins.json | 131 ++++++++++++++++++ .../apm/ftr_e2e/cypress/e2e/deep_links.cy.ts | 4 +- .../apm/public/plugin.ts | 2 +- .../inventory/kibana.jsonc | 6 +- .../inventory_page_template/index.tsx | 31 +++-- .../inventory/public/plugin.ts | 73 +++++----- .../inventory/server/config.ts | 2 +- .../inventory/server/feature.ts | 64 +++++++++ .../inventory/server/plugin.ts | 4 + .../inventory/server/types.ts | 2 + .../inventory/tsconfig.json | 5 +- .../observability/public/navigation_tree.ts | 7 +- .../public/navigation_tree.ts | 1 + .../apis/features/features/features.ts | 2 + .../apis/security/privileges.ts | 1 + .../apis/security/privileges_basic.ts | 2 + .../spaces_only/telemetry/telemetry.ts | 1 + 18 files changed, 282 insertions(+), 57 deletions(-) create mode 100644 x-pack/plugins/observability_solution/inventory/server/feature.ts diff --git a/src/plugins/kibana_usage_collection/server/collectors/application_usage/schema.ts b/src/plugins/kibana_usage_collection/server/collectors/application_usage/schema.ts index 87318e6c95fe8..06866afc65caa 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/application_usage/schema.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/application_usage/schema.ts @@ -152,6 +152,7 @@ export const applicationUsageSchema = { fleet: commonSchema, integrations: commonSchema, ingestManager: commonSchema, + inventory: commonSchema, lens: commonSchema, maps: commonSchema, ml: commonSchema, diff --git a/src/plugins/telemetry/schema/oss_plugins.json b/src/plugins/telemetry/schema/oss_plugins.json index 37507c50e832c..82e7666018782 100644 --- a/src/plugins/telemetry/schema/oss_plugins.json +++ b/src/plugins/telemetry/schema/oss_plugins.json @@ -4194,6 +4194,137 @@ } } }, + "inventory": { + "properties": { + "appId": { + "type": "keyword", + "_meta": { + "description": "The application being tracked" + } + }, + "viewId": { + "type": "keyword", + "_meta": { + "description": "Always `main`" + } + }, + "clicks_total": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application since we started counting them" + } + }, + "clicks_7_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application over the last 7 days" + } + }, + "clicks_30_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application over the last 30 days" + } + }, + "clicks_90_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application over the last 90 days" + } + }, + "minutes_on_screen_total": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen since we started counting them." + } + }, + "minutes_on_screen_7_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen over the last 7 days" + } + }, + "minutes_on_screen_30_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen over the last 30 days" + } + }, + "minutes_on_screen_90_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen over the last 90 days" + } + }, + "views": { + "type": "array", + "items": { + "properties": { + "appId": { + "type": "keyword", + "_meta": { + "description": "The application being tracked" + } + }, + "viewId": { + "type": "keyword", + "_meta": { + "description": "The application view being tracked" + } + }, + "clicks_total": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application sub view since we started counting them" + } + }, + "clicks_7_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the active application sub view over the last 7 days" + } + }, + "clicks_30_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the active application sub view over the last 30 days" + } + }, + "clicks_90_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the active application sub view over the last 90 days" + } + }, + "minutes_on_screen_total": { + "type": "float", + "_meta": { + "description": "Minutes the application sub view is active and on-screen since we started counting them." + } + }, + "minutes_on_screen_7_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen active application sub view over the last 7 days" + } + }, + "minutes_on_screen_30_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen active application sub view over the last 30 days" + } + }, + "minutes_on_screen_90_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen active application sub view over the last 90 days" + } + } + } + } + } + } + }, "lens": { "properties": { "appId": { diff --git a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/deep_links.cy.ts b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/deep_links.cy.ts index e7c75652c7d03..32ff06d1b3c6b 100644 --- a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/deep_links.cy.ts +++ b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/deep_links.cy.ts @@ -16,7 +16,7 @@ describe('APM deep links', () => { .type('APM', { force: true, delay: 100 }) .focus(); cy.contains('APM'); - cy.contains('APM / Services'); + cy.contains('APM / Service Inventory'); cy.contains('APM / Service groups'); cy.contains('APM / Traces'); cy.contains('APM / Service Map'); @@ -33,7 +33,7 @@ describe('APM deep links', () => { .should('be.visible') .type('APM', { force: true, delay: 100 }); // navigates to services page - cy.contains('APM / Services').click({ force: true }); + cy.contains('APM / Service Inventory').click({ force: true }); cy.url().should('include', '/apm/services'); cy.getByTestSubj('nav-search-input') diff --git a/x-pack/plugins/observability_solution/apm/public/plugin.ts b/x-pack/plugins/observability_solution/apm/public/plugin.ts index c429fdaeb9ec5..f58b9d6d40969 100644 --- a/x-pack/plugins/observability_solution/apm/public/plugin.ts +++ b/x-pack/plugins/observability_solution/apm/public/plugin.ts @@ -156,7 +156,7 @@ const applicationsTitle = i18n.translate('xpack.apm.navigation.rootTitle', { }); const servicesTitle = i18n.translate('xpack.apm.navigation.servicesTitle', { - defaultMessage: 'Services', + defaultMessage: 'Service Inventory', }); const serviceGroupsTitle = i18n.translate('xpack.apm.navigation.serviceGroupsTitle', { diff --git a/x-pack/plugins/observability_solution/inventory/kibana.jsonc b/x-pack/plugins/observability_solution/inventory/kibana.jsonc index 524b59d37cc34..f60cf36183b24 100644 --- a/x-pack/plugins/observability_solution/inventory/kibana.jsonc +++ b/x-pack/plugins/observability_solution/inventory/kibana.jsonc @@ -12,13 +12,13 @@ "entityManager", "inference", "dataViews", + "share", + "features", "unifiedSearch", "data", "share" ], - "requiredBundles": [ - "kibanaReact" - ], + "requiredBundles": ["kibanaReact"], "optionalPlugins": [], "extraPublicDirs": [] } diff --git a/x-pack/plugins/observability_solution/inventory/public/components/inventory_page_template/index.tsx b/x-pack/plugins/observability_solution/inventory/public/components/inventory_page_template/index.tsx index c2734d6643553..29a6ac31348b4 100644 --- a/x-pack/plugins/observability_solution/inventory/public/components/inventory_page_template/index.tsx +++ b/x-pack/plugins/observability_solution/inventory/public/components/inventory_page_template/index.tsx @@ -4,10 +4,10 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; -import { EuiEmptyPrompt, EuiLoadingLogo } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiEmptyPrompt, EuiLoadingLogo } from '@elastic/eui'; +import { TechnicalPreviewBadge } from '@kbn/observability-shared-plugin/public'; import { useKibana } from '../../hooks/use_kibana'; import { SearchBar } from '../search_bar'; import { getEntityManagerEnablement } from './no_data_config'; @@ -16,11 +16,18 @@ import { Welcome } from '../entity_enablement/welcome_modal'; import { useInventoryAbortableAsync } from '../../hooks/use_inventory_abortable_async'; import { EmptyState } from '../empty_states/empty_state'; -const pageTitle = { - pageTitle: i18n.translate('xpack.inventory.inventoryPageHeaderLabel', { - defaultMessage: 'Inventory', - }), -}; +const pageTitle = ( + + + {i18n.translate('xpack.inventory.inventoryPageHeaderLabel', { + defaultMessage: 'Inventory', + })} + + + + + +); export function InventoryPageTemplate({ children }: { children: React.ReactNode }) { const { @@ -52,7 +59,11 @@ export function InventoryPageTemplate({ children }: { children: React.ReactNode if (isEnablementLoading || hasDataLoading) { return ( - + } /> ); @@ -60,12 +71,14 @@ export function InventoryPageTemplate({ children }: { children: React.ReactNode return ( {value.hasData ? ( diff --git a/x-pack/plugins/observability_solution/inventory/public/plugin.ts b/x-pack/plugins/observability_solution/inventory/public/plugin.ts index 6f05d4594d152..c02a57b45f691 100644 --- a/x-pack/plugins/observability_solution/inventory/public/plugin.ts +++ b/x-pack/plugins/observability_solution/inventory/public/plugin.ts @@ -12,6 +12,7 @@ import { DEFAULT_APP_CATEGORIES, Plugin, PluginInitializerContext, + AppStatus, } from '@kbn/core/public'; import { INVENTORY_APP_ID } from '@kbn/deeplinks-observability/constants'; import { i18n } from '@kbn/i18n'; @@ -49,33 +50,39 @@ export class InventoryPlugin pluginsSetup: InventorySetupDependencies ): InventoryPublicSetup { const inventoryAPIClient = createCallInventoryAPI(coreSetup); - this.telemetry.setup({ analytics: coreSetup.analytics }); - - pluginsSetup.observabilityShared.navigation.registerSections( - from(coreSetup.getStartServices()).pipe( - map(([coreStart, pluginsStart]) => { - return [ - { - label: '', - sortKey: 101, - entries: [ - { - label: i18n.translate('xpack.inventory.inventoryLinkTitle', { - defaultMessage: 'Inventory', - }), - app: INVENTORY_APP_ID, - path: '/', - matchPath(currentPath: string) { - return ['/', ''].some((testPath) => currentPath.startsWith(testPath)); - }, - }, - ], - }, - ]; - }) - ) + const isEntityCentricExperienceSettingEnabled = coreSetup.uiSettings.get( + 'observability:entityCentricExperience', + true ); + if (isEntityCentricExperienceSettingEnabled) { + pluginsSetup.observabilityShared.navigation.registerSections( + from(coreSetup.getStartServices()).pipe( + map(([coreStart, pluginsStart]) => { + return [ + { + label: '', + sortKey: 300, + entries: [ + { + label: i18n.translate('xpack.inventory.inventoryLinkTitle', { + defaultMessage: 'Inventory', + }), + app: INVENTORY_APP_ID, + path: '/', + matchPath(currentPath: string) { + return ['/', ''].some((testPath) => currentPath.startsWith(testPath)); + }, + isTechnicalPreview: true, + }, + ], + }, + ]; + }) + ) + ); + } + this.telemetry.setup({ analytics: coreSetup.analytics }); const telemetry = this.telemetry.start(); coreSetup.application.register({ @@ -86,17 +93,11 @@ export class InventoryPlugin euiIconType: 'logoObservability', appRoute: '/app/observability/inventory', category: DEFAULT_APP_CATEGORIES.observability, - visibleIn: ['sideNav'], - order: 8001, - deepLinks: [ - { - id: 'inventory', - title: i18n.translate('xpack.inventory.inventoryDeepLinkTitle', { - defaultMessage: 'Inventory', - }), - path: '/', - }, - ], + visibleIn: ['sideNav', 'globalSearch'], + order: 8200, + status: isEntityCentricExperienceSettingEnabled + ? AppStatus.accessible + : AppStatus.inaccessible, mount: async (appMountParameters: AppMountParameters) => { // Load application bundle and Get start services const [{ renderApp }, [coreStart, pluginsStart]] = await Promise.all([ diff --git a/x-pack/plugins/observability_solution/inventory/server/config.ts b/x-pack/plugins/observability_solution/inventory/server/config.ts index 2d6d7604b40e1..36f19bd6579a7 100644 --- a/x-pack/plugins/observability_solution/inventory/server/config.ts +++ b/x-pack/plugins/observability_solution/inventory/server/config.ts @@ -8,7 +8,7 @@ import { schema, type TypeOf } from '@kbn/config-schema'; export const config = schema.object({ - enabled: schema.boolean({ defaultValue: false }), + enabled: schema.boolean({ defaultValue: true }), }); export type InventoryConfig = TypeOf; diff --git a/x-pack/plugins/observability_solution/inventory/server/feature.ts b/x-pack/plugins/observability_solution/inventory/server/feature.ts new file mode 100644 index 0000000000000..2b3f2e92a44de --- /dev/null +++ b/x-pack/plugins/observability_solution/inventory/server/feature.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; +import { KibanaFeatureScope } from '@kbn/features-plugin/common'; + +const INVENTORY_SERVER_FEATURE_ID = 'inventory'; + +export const INVENTORY_SERVER_FEATURE = { + id: INVENTORY_SERVER_FEATURE_ID, + name: i18n.translate('xpack.inventory.featureRegistry.inventoryFeatureName', { + defaultMessage: 'Inventory', + }), + order: 1000, + category: DEFAULT_APP_CATEGORIES.observability, + scope: [KibanaFeatureScope.Spaces, KibanaFeatureScope.Security], + app: [INVENTORY_SERVER_FEATURE_ID], + catalogue: [INVENTORY_SERVER_FEATURE_ID], + alerting: [], + // see x-pack/plugins/features/common/feature_kibana_privileges.ts + privileges: { + all: { + app: [INVENTORY_SERVER_FEATURE_ID], + api: [INVENTORY_SERVER_FEATURE_ID], + catalogue: [INVENTORY_SERVER_FEATURE_ID], + savedObject: { + all: [], + read: [], + }, + alerting: { + alert: { + all: [], + }, + rule: { + all: [], + }, + }, + ui: ['show', 'save'], + }, + read: { + app: [INVENTORY_SERVER_FEATURE_ID], + api: [INVENTORY_SERVER_FEATURE_ID], + catalogue: [INVENTORY_SERVER_FEATURE_ID], + savedObject: { + all: [], + read: [], + }, + alerting: { + alert: { + read: [], + }, + rule: { + read: [], + }, + }, + ui: ['show'], + }, + }, +}; diff --git a/x-pack/plugins/observability_solution/inventory/server/plugin.ts b/x-pack/plugins/observability_solution/inventory/server/plugin.ts index 1ac928b72cdb2..642dd12769fb4 100644 --- a/x-pack/plugins/observability_solution/inventory/server/plugin.ts +++ b/x-pack/plugins/observability_solution/inventory/server/plugin.ts @@ -17,6 +17,7 @@ import type { InventorySetupDependencies, InventoryStartDependencies, } from './types'; +import { INVENTORY_SERVER_FEATURE } from './feature'; export class InventoryPlugin implements @@ -55,6 +56,9 @@ export class InventoryPlugin }) as unknown as InventoryRouteHandlerResources['plugins'], }, }); + + pluginsSetup.features.registerKibanaFeature(INVENTORY_SERVER_FEATURE); + return {}; } diff --git a/x-pack/plugins/observability_solution/inventory/server/types.ts b/x-pack/plugins/observability_solution/inventory/server/types.ts index a58bd62fe57a9..05f75561674c6 100644 --- a/x-pack/plugins/observability_solution/inventory/server/types.ts +++ b/x-pack/plugins/observability_solution/inventory/server/types.ts @@ -13,6 +13,7 @@ import type { DataViewsServerPluginSetup, DataViewsServerPluginStart, } from '@kbn/data-views-plugin/server'; +import { FeaturesPluginSetup } from '@kbn/features-plugin/server'; /* eslint-disable @typescript-eslint/no-empty-interface*/ export interface ConfigSchema {} @@ -21,6 +22,7 @@ export interface InventorySetupDependencies { entityManager: EntityManagerServerPluginSetup; inference: InferenceServerSetup; dataViews: DataViewsServerPluginSetup; + features: FeaturesPluginSetup; } export interface InventoryStartDependencies { diff --git a/x-pack/plugins/observability_solution/inventory/tsconfig.json b/x-pack/plugins/observability_solution/inventory/tsconfig.json index c4b6b55d41f4c..163e87108bf75 100644 --- a/x-pack/plugins/observability_solution/inventory/tsconfig.json +++ b/x-pack/plugins/observability_solution/inventory/tsconfig.json @@ -16,7 +16,6 @@ "kbn_references": [ "@kbn/core", "@kbn/logging", - "@kbn/config-schema", "@kbn/observability-shared-plugin", "@kbn/server-route-repository", "@kbn/shared-ux-link-redirect-app", @@ -40,7 +39,9 @@ "@kbn/data-plugin", "@kbn/core-analytics-browser", "@kbn/core-http-browser", + "@kbn/shared-svg", + "@kbn/features-plugin", "@kbn/es-query", - "@kbn/shared-svg" + "@kbn/config-schema" ] } diff --git a/x-pack/plugins/observability_solution/observability/public/navigation_tree.ts b/x-pack/plugins/observability_solution/observability/public/navigation_tree.ts index 309d2f2264300..353f1258fc7b8 100644 --- a/x-pack/plugins/observability_solution/observability/public/navigation_tree.ts +++ b/x-pack/plugins/observability_solution/observability/public/navigation_tree.ts @@ -67,9 +67,6 @@ export function createNavTree(pluginsStart: ObservabilityPublicPluginsStart) { { link: 'slo', }, - { - link: 'inventory', - }, { id: 'aiMl', title: i18n.translate('xpack.observability.obltNav.ml.aiAndMlGroupTitle', { @@ -132,6 +129,10 @@ export function createNavTree(pluginsStart: ObservabilityPublicPluginsStart) { }, ], }, + { + link: 'inventory', + spaceBefore: 'm', + }, { id: 'apm', title: i18n.translate('xpack.observability.obltNav.applications', { diff --git a/x-pack/plugins/serverless_observability/public/navigation_tree.ts b/x-pack/plugins/serverless_observability/public/navigation_tree.ts index 135c687655e2e..e3c61ec0b29e3 100644 --- a/x-pack/plugins/serverless_observability/public/navigation_tree.ts +++ b/x-pack/plugins/serverless_observability/public/navigation_tree.ts @@ -121,6 +121,7 @@ export const navigationTree: NavigationTreeDefinition = { }, ], }, + { link: 'inventory', spaceBefore: 'm' }, { id: 'apm', title: i18n.translate('xpack.serverlessObservability.nav.applications', { diff --git a/x-pack/test/api_integration/apis/features/features/features.ts b/x-pack/test/api_integration/apis/features/features/features.ts index d6602c0ce8cbb..895bfcb851bdd 100644 --- a/x-pack/test/api_integration/apis/features/features/features.ts +++ b/x-pack/test/api_integration/apis/features/features/features.ts @@ -120,6 +120,7 @@ export default function ({ getService }: FtrProviderContext) { 'canvas', 'generalCases', 'infrastructure', + 'inventory', 'logs', 'maintenanceWindow', 'maps', @@ -168,6 +169,7 @@ export default function ({ getService }: FtrProviderContext) { 'canvas', 'generalCases', 'infrastructure', + 'inventory', 'logs', 'maintenanceWindow', 'maps', diff --git a/x-pack/test/api_integration/apis/security/privileges.ts b/x-pack/test/api_integration/apis/security/privileges.ts index a809d0837abc9..8db8c08b16728 100644 --- a/x-pack/test/api_integration/apis/security/privileges.ts +++ b/x-pack/test/api_integration/apis/security/privileges.ts @@ -140,6 +140,7 @@ export default function ({ getService }: FtrProviderContext) { maintenanceWindow: ['all', 'read', 'minimal_all', 'minimal_read'], guidedOnboardingFeature: ['all', 'read', 'minimal_all', 'minimal_read'], aiAssistantManagementSelection: ['all', 'read', 'minimal_all', 'minimal_read'], + inventory: ['all', 'read', 'minimal_all', 'minimal_read'], }, reserved: ['fleet-setup', 'ml_user', 'ml_admin', 'ml_apm_user', 'monitoring'], }; diff --git a/x-pack/test/api_integration/apis/security/privileges_basic.ts b/x-pack/test/api_integration/apis/security/privileges_basic.ts index 59829c673e408..a82ecc2aa4fd6 100644 --- a/x-pack/test/api_integration/apis/security/privileges_basic.ts +++ b/x-pack/test/api_integration/apis/security/privileges_basic.ts @@ -58,6 +58,7 @@ export default function ({ getService }: FtrProviderContext) { maintenanceWindow: ['all', 'read', 'minimal_all', 'minimal_read'], guidedOnboardingFeature: ['all', 'read', 'minimal_all', 'minimal_read'], aiAssistantManagementSelection: ['all', 'read', 'minimal_all', 'minimal_read'], + inventory: ['all', 'read', 'minimal_all', 'minimal_read'], }, global: ['all', 'read'], space: ['all', 'read'], @@ -226,6 +227,7 @@ export default function ({ getService }: FtrProviderContext) { maintenanceWindow: ['all', 'read', 'minimal_all', 'minimal_read'], guidedOnboardingFeature: ['all', 'read', 'minimal_all', 'minimal_read'], aiAssistantManagementSelection: ['all', 'read', 'minimal_all', 'minimal_read'], + inventory: ['all', 'read', 'minimal_all', 'minimal_read'], }, reserved: ['fleet-setup', 'ml_user', 'ml_admin', 'ml_apm_user', 'monitoring'], }; diff --git a/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts b/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts index d39c58bd2b6e7..98b3c88354593 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts +++ b/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts @@ -75,6 +75,7 @@ export default function ({ getService }: FtrProviderContext) { uptime: 0, slo: 0, infrastructure: 0, + inventory: 0, logs: 0, monitoring: 0, apm: 0, From 1abd3473f56d89da4bb87cb409f0b11cb26c327a Mon Sep 17 00:00:00 2001 From: Ido Cohen <90558359+CohenIdo@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:04:33 +0300 Subject: [PATCH 18/60] [Cloud Security] Fix data view's flaky FTR --- .../data_views/data_views.ts | 281 +++++++++++------- 1 file changed, 168 insertions(+), 113 deletions(-) diff --git a/x-pack/test/cloud_security_posture_functional/data_views/data_views.ts b/x-pack/test/cloud_security_posture_functional/data_views/data_views.ts index 4d3e1585ec5bb..d3e68d11d7694 100644 --- a/x-pack/test/cloud_security_posture_functional/data_views/data_views.ts +++ b/x-pack/test/cloud_security_posture_functional/data_views/data_views.ts @@ -8,11 +8,17 @@ import expect from '@kbn/expect'; import { DataViewAttributes } from '@kbn/data-views-plugin/common'; import { CDR_MISCONFIGURATIONS_DATA_VIEW_ID_PREFIX } from '@kbn/cloud-security-posture-common'; +import { CDR_VULNERABILITIES_DATA_VIEW_ID_PREFIX } from '@kbn/cloud-security-posture-plugin/common/constants'; import { KbnClientSavedObjects } from '@kbn/test/src/kbn_client/kbn_client_saved_objects'; import { FtrProviderContext } from '../ftr_provider_context'; const TEST_SPACE = 'space-1'; +const DATA_VIEW_PREFIXES = [ + CDR_MISCONFIGURATIONS_DATA_VIEW_ID_PREFIX, + CDR_VULNERABILITIES_DATA_VIEW_ID_PREFIX, +]; + const getDataViewSafe = async ( soClient: KbnClientSavedObjects, dataViewId: string, @@ -33,6 +39,7 @@ const getDataViewSafe = async ( export default ({ getService, getPageObjects }: FtrProviderContext) => { const kibanaServer = getService('kibanaServer'); const spacesService = getService('spaces'); + const retry = getService('retry'); const pageObjects = getPageObjects([ 'common', @@ -41,15 +48,17 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { 'header', 'spaceSelector', 'cspSecurity', + 'security', ]); - // FLAKY: https://github.com/elastic/kibana/issues/189854 - describe.skip('Data Views', async function () { + describe('Data Views', async function () { this.tags(['cloud_security_posture_data_views', 'cloud_security_posture_spaces']); let cspSecurity = pageObjects.cspSecurity; let findings: typeof pageObjects.findings; before(async () => { + await spacesService.delete(TEST_SPACE); + cspSecurity = pageObjects.cspSecurity; findings = pageObjects.findings; await cspSecurity.createRoles(); @@ -67,127 +76,173 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { }); await spacesService.delete(TEST_SPACE); + await pageObjects.security.forceLogout(); }); - it('Verify data view is created once user reach the findings page - default space', async () => { - const expectedDataViewId = `${CDR_MISCONFIGURATIONS_DATA_VIEW_ID_PREFIX}-default`; - const idDataViewExists = await getDataViewSafe( - kibanaServer.savedObjects, - expectedDataViewId, - 'default' - ); - expect(idDataViewExists).to.be(false); - - await findings.navigateToLatestVulnerabilitiesPage(); - await pageObjects.header.waitUntilLoadingHasFinished(); - - const idDataViewExistsPostFindingsNavigation = await getDataViewSafe( - kibanaServer.savedObjects, - expectedDataViewId, - 'default' - ); - expect(idDataViewExistsPostFindingsNavigation).to.be(true); + DATA_VIEW_PREFIXES.forEach((dataViewPrefix) => { + it('Verify data view is created once user reach the findings page - default space', async () => { + const expectedDataViewId = `${dataViewPrefix}-default`; + + if (await getDataViewSafe(kibanaServer.savedObjects, expectedDataViewId, 'default')) { + await kibanaServer.savedObjects.delete({ + type: 'index-pattern', + id: expectedDataViewId, + space: 'default', + }); + + await retry.try(async () => { + expect( + await getDataViewSafe(kibanaServer.savedObjects, expectedDataViewId, 'default') + ).to.be(false); + }); + } + + await findings.navigateToLatestVulnerabilitiesPage(); + await pageObjects.header.waitUntilLoadingHasFinished(); + + const idDataViewExistsPostFindingsNavigation = await getDataViewSafe( + kibanaServer.savedObjects, + expectedDataViewId, + 'default' + ); + expect(idDataViewExistsPostFindingsNavigation).to.be(true); + }); }); - it('Verify data view is created once user reach the dashboard page - default space', async () => { - const expectedDataViewId = `${CDR_MISCONFIGURATIONS_DATA_VIEW_ID_PREFIX}-default`; - const idDataViewExists = await getDataViewSafe( - kibanaServer.savedObjects, - expectedDataViewId, - 'default' - ); - expect(idDataViewExists).to.be(false); - - const cspDashboard = pageObjects.cloudPostureDashboard; - await cspDashboard.navigateToComplianceDashboardPage(); - await pageObjects.header.waitUntilLoadingHasFinished(); - - const idDataViewExistsPostFindingsNavigation = await getDataViewSafe( - kibanaServer.savedObjects, - expectedDataViewId, - 'default' - ); - expect(idDataViewExistsPostFindingsNavigation).to.be(true); + DATA_VIEW_PREFIXES.forEach((dataViewPrefix) => { + it('Verify data view is created once user reach the dashboard page - default space', async () => { + const expectedDataViewId = `${dataViewPrefix}-default`; + + if (await getDataViewSafe(kibanaServer.savedObjects, expectedDataViewId, 'default')) { + await kibanaServer.savedObjects.delete({ + type: 'index-pattern', + id: expectedDataViewId, + space: 'default', + }); + + await retry.try(async () => { + expect( + await getDataViewSafe(kibanaServer.savedObjects, expectedDataViewId, 'default') + ).to.be(false); + }); + } + + const cspDashboard = pageObjects.cloudPostureDashboard; + await cspDashboard.navigateToComplianceDashboardPage(); + await pageObjects.header.waitUntilLoadingHasFinished(); + + const idDataViewExistsPostFindingsNavigation = await getDataViewSafe( + kibanaServer.savedObjects, + expectedDataViewId, + 'default' + ); + expect(idDataViewExistsPostFindingsNavigation).to.be(true); + }); }); - it('Verify data view is created once user reach the findings page - non default space', async () => { - await pageObjects.common.navigateToApp('home'); - await spacesService.create({ id: TEST_SPACE, name: 'space_one', disabledFeatures: [] }); - await pageObjects.spaceSelector.openSpacesNav(); - await pageObjects.spaceSelector.clickSpaceAvatar(TEST_SPACE); - await pageObjects.spaceSelector.expectHomePage(TEST_SPACE); - - const expectedDataViewId = `${CDR_MISCONFIGURATIONS_DATA_VIEW_ID_PREFIX}-${TEST_SPACE}`; - const idDataViewExists = await getDataViewSafe( - kibanaServer.savedObjects, - expectedDataViewId, - TEST_SPACE - ); - - expect(idDataViewExists).to.be(false); - - await findings.navigateToLatestFindingsPage(TEST_SPACE); - await pageObjects.header.waitUntilLoadingHasFinished(); - const idDataViewExistsPostFindingsNavigation = await getDataViewSafe( - kibanaServer.savedObjects, - expectedDataViewId, - TEST_SPACE - ); - - expect(idDataViewExistsPostFindingsNavigation).to.be(true); + DATA_VIEW_PREFIXES.forEach((dataViewPrefix) => { + it('Verify data view is created once user reach the findings page - non default space', async () => { + await pageObjects.common.navigateToApp('home'); + await spacesService.create({ id: TEST_SPACE, name: 'space_one', disabledFeatures: [] }); + await pageObjects.spaceSelector.openSpacesNav(); + await pageObjects.spaceSelector.clickSpaceAvatar(TEST_SPACE); + await pageObjects.spaceSelector.expectHomePage(TEST_SPACE); + + const expectedDataViewId = `${dataViewPrefix}-${TEST_SPACE}`; + if (await getDataViewSafe(kibanaServer.savedObjects, expectedDataViewId, TEST_SPACE)) { + await kibanaServer.savedObjects.delete({ + type: 'index-pattern', + id: expectedDataViewId, + space: TEST_SPACE, + }); + + await retry.try(async () => { + expect( + await getDataViewSafe(kibanaServer.savedObjects, expectedDataViewId, TEST_SPACE) + ).to.be(false); + }); + } + + await findings.navigateToLatestFindingsPage(TEST_SPACE); + await pageObjects.header.waitUntilLoadingHasFinished(); + const idDataViewExistsPostFindingsNavigation = await getDataViewSafe( + kibanaServer.savedObjects, + expectedDataViewId, + TEST_SPACE + ); + + expect(idDataViewExistsPostFindingsNavigation).to.be(true); + }); }); - it('Verify data view is created once user reach the dashboard page - non default space', async () => { - // await pageObjects.header.waitUntilLoadingHasFinished(); - await pageObjects.common.navigateToApp('home'); - await spacesService.create({ id: TEST_SPACE, name: 'space_one', disabledFeatures: [] }); - await pageObjects.spaceSelector.openSpacesNav(); - await pageObjects.spaceSelector.clickSpaceAvatar(TEST_SPACE); - await pageObjects.spaceSelector.expectHomePage(TEST_SPACE); - const expectedDataViewId = `${CDR_MISCONFIGURATIONS_DATA_VIEW_ID_PREFIX}-${TEST_SPACE}`; - const idDataViewExists = await getDataViewSafe( - kibanaServer.savedObjects, - expectedDataViewId, - TEST_SPACE - ); - - expect(idDataViewExists).to.be(false); - - const cspDashboard = pageObjects.cloudPostureDashboard; - await cspDashboard.navigateToComplianceDashboardPage(TEST_SPACE); - await pageObjects.header.waitUntilLoadingHasFinished(); - const idDataViewExistsPostFindingsNavigation = await getDataViewSafe( - kibanaServer.savedObjects, - expectedDataViewId, - TEST_SPACE - ); - - expect(idDataViewExistsPostFindingsNavigation).to.be(true); + DATA_VIEW_PREFIXES.forEach((dataViewPrefix) => { + it('Verify data view is created once user reach the dashboard page - non default space', async () => { + await pageObjects.common.navigateToApp('home'); + await spacesService.create({ id: TEST_SPACE, name: 'space_one', disabledFeatures: [] }); + await pageObjects.spaceSelector.openSpacesNav(); + await pageObjects.spaceSelector.clickSpaceAvatar(TEST_SPACE); + await pageObjects.spaceSelector.expectHomePage(TEST_SPACE); + const expectedDataViewId = `${dataViewPrefix}-${TEST_SPACE}`; + + if (await getDataViewSafe(kibanaServer.savedObjects, expectedDataViewId, TEST_SPACE)) { + await kibanaServer.savedObjects.delete({ + type: 'index-pattern', + id: expectedDataViewId, + space: TEST_SPACE, + }); + + await retry.try(async () => { + expect( + await getDataViewSafe(kibanaServer.savedObjects, expectedDataViewId, TEST_SPACE) + ).to.be(false); + }); + } + + const cspDashboard = pageObjects.cloudPostureDashboard; + await cspDashboard.navigateToComplianceDashboardPage(TEST_SPACE); + await pageObjects.header.waitUntilLoadingHasFinished(); + const idDataViewExistsPostFindingsNavigation = await getDataViewSafe( + kibanaServer.savedObjects, + expectedDataViewId, + TEST_SPACE + ); + + expect(idDataViewExistsPostFindingsNavigation).to.be(true); + }); }); - it('Verify data view is created once user with read permissions reach the dashboard page', async () => { - await pageObjects.common.navigateToApp('home'); - await cspSecurity.logout(); - await cspSecurity.login('csp_read_user'); - const expectedDataViewId = `${CDR_MISCONFIGURATIONS_DATA_VIEW_ID_PREFIX}-default`; - const idDataViewExists = await getDataViewSafe( - kibanaServer.savedObjects, - expectedDataViewId, - 'default' - ); - - expect(idDataViewExists).to.be(false); - - const cspDashboard = pageObjects.cloudPostureDashboard; - await cspDashboard.navigateToComplianceDashboardPage(); - await pageObjects.header.waitUntilLoadingHasFinished(); - const idDataViewExistsPostFindingsNavigation = await getDataViewSafe( - kibanaServer.savedObjects, - expectedDataViewId, - 'default' - ); - - expect(idDataViewExistsPostFindingsNavigation).to.be(true); + DATA_VIEW_PREFIXES.forEach((dataViewPrefix) => { + it('Verify data view is created once user with read permissions reach the dashboard page', async () => { + await pageObjects.common.navigateToApp('home'); + await cspSecurity.logout(); + await cspSecurity.login('csp_read_user'); + const expectedDataViewId = `${CDR_MISCONFIGURATIONS_DATA_VIEW_ID_PREFIX}-default`; + + if (await getDataViewSafe(kibanaServer.savedObjects, expectedDataViewId, 'default')) { + await kibanaServer.savedObjects.delete({ + type: 'index-pattern', + id: expectedDataViewId, + space: 'default', + }); + + await retry.try(async () => { + expect( + await getDataViewSafe(kibanaServer.savedObjects, expectedDataViewId, 'default') + ).to.be(false); + }); + } + + const cspDashboard = pageObjects.cloudPostureDashboard; + await cspDashboard.navigateToComplianceDashboardPage(); + await pageObjects.header.waitUntilLoadingHasFinished(); + const idDataViewExistsPostFindingsNavigation = await getDataViewSafe( + kibanaServer.savedObjects, + expectedDataViewId, + 'default' + ); + + expect(idDataViewExistsPostFindingsNavigation).to.be(true); + }); }); }); }; From 9a7e9124cf86d8a7a7ce25732bf11163ec7df52d Mon Sep 17 00:00:00 2001 From: Elena Shostak <165678770+elena-shostak@users.noreply.github.com> Date: Mon, 30 Sep 2024 13:13:26 +0200 Subject: [PATCH 19/60] [Authz] Added support for security route configuration option (#191973) ## Summary Extended `KibanaRouteOptions` to include security configuration at the route definition level. ## Security Config To facilitate iterative development security config is marked as optional for now. - `authz` supports both simple configuration (e.g., single privilege requirements) and more complex configurations that involve anyRequired and allRequired privilege sets. - `authc` property has been added and is expected to replace the existing `authRequired` option. This transition will be part of an upcoming deprecation process in scope of https://github.com/elastic/kibana/issues/191711 - For versioned routes, the `authc` and `authz` configurations can be applied independently for each version, enabling version-specific security configuration. If none provided for the specific version it will fall back to the route root security option. - Validation logic has been added that ensures only supported configurations are specified. - Existing `registerOnPostAuth` hook has been modified to incorporate checks based on the new `authz` property in the security configuration. - Comprehensive documentation will be added in the separate PR before sunsetting new security configuration and deprecating old one. ## How to Test You can modify any existing route or use the example routes below ### Routes
Route 1: /api/security/authz_examples/authz_disabled ```javascript router.get( { path: '/api/security/authz_examples/authz_disabled', security: { authz: { enabled: false, reason: 'This route is opted out from authorization', }, }, validate: false, }, createLicensedRouteHandler(async (context, request, response) => { try { return response.ok({ body: { message: 'This route is opted out from authorization', }, }); } catch (error) { return response.customError(wrapIntoCustomErrorResponse(error)); } }) ); ```
Route 2: /api/security/authz_examples/simple_privileges_1 ```javascript router.get( { path: '/api/security/authz_examples/simple_privileges_1', security: { authz: { requiredPrivileges: ['manageSpaces', 'taskManager'], }, }, validate: false, }, createLicensedRouteHandler(async (context, request, response) => { try { return response.ok({ body: { authzResult: request.authzResult, }, }); } catch (error) { return response.customError(wrapIntoCustomErrorResponse(error)); } }) ); ```
Route 3: /api/security/authz_examples/simple_privileges_2 ```javascript router.get( { path: '/api/security/authz_examples/simple_privileges_2', security: { authz: { requiredPrivileges: [ 'manageSpaces', { anyRequired: ['taskManager', 'features'], }, ], }, }, validate: false, }, createLicensedRouteHandler(async (context, request, response) => { try { return response.ok({ body: { authzResult: request.authzResult, }, }); } catch (error) { return response.customError(wrapIntoCustomErrorResponse(error)); } }) ); ```
Versioned Route: /internal/security/authz_versioned_examples/simple_privileges_1 ```javascript router.versioned .get({ path: '/internal/security/authz_versioned_examples/simple_privileges_1', access: 'internal', enableQueryVersion: true, }) .addVersion( { version: '1', validate: false, security: { authz: { requiredPrivileges: ['manageSpaces', 'taskManager'], }, authc: { enabled: 'optional', }, }, }, (context, request, response) => { return response.ok({ body: { authzResult: request.authzResult, version: '1', }, }); } ) .addVersion( { version: '2', validate: false, security: { authz: { requiredPrivileges: ['manageSpaces'], }, authc: { enabled: true, }, }, }, (context, request, response) => { return response.ok({ body: { authzResult: request.authzResult, version: '2', }, }); } ); ```
### 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 __Closes: https://github.com/elastic/kibana/issues/191710__ __Related: https://github.com/elastic/kibana/issues/191712, https://github.com/elastic/kibana/issues/191713__ ### Release Note Extended `KibanaRouteOptions` to include security configuration at the route definition level. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine --- .../src/request.test.ts | 149 +++++++++- .../src/request.ts | 27 ++ .../src/route.ts | 11 +- .../src/router.test.ts | 41 +++ .../src/router.ts | 31 +- .../security_route_config_validator.test.ts | 279 ++++++++++++++++++ .../src/security_route_config_validator.ts | 116 ++++++++ .../src/util.ts | 6 +- .../core_versioned_route.test.ts | 196 ++++++++++++ .../versioned_router/core_versioned_route.ts | 34 ++- .../versioned_router/route_version_utils.ts | 9 +- .../src/versioned_router/util.test.ts | 93 ++++++ .../src/versioned_router/util.ts | 26 +- .../src/http_server.ts | 1 + .../src/lifecycle/on_post_auth.ts | 21 ++ .../src/lifecycle_handlers.test.ts | 1 + .../src/http_server.mocks.ts | 1 + .../src/http_service.mock.ts | 1 + packages/core/http/core-http-server/index.ts | 12 + .../core-http-server/src/lifecycle/index.ts | 1 + .../src/lifecycle/on_post_auth.ts | 12 +- .../http/core-http-server/src/router/index.ts | 12 + .../core-http-server/src/router/request.ts | 16 +- .../http/core-http-server/src/router/route.ts | 87 ++++++ .../core-http-server/src/router/router.ts | 2 + .../core-http-server/src/versioning/types.ts | 6 +- src/core/server/index.ts | 11 +- .../http/request_representation.test.ts | 4 +- x-pack/plugins/security/common/constants.ts | 5 + .../authorization/api_authorization.test.ts | 276 +++++++++++++++++ .../server/authorization/api_authorization.ts | 89 +++++- .../product_features_service.test.ts | 2 +- 32 files changed, 1540 insertions(+), 38 deletions(-) create mode 100644 packages/core/http/core-http-router-server-internal/src/security_route_config_validator.test.ts create mode 100644 packages/core/http/core-http-router-server-internal/src/security_route_config_validator.ts diff --git a/packages/core/http/core-http-router-server-internal/src/request.test.ts b/packages/core/http/core-http-router-server-internal/src/request.test.ts index ec1465ac049b7..1f607a58961ab 100644 --- a/packages/core/http/core-http-router-server-internal/src/request.test.ts +++ b/packages/core/http/core-http-router-server-internal/src/request.test.ts @@ -13,7 +13,7 @@ jest.mock('uuid', () => ({ import { RouteOptions } from '@hapi/hapi'; import { hapiMocks } from '@kbn/hapi-mocks'; -import type { FakeRawRequest } from '@kbn/core-http-server'; +import type { FakeRawRequest, RouteSecurity } from '@kbn/core-http-server'; import { CoreKibanaRequest } from './request'; import { schema } from '@kbn/config-schema'; import { @@ -352,6 +352,153 @@ describe('CoreKibanaRequest', () => { }); }); + describe('route.options.security property', () => { + it('handles required authc: undefined', () => { + const request = hapiMocks.createRequest({ + route: { + settings: { + app: { + security: { authc: undefined }, + }, + }, + }, + }); + const kibanaRequest = CoreKibanaRequest.from(request); + + expect(kibanaRequest.route.options.authRequired).toBe(true); + }); + + it('handles required authc: { enabled: undefined }', () => { + const request = hapiMocks.createRequest({ + route: { + settings: { + app: { + security: { authc: { enabled: undefined } }, + }, + }, + }, + }); + const kibanaRequest = CoreKibanaRequest.from(request); + + expect(kibanaRequest.route.options.authRequired).toBe(true); + }); + + it('handles required authc: { enabled: true }', () => { + const request = hapiMocks.createRequest({ + route: { + settings: { + app: { + security: { authc: { enabled: true } }, + }, + }, + }, + }); + const kibanaRequest = CoreKibanaRequest.from(request); + + expect(kibanaRequest.route.options.authRequired).toBe(true); + }); + it('handles required authc: { enabled: false }', () => { + const request = hapiMocks.createRequest({ + route: { + settings: { + app: { + security: { authc: { enabled: false } }, + }, + }, + }, + }); + const kibanaRequest = CoreKibanaRequest.from(request); + + expect(kibanaRequest.route.options.authRequired).toBe(false); + }); + + it(`handles required authc: { enabled: 'optional' }`, () => { + const request = hapiMocks.createRequest({ + route: { + settings: { + app: { + security: { authc: { enabled: 'optional' } }, + }, + }, + }, + }); + const kibanaRequest = CoreKibanaRequest.from(request); + + expect(kibanaRequest.route.options.authRequired).toBe('optional'); + }); + + it('handles required authz simple config', () => { + const security: RouteSecurity = { + authz: { + requiredPrivileges: ['privilege1'], + }, + }; + const request = hapiMocks.createRequest({ + route: { + settings: { + app: { + security, + }, + }, + }, + }); + const kibanaRequest = CoreKibanaRequest.from(request); + + expect(kibanaRequest.route.options.security).toEqual(security); + }); + + it('handles required authz complex config', () => { + const security: RouteSecurity = { + authz: { + requiredPrivileges: [ + { + allRequired: ['privilege1'], + anyRequired: ['privilege2', 'privilege3'], + }, + ], + }, + }; + const request = hapiMocks.createRequest({ + route: { + settings: { + app: { + security, + }, + }, + }, + }); + const kibanaRequest = CoreKibanaRequest.from(request); + + expect(kibanaRequest.route.options.security).toEqual(security); + }); + + it('handles required authz config for the route with RouteSecurityGetter', () => { + const security: RouteSecurity = { + authz: { + requiredPrivileges: [ + { + allRequired: ['privilege1'], + anyRequired: ['privilege2', 'privilege3'], + }, + ], + }, + }; + const request = hapiMocks.createRequest({ + route: { + settings: { + app: { + // security is a getter function only for the versioned routes + security: () => security, + }, + }, + }, + }); + const kibanaRequest = CoreKibanaRequest.from(request); + + expect(kibanaRequest.route.options.security).toEqual(security); + }); + }); + describe('RouteSchema type inferring', () => { it('should work with config-schema', () => { const body = Buffer.from('body!'); diff --git a/packages/core/http/core-http-router-server-internal/src/request.ts b/packages/core/http/core-http-router-server-internal/src/request.ts index b7b23186def88..286b900fc24f5 100644 --- a/packages/core/http/core-http-router-server-internal/src/request.ts +++ b/packages/core/http/core-http-router-server-internal/src/request.ts @@ -31,6 +31,8 @@ import { RawRequest, FakeRawRequest, HttpProtocol, + RouteSecurityGetter, + RouteSecurity, } from '@kbn/core-http-server'; import { ELASTIC_INTERNAL_ORIGIN_QUERY_PARAM, @@ -46,6 +48,12 @@ patchRequest(); const requestSymbol = Symbol('request'); +const isRouteSecurityGetter = ( + security?: RouteSecurityGetter | RecursiveReadonly +): security is RouteSecurityGetter => { + return typeof security === 'function'; +}; + /** * Core internal implementation of {@link KibanaRequest} * @internal @@ -137,6 +145,8 @@ export class CoreKibanaRequest< public readonly httpVersion: string; /** {@inheritDoc KibanaRequest.protocol} */ public readonly protocol: HttpProtocol; + /** {@inheritDoc KibanaRequest.authzResult} */ + public readonly authzResult?: Record; /** @internal */ protected readonly [requestSymbol]!: Request; @@ -159,6 +169,7 @@ export class CoreKibanaRequest< this.id = appState?.requestId ?? uuidv4(); this.uuid = appState?.requestUuid ?? uuidv4(); this.rewrittenUrl = appState?.rewrittenUrl; + this.authzResult = appState?.authzResult; this.url = request.url ?? new URL('https://fake-request/url'); this.headers = isRealReq ? deepFreeze({ ...request.headers }) : request.headers; @@ -204,6 +215,7 @@ export class CoreKibanaRequest< isAuthenticated: this.auth.isAuthenticated, }, route: this.route, + authzResult: this.authzResult, }; } @@ -256,6 +268,7 @@ export class CoreKibanaRequest< true, // some places in LP call KibanaRequest.from(request) manually. remove fallback to true before v8 access: this.getAccess(request), tags: request.route?.settings?.tags || [], + security: this.getSecurity(request), timeout: { payload: payloadTimeout, idleSocket: socketTimeout === 0 ? undefined : socketTimeout, @@ -277,6 +290,13 @@ export class CoreKibanaRequest< }; } + private getSecurity(request: RawRequest): RouteSecurity | undefined { + const securityConfig = ((request.route?.settings as RouteOptions)?.app as KibanaRouteOptions) + ?.security; + + return isRouteSecurityGetter(securityConfig) ? securityConfig(request) : securityConfig; + } + /** set route access to internal if not declared */ private getAccess(request: RawRequest): 'internal' | 'public' { return ( @@ -289,6 +309,12 @@ export class CoreKibanaRequest< return true; } + const security = this.getSecurity(request); + + if (security?.authc !== undefined) { + return security.authc?.enabled ?? true; + } + const authOptions = request.route.settings.auth; if (typeof authOptions === 'object') { // 'try' is used in the legacy platform @@ -368,6 +394,7 @@ function isCompleted(request: Request) { */ function sanitizeRequest(req: Request): { query: unknown; params: unknown; body: unknown } { const { [ELASTIC_INTERNAL_ORIGIN_QUERY_PARAM]: __, ...query } = req.query ?? {}; + return { query, params: req.params, diff --git a/packages/core/http/core-http-router-server-internal/src/route.ts b/packages/core/http/core-http-router-server-internal/src/route.ts index e494dfb66b7aa..6faae2c1816b9 100644 --- a/packages/core/http/core-http-router-server-internal/src/route.ts +++ b/packages/core/http/core-http-router-server-internal/src/route.ts @@ -7,8 +7,17 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import type { RouteMethod, SafeRouteMethod } from '@kbn/core-http-server'; +import type { RouteMethod, SafeRouteMethod, RouteConfig } from '@kbn/core-http-server'; +import type { RouteSecurityGetter, RouteSecurity } from '@kbn/core-http-server'; export function isSafeMethod(method: RouteMethod): method is SafeRouteMethod { return method === 'get' || method === 'options'; } + +/** @interval */ +export type InternalRouteConfig = Omit< + RouteConfig, + 'security' +> & { + security?: RouteSecurityGetter | RouteSecurity; +}; diff --git a/packages/core/http/core-http-router-server-internal/src/router.test.ts b/packages/core/http/core-http-router-server-internal/src/router.test.ts index 18589d5d39d52..65f5b41f91fba 100644 --- a/packages/core/http/core-http-router-server-internal/src/router.test.ts +++ b/packages/core/http/core-http-router-server-internal/src/router.test.ts @@ -232,6 +232,47 @@ describe('Router', () => { ); }); + it('throws if enabled security config is not valid', () => { + const router = new Router('', logger, enhanceWithContext, routerOptions); + expect(() => + router.get( + { + path: '/', + validate: false, + security: { + authz: { + requiredPrivileges: [], + }, + }, + }, + (context, req, res) => res.ok({}) + ) + ).toThrowErrorMatchingInlineSnapshot( + `"[authz.requiredPrivileges]: array size is [0], but cannot be smaller than [1]"` + ); + }); + + it('throws if disabled security config does not provide opt-out reason', () => { + const router = new Router('', logger, enhanceWithContext, routerOptions); + expect(() => + router.get( + { + path: '/', + validate: false, + security: { + // @ts-expect-error + authz: { + enabled: false, + }, + }, + }, + (context, req, res) => res.ok({}) + ) + ).toThrowErrorMatchingInlineSnapshot( + `"[authz.reason]: expected value of type [string] but got [undefined]"` + ); + }); + it('should default `output: "stream" and parse: false` when no body validation is required but not a GET', () => { const router = new Router('', logger, enhanceWithContext, routerOptions); router.post({ path: '/', validate: {} }, (context, req, res) => res.ok({})); diff --git a/packages/core/http/core-http-router-server-internal/src/router.ts b/packages/core/http/core-http-router-server-internal/src/router.ts index a6f2ccc35f56b..ddfa8980cb8f2 100644 --- a/packages/core/http/core-http-router-server-internal/src/router.ts +++ b/packages/core/http/core-http-router-server-internal/src/router.ts @@ -26,9 +26,12 @@ import type { RequestHandler, VersionedRouter, RouteRegistrar, + RouteSecurity, } from '@kbn/core-http-server'; import { isZod } from '@kbn/zod'; import { validBodyOutput, getRequestValidation } from '@kbn/core-http-server'; +import type { RouteSecurityGetter } from '@kbn/core-http-server'; +import type { DeepPartial } from '@kbn/utility-types'; import { RouteValidator } from './validator'; import { CoreVersionedRouter } from './versioned_router'; import { CoreKibanaRequest } from './request'; @@ -38,6 +41,8 @@ import { wrapErrors } from './error_wrapper'; import { Method } from './versioned_router/types'; import { prepareRouteConfigValidation } from './util'; import { stripIllegalHttp2Headers } from './strip_illegal_http2_headers'; +import { validRouteSecurity } from './security_route_config_validator'; +import { InternalRouteConfig } from './route'; export type ContextEnhancer< P, @@ -61,7 +66,7 @@ function getRouteFullPath(routerPath: string, routePath: string) { * undefined. */ function routeSchemasFromRouteConfig( - route: RouteConfig, + route: InternalRouteConfig, routeMethod: RouteMethod ) { // The type doesn't allow `validate` to be undefined, but it can still @@ -93,7 +98,7 @@ function routeSchemasFromRouteConfig( */ function validOptions( method: RouteMethod, - routeConfig: RouteConfig + routeConfig: InternalRouteConfig ) { const shouldNotHavePayload = ['head', 'get'].includes(method); const { options = {}, validate } = routeConfig; @@ -144,10 +149,17 @@ export interface RouterOptions { export interface InternalRegistrarOptions { isVersioned: boolean; } +/** @internal */ +export type VersionedRouteConfig = Omit< + RouteConfig, + 'security' +> & { + security?: RouteSecurityGetter; +}; /** @internal */ export type InternalRegistrar = ( - route: RouteConfig, + route: InternalRouteConfig, handler: RequestHandler, internalOpts?: InternalRegistrarOptions ) => ReturnType>; @@ -186,7 +198,7 @@ export class Router(method: Method) => ( - route: RouteConfig, + route: InternalRouteConfig, handler: RequestHandler, internalOptions: { isVersioned: boolean } = { isVersioned: false } ) => { @@ -204,6 +216,10 @@ export class Router, route.options), /** Below is added for introspection */ validationSchemas: route.validate, isVersioned: internalOptions.isVersioned, @@ -260,7 +276,12 @@ export class Router; const hapiResponseAdapter = new HapiResponseAdapter(responseToolkit); try { - kibanaRequest = CoreKibanaRequest.from(request, routeSchemas); + kibanaRequest = CoreKibanaRequest.from(request, routeSchemas) as KibanaRequest< + P, + Q, + B, + typeof request.method + >; } catch (error) { this.logError('400 Bad Request', 400, { request, error }); return hapiResponseAdapter.toBadRequest(error.message); diff --git a/packages/core/http/core-http-router-server-internal/src/security_route_config_validator.test.ts b/packages/core/http/core-http-router-server-internal/src/security_route_config_validator.test.ts new file mode 100644 index 0000000000000..d130bfdce9fb5 --- /dev/null +++ b/packages/core/http/core-http-router-server-internal/src/security_route_config_validator.test.ts @@ -0,0 +1,279 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { validRouteSecurity } from './security_route_config_validator'; + +describe('RouteSecurity validation', () => { + it('should pass validation for valid route security with authz enabled and valid required privileges', () => { + expect(() => + validRouteSecurity({ + authz: { + requiredPrivileges: ['read', { anyRequired: ['write', 'admin'] }], + }, + authc: { + enabled: 'optional', + }, + }) + ).not.toThrow(); + }); + + it('should pass validation for valid route security with authz disabled', () => { + expect(() => + validRouteSecurity({ + authz: { + enabled: false, + reason: 'Authorization is disabled', + }, + authc: { + enabled: true, + }, + }) + ).not.toThrow(); + }); + + it('should fail validation when authz is empty', () => { + const routeSecurity = { + authz: {}, + authc: { + enabled: true, + }, + }; + + expect(() => validRouteSecurity(routeSecurity)).toThrowErrorMatchingInlineSnapshot( + `"[authz.requiredPrivileges]: expected value of type [array] but got [undefined]"` + ); + }); + + it('should fail when requiredPrivileges include an empty privilege set', () => { + const routeSecurity = { + authz: { + requiredPrivileges: [{}], + }, + }; + + expect(() => validRouteSecurity(routeSecurity)).toThrowErrorMatchingInlineSnapshot(` + "[authz.requiredPrivileges.0]: types that failed validation: + - [authz.requiredPrivileges.0.0]: either anyRequired or allRequired must be specified + - [authz.requiredPrivileges.0.1]: expected value of type [string] but got [Object]" + `); + }); + + it('should fail validation when requiredPrivileges array is empty', () => { + const routeSecurity = { + authz: { + requiredPrivileges: [], + }, + authc: { + enabled: true, + }, + }; + + expect(() => validRouteSecurity(routeSecurity)).toThrowErrorMatchingInlineSnapshot( + `"[authz.requiredPrivileges]: array size is [0], but cannot be smaller than [1]"` + ); + }); + + it('should fail validation when anyRequired array is empty', () => { + const routeSecurity = { + authz: { + requiredPrivileges: [{ anyRequired: [] }], + }, + authc: { + enabled: true, + }, + }; + + expect(() => validRouteSecurity(routeSecurity)).toThrowErrorMatchingInlineSnapshot(` + "[authz.requiredPrivileges.0]: types that failed validation: + - [authz.requiredPrivileges.0.0.anyRequired]: array size is [0], but cannot be smaller than [2] + - [authz.requiredPrivileges.0.1]: expected value of type [string] but got [Object]" + `); + }); + + it('should fail validation when anyRequired array is of size 1', () => { + const routeSecurity = { + authz: { + requiredPrivileges: [{ anyRequired: ['privilege-1'], allRequired: ['privilege-2'] }], + }, + authc: { + enabled: true, + }, + }; + + expect(() => validRouteSecurity(routeSecurity)).toThrowErrorMatchingInlineSnapshot(` + "[authz.requiredPrivileges.0]: types that failed validation: + - [authz.requiredPrivileges.0.0.anyRequired]: array size is [1], but cannot be smaller than [2] + - [authz.requiredPrivileges.0.1]: expected value of type [string] but got [Object]" + `); + }); + + it('should fail validation when allRequired array is empty', () => { + const routeSecurity = { + authz: { + requiredPrivileges: [{ allRequired: [] }], + }, + authc: { + enabled: true, + }, + }; + + expect(() => validRouteSecurity(routeSecurity)).toThrowErrorMatchingInlineSnapshot(` + "[authz.requiredPrivileges.0]: types that failed validation: + - [authz.requiredPrivileges.0.0.allRequired]: array size is [0], but cannot be smaller than [1] + - [authz.requiredPrivileges.0.1]: expected value of type [string] but got [Object]" + `); + }); + + it('should pass validation with valid privileges in both anyRequired and allRequired', () => { + const routeSecurity = { + authz: { + requiredPrivileges: [ + { anyRequired: ['privilege1', 'privilege2'], allRequired: ['privilege3', 'privilege4'] }, + ], + }, + authc: { + enabled: true, + }, + }; + + expect(() => validRouteSecurity(routeSecurity)).not.toThrow(); + }); + + it('should fail validation when authz is disabled but reason is missing', () => { + expect(() => + validRouteSecurity({ + authz: { + enabled: false, + }, + authc: { + enabled: true, + }, + }) + ).toThrowErrorMatchingInlineSnapshot( + `"[authz.reason]: expected value of type [string] but got [undefined]"` + ); + }); + + it('should fail validation when authc is disabled but reason is missing', () => { + const routeSecurity = { + authz: { + requiredPrivileges: ['read'], + }, + authc: { + enabled: false, + }, + }; + + expect(() => validRouteSecurity(routeSecurity)).toThrowErrorMatchingInlineSnapshot( + `"[authc.reason]: expected value of type [string] but got [undefined]"` + ); + }); + + it('should fail validation when authc is provided in multiple configs', () => { + const routeSecurity = { + authz: { + requiredPrivileges: ['read'], + }, + authc: { + enabled: false, + }, + }; + + expect(() => + validRouteSecurity(routeSecurity, { authRequired: false }) + ).toThrowErrorMatchingInlineSnapshot( + `"Cannot specify both security.authc and options.authRequired"` + ); + }); + + it('should pass validation when authc is optional', () => { + expect(() => + validRouteSecurity({ + authz: { + requiredPrivileges: ['read'], + }, + authc: { + enabled: 'optional', + }, + }) + ).not.toThrow(); + }); + + it('should pass validation when authc is disabled', () => { + const routeSecurity = { + authz: { + requiredPrivileges: ['read'], + }, + authc: { + enabled: false, + reason: 'Authentication is disabled', + }, + }; + + expect(() => validRouteSecurity(routeSecurity)).not.toThrow(); + }); + + it('should fail validation when anyRequired and allRequired have the same values', () => { + const invalidRouteSecurity = { + authz: { + requiredPrivileges: [ + { anyRequired: ['privilege1', 'privilege2'], allRequired: ['privilege1'] }, + ], + }, + }; + + expect(() => validRouteSecurity(invalidRouteSecurity)).toThrowErrorMatchingInlineSnapshot( + `"[authz.requiredPrivileges]: anyRequired and allRequired cannot have the same values: [privilege1]"` + ); + }); + + it('should fail validation when anyRequired and allRequired have the same values in multiple entries', () => { + const invalidRouteSecurity = { + authz: { + requiredPrivileges: [ + { anyRequired: ['privilege1', 'privilege2'], allRequired: ['privilege4'] }, + { anyRequired: ['privilege3', 'privilege5'], allRequired: ['privilege2'] }, + ], + }, + }; + + expect(() => validRouteSecurity(invalidRouteSecurity)).toThrowErrorMatchingInlineSnapshot( + `"[authz.requiredPrivileges]: anyRequired and allRequired cannot have the same values: [privilege2]"` + ); + }); + + it('should fail validation when anyRequired has duplicate entries', () => { + const invalidRouteSecurity = { + authz: { + requiredPrivileges: [ + { anyRequired: ['privilege1', 'privilege1'], allRequired: ['privilege4'] }, + ], + }, + }; + + expect(() => validRouteSecurity(invalidRouteSecurity)).toThrowErrorMatchingInlineSnapshot( + `"[authz.requiredPrivileges]: anyRequired privileges must contain unique values"` + ); + }); + + it('should fail validation when anyRequired has duplicates in multiple privilege entries', () => { + const invalidRouteSecurity = { + authz: { + requiredPrivileges: [ + { anyRequired: ['privilege1', 'privilege1'], allRequired: ['privilege4'] }, + { anyRequired: ['privilege1', 'privilege1'] }, + ], + }, + }; + + expect(() => validRouteSecurity(invalidRouteSecurity)).toThrowErrorMatchingInlineSnapshot( + `"[authz.requiredPrivileges]: anyRequired privileges must contain unique values"` + ); + }); +}); diff --git a/packages/core/http/core-http-router-server-internal/src/security_route_config_validator.ts b/packages/core/http/core-http-router-server-internal/src/security_route_config_validator.ts new file mode 100644 index 0000000000000..d74f41d3157b4 --- /dev/null +++ b/packages/core/http/core-http-router-server-internal/src/security_route_config_validator.ts @@ -0,0 +1,116 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { schema } from '@kbn/config-schema'; +import type { RouteSecurity, RouteConfigOptions } from '@kbn/core-http-server'; +import type { DeepPartial } from '@kbn/utility-types'; + +const privilegeSetSchema = schema.object( + { + anyRequired: schema.maybe(schema.arrayOf(schema.string(), { minSize: 2 })), + allRequired: schema.maybe(schema.arrayOf(schema.string(), { minSize: 1 })), + }, + { + validate: (value) => { + if (!value.anyRequired && !value.allRequired) { + return 'either anyRequired or allRequired must be specified'; + } + }, + } +); + +const requiredPrivilegesSchema = schema.arrayOf( + schema.oneOf([privilegeSetSchema, schema.string()]), + { + validate: (value) => { + const anyRequired: string[] = []; + const allRequired: string[] = []; + + if (!Array.isArray(value)) { + return undefined; + } + + value.forEach((privilege) => { + if (typeof privilege === 'string') { + allRequired.push(privilege); + } else { + if (privilege.anyRequired) { + anyRequired.push(...privilege.anyRequired); + } + if (privilege.allRequired) { + allRequired.push(...privilege.allRequired); + } + } + }); + + if (anyRequired.length && allRequired.length) { + for (const privilege of anyRequired) { + if (allRequired.includes(privilege)) { + return `anyRequired and allRequired cannot have the same values: [${privilege}]`; + } + } + } + + if (anyRequired.length) { + const uniquePrivileges = new Set([...anyRequired]); + + if (anyRequired.length !== uniquePrivileges.size) { + return 'anyRequired privileges must contain unique values'; + } + } + }, + minSize: 1, + } +); + +const authzSchema = schema.object({ + enabled: schema.maybe(schema.literal(false)), + requiredPrivileges: schema.conditional( + schema.siblingRef('enabled'), + schema.never(), + requiredPrivilegesSchema, + schema.never() + ), + reason: schema.conditional( + schema.siblingRef('enabled'), + schema.never(), + schema.never(), + schema.string() + ), +}); + +const authcSchema = schema.object({ + enabled: schema.oneOf([schema.literal(true), schema.literal('optional'), schema.literal(false)]), + reason: schema.conditional( + schema.siblingRef('enabled'), + schema.literal(false), + schema.string(), + schema.never() + ), +}); + +const routeSecuritySchema = schema.object({ + authz: authzSchema, + authc: schema.maybe(authcSchema), +}); + +export const validRouteSecurity = ( + routeSecurity?: DeepPartial, + options?: DeepPartial> +) => { + if (!routeSecurity) { + return routeSecurity; + } + + if (routeSecurity?.authc !== undefined && options?.authRequired !== undefined) { + throw new Error('Cannot specify both security.authc and options.authRequired'); + } + + return routeSecuritySchema.validate(routeSecurity); +}; diff --git a/packages/core/http/core-http-router-server-internal/src/util.ts b/packages/core/http/core-http-router-server-internal/src/util.ts index 1a0d9976bbd42..0d1c8abb0e103 100644 --- a/packages/core/http/core-http-router-server-internal/src/util.ts +++ b/packages/core/http/core-http-router-server-internal/src/util.ts @@ -11,10 +11,10 @@ import { once } from 'lodash'; import { isFullValidatorContainer, type RouteValidatorFullConfigResponse, - type RouteConfig, type RouteMethod, type RouteValidator, } from '@kbn/core-http-server'; +import type { InternalRouteConfig } from './route'; function isStatusCode(key: string) { return !isNaN(parseInt(key, 10)); @@ -45,8 +45,8 @@ function prepareValidation(validator: RouteValidator) { // Integration tested in ./routes.test.ts export function prepareRouteConfigValidation( - config: RouteConfig -): RouteConfig { + config: InternalRouteConfig +): InternalRouteConfig { // Calculating schema validation can be expensive so when it is provided lazily // we only want to instantiate it once. This also provides idempotency guarantees if (typeof config.validate === 'function') { diff --git a/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts b/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts index efa5cf5ae23d8..314c25c5a2a1e 100644 --- a/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts +++ b/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts @@ -13,6 +13,7 @@ import type { RequestHandler, RouteConfig, VersionedRouteValidation, + RouteSecurity, } from '@kbn/core-http-server'; import { Router } from '../router'; import { createFooValidation } from '../router.test.util'; @@ -22,6 +23,7 @@ import { passThroughValidation } from './core_versioned_route'; import { Method } from './types'; import { createRequest } from './core_versioned_route.test.util'; import { isConfigSchema } from '@kbn/config-schema'; +import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; describe('Versioned route', () => { let router: Router; @@ -429,4 +431,198 @@ describe('Versioned route', () => { expect(doNotBypassResponse2.status).toBe(400); expect(doNotBypassResponse2.payload).toMatch('Please specify a version'); }); + + it('can register multiple handlers with different security configurations', () => { + const versionedRouter = CoreVersionedRouter.from({ router }); + const securityConfig1: RouteSecurity = { + authz: { + requiredPrivileges: ['foo'], + }, + authc: { + enabled: 'optional', + }, + }; + const securityConfig2: RouteSecurity = { + authz: { + requiredPrivileges: ['foo', 'bar'], + }, + authc: { + enabled: true, + }, + }; + const securityConfig3: RouteSecurity = { + authz: { + requiredPrivileges: ['foo', 'bar', 'baz'], + }, + }; + versionedRouter + .get({ path: '/test/{id}', access: 'internal' }) + .addVersion( + { + version: '1', + validate: false, + security: securityConfig1, + }, + handlerFn + ) + .addVersion( + { + version: '2', + validate: false, + security: securityConfig2, + }, + handlerFn + ) + .addVersion( + { + version: '3', + validate: false, + security: securityConfig3, + }, + handlerFn + ); + const routes = versionedRouter.getRoutes(); + expect(routes).toHaveLength(1); + const [route] = routes; + expect(route.handlers).toHaveLength(3); + + expect(route.handlers[0].options.security).toStrictEqual(securityConfig1); + expect(route.handlers[1].options.security).toStrictEqual(securityConfig2); + expect(route.handlers[2].options.security).toStrictEqual(securityConfig3); + expect(router.get).toHaveBeenCalledTimes(1); + }); + + it('falls back to default security configuration if it is not specified for specific version', () => { + const versionedRouter = CoreVersionedRouter.from({ router }); + const securityConfigDefault: RouteSecurity = { + authz: { + requiredPrivileges: ['foo', 'bar', 'baz'], + }, + }; + const securityConfig1: RouteSecurity = { + authz: { + requiredPrivileges: ['foo'], + }, + authc: { + enabled: 'optional', + }, + }; + const securityConfig2: RouteSecurity = { + authz: { + requiredPrivileges: ['foo', 'bar'], + }, + authc: { + enabled: true, + }, + }; + const versionedRoute = versionedRouter + .get({ path: '/test/{id}', access: 'internal', security: securityConfigDefault }) + .addVersion( + { + version: '1', + validate: false, + security: securityConfig1, + }, + handlerFn + ) + .addVersion( + { + version: '2', + validate: false, + security: securityConfig2, + }, + handlerFn + ) + .addVersion( + { + version: '3', + validate: false, + }, + handlerFn + ); + const routes = versionedRouter.getRoutes(); + expect(routes).toHaveLength(1); + const [route] = routes; + expect(route.handlers).toHaveLength(3); + + expect( + // @ts-expect-error + versionedRoute.getSecurity({ + headers: {}, + }) + ).toStrictEqual(securityConfigDefault); + + expect( + // @ts-expect-error + versionedRoute.getSecurity({ + headers: { [ELASTIC_HTTP_VERSION_HEADER]: '1' }, + }) + ).toStrictEqual(securityConfig1); + + expect( + // @ts-expect-error + versionedRoute.getSecurity({ + headers: { [ELASTIC_HTTP_VERSION_HEADER]: '2' }, + }) + ).toStrictEqual(securityConfig2); + + expect( + // @ts-expect-error + versionedRoute.getSecurity({ + headers: {}, + }) + ).toStrictEqual(securityConfigDefault); + expect(router.get).toHaveBeenCalledTimes(1); + }); + + it('validates security configuration', () => { + const versionedRouter = CoreVersionedRouter.from({ router }); + const validSecurityConfig: RouteSecurity = { + authz: { + requiredPrivileges: ['foo'], + }, + authc: { + enabled: 'optional', + }, + }; + + expect(() => + versionedRouter.get({ + path: '/test/{id}', + access: 'internal', + security: { + authz: { + requiredPrivileges: [], + }, + }, + }) + ).toThrowErrorMatchingInlineSnapshot( + `"[authz.requiredPrivileges]: array size is [0], but cannot be smaller than [1]"` + ); + + const route = versionedRouter.get({ + path: '/test/{id}', + access: 'internal', + security: validSecurityConfig, + }); + + expect(() => + route.addVersion( + { + version: '1', + validate: false, + security: { + authz: { + requiredPrivileges: [{ allRequired: ['foo'], anyRequired: ['bar'] }], + }, + }, + }, + handlerFn + ) + ).toThrowErrorMatchingInlineSnapshot(` + "[authz.requiredPrivileges.0]: types that failed validation: + - [authz.requiredPrivileges.0.0.anyRequired]: array size is [1], but cannot be smaller than [2] + - [authz.requiredPrivileges.0.1]: expected value of type [string] but got [Object]" + `); + }); }); diff --git a/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.ts b/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.ts index 510f713ac6ac4..3ab9af61af628 100644 --- a/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.ts +++ b/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.ts @@ -23,6 +23,8 @@ import type { VersionedRouteConfig, IKibanaResponse, RouteConfigOptions, + RouteSecurityGetter, + RouteSecurity, } from '@kbn/core-http-server'; import type { Mutable } from 'utility-types'; import type { Method, VersionedRouterRoute } from './types'; @@ -37,9 +39,11 @@ import { removeQueryVersion, } from './route_version_utils'; import { injectResponseHeaders } from './inject_response_headers'; +import { validRouteSecurity } from '../security_route_config_validator'; import { resolvers } from './handler_resolvers'; import { prepareVersionedRouteValidation, unwrapVersionedResponseBodyValidation } from './util'; +import type { RequestLike } from './route_version_utils'; type Options = AddVersionOpts; @@ -82,6 +86,7 @@ export class CoreVersionedRoute implements VersionedRoute { private useDefaultStrategyForPath: boolean; private isPublic: boolean; private enableQueryVersion: boolean; + private defaultSecurityConfig: RouteSecurity | undefined; private constructor( private readonly router: CoreVersionedRouter, public readonly method: Method, @@ -91,12 +96,14 @@ export class CoreVersionedRoute implements VersionedRoute { this.useDefaultStrategyForPath = router.useVersionResolutionStrategyForInternalPaths.has(path); this.isPublic = this.options.access === 'public'; this.enableQueryVersion = this.options.enableQueryVersion === true; + this.defaultSecurityConfig = validRouteSecurity(this.options.security, this.options.options); this.router.router[this.method]( { path: this.path, validate: passThroughValidation, // @ts-expect-error upgrade typescript v5.1.6 options: this.getRouteConfigOptions(), + security: this.getSecurity, }, this.requestHandler, { isVersioned: true } @@ -122,6 +129,18 @@ export class CoreVersionedRoute implements VersionedRoute { return this.handlers.size ? '[' + [...this.handlers.keys()].join(', ') + ']' : ''; } + private getVersion(req: RequestLike): ApiVersion | undefined { + let version; + const maybeVersion = readVersion(req, this.enableQueryVersion); + if (!maybeVersion && (this.isPublic || this.useDefaultStrategyForPath)) { + version = this.getDefaultVersion(); + } else { + version = maybeVersion; + } + + return version; + } + private requestHandler = async ( ctx: RequestHandlerContextBase, originalReq: KibanaRequest, @@ -134,14 +153,8 @@ export class CoreVersionedRoute implements VersionedRoute { }); } const req = originalReq as Mutable; - let version: undefined | ApiVersion; + const version = this.getVersion(req); - const maybeVersion = readVersion(req, this.enableQueryVersion); - if (!maybeVersion && (this.isPublic || this.useDefaultStrategyForPath)) { - version = this.getDefaultVersion(); - } else { - version = maybeVersion; - } if (!version) { return res.badRequest({ body: `Please specify a version via ${ELASTIC_HTTP_VERSION_HEADER} header. Available versions: ${this.versionsToString()}`, @@ -247,6 +260,7 @@ export class CoreVersionedRoute implements VersionedRoute { public addVersion(options: Options, handler: RequestHandler): VersionedRoute { this.validateVersion(options.version); options = prepareVersionedRouteValidation(options); + this.handlers.set(options.version, { fn: handler, options, @@ -257,4 +271,10 @@ export class CoreVersionedRoute implements VersionedRoute { public getHandlers(): Array<{ fn: RequestHandler; options: Options }> { return [...this.handlers.values()]; } + + public getSecurity: RouteSecurityGetter = (req: RequestLike) => { + const version = this.getVersion(req)!; + + return this.handlers.get(version)?.options.security ?? this.defaultSecurityConfig; + }; } diff --git a/packages/core/http/core-http-router-server-internal/src/versioned_router/route_version_utils.ts b/packages/core/http/core-http-router-server-internal/src/versioned_router/route_version_utils.ts index f8645f947beaf..a6e7c3e31f45f 100644 --- a/packages/core/http/core-http-router-server-internal/src/versioned_router/route_version_utils.ts +++ b/packages/core/http/core-http-router-server-internal/src/versioned_router/route_version_utils.ts @@ -54,6 +54,11 @@ type KibanaRequestWithQueryVersion = KibanaRequest< { [ELASTIC_HTTP_VERSION_QUERY_PARAM]: unknown } >; +export interface RequestLike { + headers: KibanaRequest['headers']; + query?: KibanaRequest['query']; +} + export function hasQueryVersion( request: Mutable ): request is Mutable { @@ -63,13 +68,13 @@ export function removeQueryVersion(request: Mutable { }, }); }); + + describe('validates security config', () => { + it('throws error if requiredPrivileges are not provided with enabled authz', () => { + expect(() => + prepareVersionedRouteValidation({ + version: '1', + validate: false, + security: { + authz: { + requiredPrivileges: [], + }, + }, + }) + ).toThrowErrorMatchingInlineSnapshot( + `"[authz.requiredPrivileges]: array size is [0], but cannot be smaller than [1]"` + ); + }); + + it('throws error if reason is not provided with disabled authz', () => { + expect(() => + prepareVersionedRouteValidation({ + version: '1', + validate: false, + security: { + // @ts-expect-error + authz: { + enabled: false, + }, + }, + }) + ).toThrowErrorMatchingInlineSnapshot( + `"[authz.reason]: expected value of type [string] but got [undefined]"` + ); + }); + + it('passes through valid security configuration with enabled authz', () => { + expect( + prepareVersionedRouteValidation({ + version: '1', + validate: false, + security: { + authz: { + requiredPrivileges: ['privilege-1', { anyRequired: ['privilege-2', 'privilege-3'] }], + }, + }, + }) + ).toMatchInlineSnapshot(` + Object { + "security": Object { + "authz": Object { + "requiredPrivileges": Array [ + "privilege-1", + Object { + "anyRequired": Array [ + "privilege-2", + "privilege-3", + ], + }, + ], + }, + }, + "validate": false, + "version": "1", + } + `); + }); + + it('passes through valid security configuration with disabled authz', () => { + expect( + prepareVersionedRouteValidation({ + version: '1', + validate: false, + security: { + authz: { + enabled: false, + reason: 'Authorization is disabled', + }, + }, + }) + ).toMatchInlineSnapshot(` + Object { + "security": Object { + "authz": Object { + "enabled": false, + "reason": "Authorization is disabled", + }, + }, + "validate": false, + "version": "1", + } + `); + }); + }); }); test('unwrapVersionedResponseBodyValidation', () => { diff --git a/packages/core/http/core-http-router-server-internal/src/versioned_router/util.ts b/packages/core/http/core-http-router-server-internal/src/versioned_router/util.ts index a5286d70593c4..475f69899d861 100644 --- a/packages/core/http/core-http-router-server-internal/src/versioned_router/util.ts +++ b/packages/core/http/core-http-router-server-internal/src/versioned_router/util.ts @@ -16,6 +16,7 @@ import type { VersionedRouteResponseValidation, VersionedRouteValidation, } from '@kbn/core-http-server'; +import { validRouteSecurity } from '../security_route_config_validator'; export function isCustomValidation( v: VersionedRouteCustomResponseBodyValidation | VersionedResponseBodyValidation @@ -70,17 +71,18 @@ function prepareValidation(validation: VersionedRouteValidation ): AddVersionOpts { - if (typeof options.validate === 'function') { - const validate = options.validate; - return { - ...options, - validate: once(() => prepareValidation(validate())), - }; - } else if (typeof options.validate === 'object' && options.validate !== null) { - return { - ...options, - validate: prepareValidation(options.validate), - }; + const { validate: originalValidate, security, ...rest } = options; + let validate = originalValidate; + + if (typeof originalValidate === 'function') { + validate = once(() => prepareValidation(originalValidate())); + } else if (typeof validate === 'object' && validate !== null) { + validate = prepareValidation(validate); } - return options; + + return { + security: validRouteSecurity(security), + validate, + ...rest, + }; } diff --git a/packages/core/http/core-http-server-internal/src/http_server.ts b/packages/core/http/core-http-server-internal/src/http_server.ts index 8c6f745f052c7..4f3c96518cefc 100644 --- a/packages/core/http/core-http-server-internal/src/http_server.ts +++ b/packages/core/http/core-http-server-internal/src/http_server.ts @@ -700,6 +700,7 @@ export class HttpServer { const kibanaRouteOptions: KibanaRouteOptions = { xsrfRequired: route.options.xsrfRequired ?? !isSafeMethod(route.method), access: route.options.access ?? 'internal', + security: route.security, }; // Log HTTP API target consumer. optionsLogger.debug( diff --git a/packages/core/http/core-http-server-internal/src/lifecycle/on_post_auth.ts b/packages/core/http/core-http-server-internal/src/lifecycle/on_post_auth.ts index ff1dde1c059a0..25424d29b090c 100644 --- a/packages/core/http/core-http-server-internal/src/lifecycle/on_post_auth.ts +++ b/packages/core/http/core-http-server-internal/src/lifecycle/on_post_auth.ts @@ -11,6 +11,7 @@ import { Lifecycle, Request, ResponseToolkit as HapiResponseToolkit } from '@hap import type { Logger } from '@kbn/logging'; import type { OnPostAuthNextResult, + OnPostAuthAuthzResult, OnPostAuthToolkit, OnPostAuthResult, OnPostAuthHandler, @@ -22,6 +23,7 @@ import { CoreKibanaRequest, lifecycleResponseFactory, } from '@kbn/core-http-router-server-internal'; +import { deepFreeze } from '@kbn/std'; const postAuthResult = { next(): OnPostAuthResult { @@ -30,10 +32,16 @@ const postAuthResult = { isNext(result: OnPostAuthResult): result is OnPostAuthNextResult { return result && result.type === OnPostAuthResultType.next; }, + isAuthzResult(result: OnPostAuthResult): result is OnPostAuthAuthzResult { + return result && result.type === OnPostAuthResultType.authzResult; + }, }; const toolkit: OnPostAuthToolkit = { next: postAuthResult.next, + authzResultNext: (authzResult: Record) => { + return { type: OnPostAuthResultType.authzResult, authzResult }; + }, }; /** @@ -49,13 +57,26 @@ export function adoptToHapiOnPostAuthFormat(fn: OnPostAuthHandler, log: Logger) const hapiResponseAdapter = new HapiResponseAdapter(responseToolkit); try { const result = await fn(CoreKibanaRequest.from(request), lifecycleResponseFactory, toolkit); + if (isKibanaResponse(result)) { return hapiResponseAdapter.handle(result); } + if (postAuthResult.isNext(result)) { return responseToolkit.continue; } + if (postAuthResult.isAuthzResult(result)) { + Object.defineProperty(request.app, 'authzResult', { + value: deepFreeze(result.authzResult), + configurable: false, + writable: false, + enumerable: false, + }); + + return responseToolkit.continue; + } + throw new Error( `Unexpected result from OnPostAuth. Expected OnPostAuthResult or KibanaResponse, but given: ${result}.` ); diff --git a/packages/core/http/core-http-server-internal/src/lifecycle_handlers.test.ts b/packages/core/http/core-http-server-internal/src/lifecycle_handlers.test.ts index f0a1813656a88..bfb132aff32d2 100644 --- a/packages/core/http/core-http-server-internal/src/lifecycle_handlers.test.ts +++ b/packages/core/http/core-http-server-internal/src/lifecycle_handlers.test.ts @@ -40,6 +40,7 @@ const createToolkit = (): ToolkitMock => { render: jest.fn(), next: jest.fn(), rewriteUrl: jest.fn(), + authzResultNext: jest.fn(), }; }; diff --git a/packages/core/http/core-http-server-mocks/src/http_server.mocks.ts b/packages/core/http/core-http-server-mocks/src/http_server.mocks.ts index 760090b39714a..ced67ed273d8e 100644 --- a/packages/core/http/core-http-server-mocks/src/http_server.mocks.ts +++ b/packages/core/http/core-http-server-mocks/src/http_server.mocks.ts @@ -34,6 +34,7 @@ const createToolkitMock = (): ToolkitMock => { render: jest.fn(), next: jest.fn(), rewriteUrl: jest.fn(), + authzResultNext: jest.fn(), }; }; diff --git a/packages/core/http/core-http-server-mocks/src/http_service.mock.ts b/packages/core/http/core-http-server-mocks/src/http_service.mock.ts index 8c71ac7939fbe..4e803ee5f86a8 100644 --- a/packages/core/http/core-http-server-mocks/src/http_service.mock.ts +++ b/packages/core/http/core-http-server-mocks/src/http_service.mock.ts @@ -276,6 +276,7 @@ const createOnPreAuthToolkitMock = (): jest.Mocked => ({ const createOnPostAuthToolkitMock = (): jest.Mocked => ({ next: jest.fn(), + authzResultNext: jest.fn(), }); const createOnPreRoutingToolkitMock = (): jest.Mocked => ({ diff --git a/packages/core/http/core-http-server/index.ts b/packages/core/http/core-http-server/index.ts index 64387e5ca36d7..4ba653fbd534c 100644 --- a/packages/core/http/core-http-server/index.ts +++ b/packages/core/http/core-http-server/index.ts @@ -27,6 +27,7 @@ export type { AuthToolkit, OnPostAuthHandler, OnPostAuthNextResult, + OnPostAuthAuthzResult, OnPostAuthToolkit, OnPostAuthResult, OnPreAuthHandler, @@ -107,6 +108,17 @@ export type { RouteValidatorFullConfigResponse, LazyValidator, RouteAccess, + AuthzDisabled, + AuthzEnabled, + RouteAuthz, + RouteAuthc, + AuthcDisabled, + AuthcEnabled, + Privilege, + PrivilegeSet, + RouteSecurity, + RouteSecurityGetter, + InternalRouteSecurity, } from './src/router'; export { validBodyOutput, diff --git a/packages/core/http/core-http-server/src/lifecycle/index.ts b/packages/core/http/core-http-server/src/lifecycle/index.ts index ac3b28a1469ed..f999d9daa0042 100644 --- a/packages/core/http/core-http-server/src/lifecycle/index.ts +++ b/packages/core/http/core-http-server/src/lifecycle/index.ts @@ -25,6 +25,7 @@ export type { OnPostAuthNextResult, OnPostAuthToolkit, OnPostAuthResult, + OnPostAuthAuthzResult, } from './on_post_auth'; export { OnPostAuthResultType } from './on_post_auth'; diff --git a/packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts b/packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts index 7f5d3b1a81cb3..2881893906e64 100644 --- a/packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts +++ b/packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts @@ -14,6 +14,7 @@ import type { IKibanaResponse, KibanaRequest, LifecycleResponseFactory } from '. */ export enum OnPostAuthResultType { next = 'next', + authzResult = 'authzResult', } /** @@ -26,7 +27,15 @@ export interface OnPostAuthNextResult { /** * @public */ -export type OnPostAuthResult = OnPostAuthNextResult; +export interface OnPostAuthAuthzResult { + type: OnPostAuthResultType.authzResult; + authzResult: Record; +} + +/** + * @public + */ +export type OnPostAuthResult = OnPostAuthNextResult | OnPostAuthAuthzResult; /** * @public @@ -35,6 +44,7 @@ export type OnPostAuthResult = OnPostAuthNextResult; export interface OnPostAuthToolkit { /** To pass request to the next handler */ next: () => OnPostAuthResult; + authzResultNext: (authzResult: Record) => OnPostAuthAuthzResult; } /** diff --git a/packages/core/http/core-http-server/src/router/index.ts b/packages/core/http/core-http-server/src/router/index.ts index 89e9a345179b6..c26212fa0de81 100644 --- a/packages/core/http/core-http-server/src/router/index.ts +++ b/packages/core/http/core-http-server/src/router/index.ts @@ -29,6 +29,8 @@ export type { KibanaRequestRouteOptions, KibanaRequestState, KibanaRouteOptions, + RouteSecurityGetter, + InternalRouteSecurity, } from './request'; export type { RequestHandlerWrapper, RequestHandler } from './request_handler'; export type { RequestHandlerContextBase } from './request_handler_context'; @@ -53,7 +55,17 @@ export type { RouteContentType, SafeRouteMethod, RouteAccess, + AuthzDisabled, + AuthzEnabled, + RouteAuthz, + RouteAuthc, + AuthcDisabled, + AuthcEnabled, + RouteSecurity, + Privilege, + PrivilegeSet, } from './route'; + export { validBodyOutput } from './route'; export type { RouteValidationFunction, diff --git a/packages/core/http/core-http-server/src/router/request.ts b/packages/core/http/core-http-server/src/router/request.ts index 9080c1be48c8c..5cb84a21be0c3 100644 --- a/packages/core/http/core-http-server/src/router/request.ts +++ b/packages/core/http/core-http-server/src/router/request.ts @@ -13,15 +13,22 @@ import type { Observable } from 'rxjs'; import type { RecursiveReadonly } from '@kbn/utility-types'; import type { HttpProtocol } from '../http_contract'; import type { IKibanaSocket } from './socket'; -import type { RouteMethod, RouteConfigOptions } from './route'; +import type { RouteMethod, RouteConfigOptions, RouteSecurity } from './route'; import type { Headers } from './headers'; +export type RouteSecurityGetter = (request: { + headers: KibanaRequest['headers']; + query?: KibanaRequest['query']; +}) => RouteSecurity | undefined; +export type InternalRouteSecurity = RouteSecurity | RouteSecurityGetter; + /** * @public */ export interface KibanaRouteOptions extends RouteOptionsApp { xsrfRequired: boolean; access: 'internal' | 'public'; + security?: InternalRouteSecurity; } /** @@ -32,6 +39,7 @@ export interface KibanaRequestState extends RequestApplicationState { requestUuid: string; rewrittenUrl?: URL; traceId?: string; + authzResult?: Record; measureElu?: () => void; } @@ -137,6 +145,12 @@ export interface KibanaRequest< */ readonly isFakeRequest: boolean; + /** + * Authorization check result, passed to the route handler. + * Indicates whether the specific privilege was granted or denied. + */ + readonly authzResult?: Record; + /** * An internal request has access to internal routes. * @note See the {@link KibanaRequestRouteOptions#access} route option. diff --git a/packages/core/http/core-http-server/src/router/route.ts b/packages/core/http/core-http-server/src/router/route.ts index c47688b60d3cd..bdf4f9f03c784 100644 --- a/packages/core/http/core-http-server/src/router/route.ts +++ b/packages/core/http/core-http-server/src/router/route.ts @@ -111,6 +111,82 @@ export interface RouteConfigOptionsBody { */ export type RouteAccess = 'public' | 'internal'; +export type Privilege = string; + +/** + * A set of privileges that can be used to define complex authorization requirements. + * + * - `anyRequired`: An array of privileges where at least one must be satisfied to meet the authorization requirement. + * - `allRequired`: An array of privileges where all listed privileges must be satisfied to meet the authorization requirement. + */ +export interface PrivilegeSet { + anyRequired?: Privilege[]; + allRequired?: Privilege[]; +} + +/** + * An array representing a combination of simple privileges or complex privilege sets. + */ +type Privileges = Array; + +/** + * Describes the authorization requirements when authorization is enabled. + * + * - `requiredPrivileges`: An array of privileges or privilege sets that are required for the route. + */ +export interface AuthzEnabled { + requiredPrivileges: Privileges; +} + +/** + * Describes the state when authorization is disabled. + * + * - `enabled`: A boolean indicating that authorization is not enabled (`false`). + * - `reason`: A string explaining why authorization is disabled. + */ +export interface AuthzDisabled { + enabled: false; + reason: string; +} + +/** + * Describes the authentication status when authentication is enabled. + * + * - `enabled`: A boolean or string indicating the authentication status. Can be `true` (authentication required) or `'optional'` (authentication is optional). + */ +export interface AuthcEnabled { + enabled: true | 'optional'; +} + +/** + * Describes the state when authentication is disabled. + * + * - `enabled`: A boolean indicating that authentication is not enabled (`false`). + * - `reason`: A string explaining why authentication is disabled. + */ +export interface AuthcDisabled { + enabled: false; + reason: string; +} + +/** + * Represents the authentication status for a route. It can either be enabled (`AuthcEnabled`) or disabled (`AuthcDisabled`). + */ +export type RouteAuthc = AuthcEnabled | AuthcDisabled; + +/** + * Represents the authorization status for a route. It can either be enabled (`AuthzEnabled`) or disabled (`AuthzDisabled`). + */ +export type RouteAuthz = AuthzEnabled | AuthzDisabled; + +/** + * Describes the security requirements for a route, including authorization and authentication. + */ +export interface RouteSecurity { + authz: RouteAuthz; + authc?: RouteAuthc; +} + /** * Additional route options. * @public @@ -216,6 +292,12 @@ export interface RouteConfigOptions { * @example 9.0.0 */ discontinued?: string; + /** + * Defines the security requirements for a route, including authorization and authentication. + * + * @remarks This will be surfaced in OAS documentation. + */ + security?: RouteSecurity; } /** @@ -296,6 +378,11 @@ export interface RouteConfig { */ validate: RouteValidator | (() => RouteValidator) | false; + /** + * Defines the security requirements for a route, including authorization and authentication. + */ + security?: RouteSecurity; + /** * Additional route options {@link RouteConfigOptions}. */ diff --git a/packages/core/http/core-http-server/src/router/router.ts b/packages/core/http/core-http-server/src/router/router.ts index e948bb3e26ae6..ba2b5eb906a93 100644 --- a/packages/core/http/core-http-server/src/router/router.ts +++ b/packages/core/http/core-http-server/src/router/router.ts @@ -15,6 +15,7 @@ import type { RequestHandler, RequestHandlerWrapper } from './request_handler'; import type { RequestHandlerContextBase } from './request_handler_context'; import type { RouteConfigOptions } from './route'; import { RouteValidator } from './route_validator'; +import { InternalRouteSecurity } from './request'; /** * Route handler common definition @@ -125,6 +126,7 @@ export interface RouterRoute { method: RouteMethod; path: string; options: RouteConfigOptions; + security?: InternalRouteSecurity; /** * @note if providing a function to lazily load your validation schemas assume * that the function will only be called once. diff --git a/packages/core/http/core-http-server/src/versioning/types.ts b/packages/core/http/core-http-server/src/versioning/types.ts index c552abd251a1f..60cbca014e683 100644 --- a/packages/core/http/core-http-server/src/versioning/types.ts +++ b/packages/core/http/core-http-server/src/versioning/types.ts @@ -35,10 +35,12 @@ export type VersionedRouteConfig = Omit< > & { options?: Omit< RouteConfigOptions, - 'access' | 'description' | 'deprecated' | 'discontinued' + 'access' | 'description' | 'deprecated' | 'discontinued' | 'security' >; /** See {@link RouteConfigOptions['access']} */ access: Exclude['access'], undefined>; + /** See {@link RouteConfigOptions['security']} */ + security?: Exclude['security'], undefined>; /** * When enabled, the router will also check for the presence of an `apiVersion` * query parameter to determine the route version to resolve to: @@ -337,6 +339,8 @@ export interface AddVersionOpts { * @public */ validate: false | VersionedRouteValidation | (() => VersionedRouteValidation); // Provide a way to lazily load validation schemas + + security?: Exclude['security'], undefined>; } /** diff --git a/src/core/server/index.ts b/src/core/server/index.ts index 5282f2048dd06..f4852bdc97fe3 100644 --- a/src/core/server/index.ts +++ b/src/core/server/index.ts @@ -242,7 +242,7 @@ export type { } from '@kbn/core-http-server'; export type { IExternalUrlPolicy } from '@kbn/core-http-common'; -export { validBodyOutput } from '@kbn/core-http-server'; +export { validBodyOutput, OnPostAuthResultType } from '@kbn/core-http-server'; export type { HttpResourcesRenderOptions, @@ -605,3 +605,12 @@ export type { }; export type { CustomBrandingSetup } from '@kbn/core-custom-branding-server'; +export type { + AuthzDisabled, + AuthzEnabled, + RouteAuthz, + RouteSecurity, + RouteSecurityGetter, + Privilege, + PrivilegeSet, +} from '@kbn/core-http-server'; diff --git a/src/core/server/integration_tests/http/request_representation.test.ts b/src/core/server/integration_tests/http/request_representation.test.ts index 0688a858799e4..f180a3a49ce0f 100644 --- a/src/core/server/integration_tests/http/request_representation.test.ts +++ b/src/core/server/integration_tests/http/request_representation.test.ts @@ -122,10 +122,12 @@ describe('request logging', () => { xsrfRequired: false, access: 'internal', tags: [], + security: undefined, timeout: [Object], body: undefined } - } + }, + authzResult: undefined }" `); }); diff --git a/x-pack/plugins/security/common/constants.ts b/x-pack/plugins/security/common/constants.ts index 60644c5c6d21a..8d0237916bb5a 100644 --- a/x-pack/plugins/security/common/constants.ts +++ b/x-pack/plugins/security/common/constants.ts @@ -111,3 +111,8 @@ export const SESSION_ROUTE = '/internal/security/session'; * Allowed image file types for uploading an image as avatar */ export const IMAGE_FILE_TYPES = ['image/svg+xml', 'image/jpeg', 'image/png', 'image/gif']; + +/** + * Prefix for API actions. + */ +export const API_OPERATION_PREFIX = 'api:'; diff --git a/x-pack/plugins/security/server/authorization/api_authorization.test.ts b/x-pack/plugins/security/server/authorization/api_authorization.test.ts index 762a9a617498a..e928d73220274 100644 --- a/x-pack/plugins/security/server/authorization/api_authorization.test.ts +++ b/x-pack/plugins/security/server/authorization/api_authorization.test.ts @@ -5,6 +5,7 @@ * 2.0. */ +import type { RouteSecurity } from '@kbn/core/server'; import { coreMock, httpServerMock, @@ -137,4 +138,279 @@ describe('initAPIAuthorization', () => { }); expect(mockAuthz.mode.useRbacForRequest).toHaveBeenCalledWith(mockRequest); }); + + describe('security config', () => { + const testSecurityConfig = ( + description: string, + { + security, + kibanaPrivilegesResponse, + kibanaPrivilegesRequestActions, + asserts, + }: { + security?: RouteSecurity; + kibanaPrivilegesResponse?: Array<{ privilege: string; authorized: boolean }>; + kibanaPrivilegesRequestActions?: string[]; + asserts: { + forbidden?: boolean; + authzResult?: Record; + authzDisabled?: boolean; + }; + } + ) => { + test(description, async () => { + const mockHTTPSetup = coreMock.createSetup().http; + const mockAuthz = authorizationMock.create({ version: '1.0.0-zeta1' }); + initAPIAuthorization(mockHTTPSetup, mockAuthz, loggingSystemMock.create().get()); + + const [[postAuthHandler]] = mockHTTPSetup.registerOnPostAuth.mock.calls; + + const headers = { authorization: 'foo' }; + + const mockRequest = httpServerMock.createKibanaRequest({ + method: 'get', + path: '/foo/bar', + headers, + kibanaRouteOptions: { + xsrfRequired: true, + access: 'internal', + security, + }, + }); + const mockResponse = httpServerMock.createResponseFactory(); + const mockPostAuthToolkit = httpServiceMock.createOnPostAuthToolkit(); + + const mockCheckPrivileges = jest.fn().mockReturnValue({ + privileges: { + kibana: kibanaPrivilegesResponse, + }, + }); + mockAuthz.mode.useRbacForRequest.mockReturnValue(true); + mockAuthz.checkPrivilegesDynamicallyWithRequest.mockImplementation((request) => { + // hapi conceals the actual "request" from us, so we make sure that the headers are passed to + // "checkPrivilegesDynamicallyWithRequest" because this is what we're really concerned with + expect(request.headers).toMatchObject(headers); + + return mockCheckPrivileges; + }); + + await postAuthHandler(mockRequest, mockResponse, mockPostAuthToolkit); + + expect(mockAuthz.mode.useRbacForRequest).toHaveBeenCalledWith(mockRequest); + + if (asserts.authzDisabled) { + expect(mockResponse.forbidden).not.toHaveBeenCalled(); + expect(mockPostAuthToolkit.authzResultNext).not.toHaveBeenCalled(); + expect(mockPostAuthToolkit.next).toHaveBeenCalled(); + expect(mockCheckPrivileges).not.toHaveBeenCalled(); + + return; + } + + expect(mockCheckPrivileges).toHaveBeenCalledWith({ + kibana: kibanaPrivilegesRequestActions!.map((action: string) => + mockAuthz.actions.api.get(action) + ), + }); + + if (asserts.forbidden) { + expect(mockResponse.forbidden).toHaveBeenCalled(); + expect(mockPostAuthToolkit.authzResultNext).not.toHaveBeenCalled(); + } + + if (asserts.authzResult) { + expect(mockResponse.forbidden).not.toHaveBeenCalled(); + expect(mockPostAuthToolkit.authzResultNext).toHaveBeenCalledTimes(1); + expect(mockPostAuthToolkit.authzResultNext).toHaveBeenCalledWith(asserts.authzResult); + } + }); + }; + + testSecurityConfig( + `protected route returns "authzResult" if user has allRequired AND anyRequired privileges requested`, + { + security: { + authz: { + requiredPrivileges: [ + { + allRequired: ['privilege1'], + anyRequired: ['privilege2', 'privilege3'], + }, + ], + }, + }, + kibanaPrivilegesResponse: [ + { privilege: 'api:privilege1', authorized: true }, + { privilege: 'api:privilege2', authorized: true }, + { privilege: 'api:privilege3', authorized: false }, + ], + kibanaPrivilegesRequestActions: ['privilege1', 'privilege2', 'privilege3'], + asserts: { + authzResult: { + privilege1: true, + privilege2: true, + privilege3: false, + }, + }, + } + ); + + testSecurityConfig( + `protected route returns "authzResult" if user has all required privileges requested as complex config`, + { + security: { + authz: { + requiredPrivileges: [ + { + allRequired: ['privilege1', 'privilege2'], + }, + ], + }, + }, + kibanaPrivilegesResponse: [ + { privilege: 'api:privilege1', authorized: true }, + { privilege: 'api:privilege2', authorized: true }, + ], + kibanaPrivilegesRequestActions: ['privilege1', 'privilege2'], + asserts: { + authzResult: { + privilege1: true, + privilege2: true, + }, + }, + } + ); + + testSecurityConfig( + `protected route returns "authzResult" if user has at least one of anyRequired privileges requested`, + { + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: ['privilege1', 'privilege2', 'privilege3'], + }, + ], + }, + }, + kibanaPrivilegesResponse: [ + { privilege: 'api:privilege1', authorized: false }, + { privilege: 'api:privilege2', authorized: true }, + { privilege: 'api:privilege3', authorized: false }, + ], + kibanaPrivilegesRequestActions: ['privilege1', 'privilege2', 'privilege3'], + asserts: { + authzResult: { + privilege1: false, + privilege2: true, + privilege3: false, + }, + }, + } + ); + + testSecurityConfig( + `protected route returns "authzResult" if user has all required privileges requested as simple config`, + { + security: { + authz: { + requiredPrivileges: ['privilege1', 'privilege2'], + }, + }, + kibanaPrivilegesResponse: [ + { privilege: 'api:privilege1', authorized: true }, + { privilege: 'api:privilege2', authorized: true }, + ], + kibanaPrivilegesRequestActions: ['privilege1', 'privilege2'], + asserts: { + authzResult: { + privilege1: true, + privilege2: true, + }, + }, + } + ); + + testSecurityConfig( + `protected route returns forbidden if user has allRequired AND NONE of anyRequired privileges requested`, + { + security: { + authz: { + requiredPrivileges: [ + { + allRequired: ['privilege1'], + anyRequired: ['privilege2', 'privilege3'], + }, + ], + }, + }, + kibanaPrivilegesResponse: [ + { privilege: 'api:privilege1', authorized: true }, + { privilege: 'api:privilege2', authorized: false }, + { privilege: 'api:privilege3', authorized: false }, + ], + kibanaPrivilegesRequestActions: ['privilege1', 'privilege2', 'privilege3'], + asserts: { + forbidden: true, + }, + } + ); + + testSecurityConfig( + `protected route returns forbidden if user doesn't have at least one from allRequired privileges requested`, + { + security: { + authz: { + requiredPrivileges: [ + { + allRequired: ['privilege1', 'privilege2'], + anyRequired: ['privilege3', 'privilege4'], + }, + ], + }, + }, + kibanaPrivilegesResponse: [ + { privilege: 'api:privilege1', authorized: true }, + { privilege: 'api:privilege2', authorized: false }, + { privilege: 'api:privilege3', authorized: false }, + { privilege: 'api:privilege4', authorized: true }, + ], + kibanaPrivilegesRequestActions: ['privilege1', 'privilege2', 'privilege3', 'privilege4'], + asserts: { + forbidden: true, + }, + } + ); + + testSecurityConfig( + `protected route returns forbidden if user doesn't have at least one from required privileges requested as simple config`, + { + security: { + authz: { + requiredPrivileges: ['privilege1', 'privilege2'], + }, + }, + kibanaPrivilegesResponse: [ + { privilege: 'api:privilege1', authorized: true }, + { privilege: 'api:privilege2', authorized: false }, + ], + kibanaPrivilegesRequestActions: ['privilege1', 'privilege2'], + asserts: { + forbidden: true, + }, + } + ); + + testSecurityConfig(`route returns next if route has authz disabled`, { + security: { + authz: { + enabled: false, + reason: 'authz is disabled', + }, + }, + asserts: { + authzDisabled: true, + }, + }); + }); }); diff --git a/x-pack/plugins/security/server/authorization/api_authorization.ts b/x-pack/plugins/security/server/authorization/api_authorization.ts index 6956a91d81265..ba38d9ca0aa20 100644 --- a/x-pack/plugins/security/server/authorization/api_authorization.ts +++ b/x-pack/plugins/security/server/authorization/api_authorization.ts @@ -5,8 +5,23 @@ * 2.0. */ -import type { HttpServiceSetup, Logger } from '@kbn/core/server'; +import type { + AuthzDisabled, + AuthzEnabled, + HttpServiceSetup, + Logger, + Privilege, + PrivilegeSet, + RouteAuthz, +} from '@kbn/core/server'; import type { AuthorizationServiceSetup } from '@kbn/security-plugin-types-server'; +import type { RecursiveReadonly } from '@kbn/utility-types'; + +import { API_OPERATION_PREFIX } from '../../common/constants'; + +const isAuthzDisabled = (authz?: RecursiveReadonly): authz is AuthzDisabled => { + return (authz as AuthzDisabled)?.enabled === false; +}; export function initAPIAuthorization( http: HttpServiceSetup, @@ -19,6 +34,78 @@ export function initAPIAuthorization( return toolkit.next(); } + const security = request.route.options.security; + + if (security) { + if (isAuthzDisabled(security.authz)) { + logger.warn( + `Route authz is disabled for ${request.url.pathname}${request.url.search}": ${security.authz.reason}` + ); + + return toolkit.next(); + } + + const authz = security.authz as AuthzEnabled; + + const requestedPrivileges = authz.requiredPrivileges.flatMap((privilegeEntry) => { + if (typeof privilegeEntry === 'object') { + return [...(privilegeEntry.allRequired ?? []), ...(privilegeEntry.anyRequired ?? [])]; + } + + return privilegeEntry; + }); + + const apiActions = requestedPrivileges.map((permission) => actions.api.get(permission)); + const checkPrivileges = checkPrivilegesDynamicallyWithRequest(request); + const checkPrivilegesResponse = await checkPrivileges({ kibana: apiActions }); + + const privilegeToApiOperation = (privilege: string) => + privilege.replace(API_OPERATION_PREFIX, ''); + const kibanaPrivileges: Record = {}; + + for (const kbPrivilege of checkPrivilegesResponse.privileges.kibana) { + kibanaPrivileges[privilegeToApiOperation(kbPrivilege.privilege)] = kbPrivilege.authorized; + } + + const hasRequestedPrivilege = (kbPrivilege: Privilege | PrivilegeSet) => { + if (typeof kbPrivilege === 'object') { + const allRequired = kbPrivilege.allRequired ?? []; + const anyRequired = kbPrivilege.anyRequired ?? []; + + return ( + allRequired.every((privilege: string) => kibanaPrivileges[privilege]) && + (!anyRequired.length || + anyRequired.some((privilege: string) => kibanaPrivileges[privilege])) + ); + } + + return kibanaPrivileges[kbPrivilege]; + }; + + for (const requiredPrivilege of authz.requiredPrivileges) { + if (!hasRequestedPrivilege(requiredPrivilege)) { + const missingPrivileges = Object.keys(kibanaPrivileges).filter( + (key) => !kibanaPrivileges[key] + ); + logger.warn( + `User not authorized for "${request.url.pathname}${ + request.url.search + }", responding with 403: missing privileges: ${missingPrivileges.join(', ')}` + ); + + return response.forbidden({ + body: { + message: `User not authorized for ${request.url.pathname}${ + request.url.search + }, missing privileges: ${missingPrivileges.join(', ')}`, + }, + }); + } + } + + return toolkit.authzResultNext(kibanaPrivileges); + } + const tags = request.route.options.tags; const tagPrefix = 'access:'; const actionTags = tags.filter((tag) => tag.startsWith(tagPrefix)); diff --git a/x-pack/plugins/security_solution/server/lib/product_features_service/product_features_service.test.ts b/x-pack/plugins/security_solution/server/lib/product_features_service/product_features_service.test.ts index 27205a30be785..a1b71a9c4f04f 100644 --- a/x-pack/plugins/security_solution/server/lib/product_features_service/product_features_service.test.ts +++ b/x-pack/plugins/security_solution/server/lib/product_features_service/product_features_service.test.ts @@ -187,7 +187,7 @@ describe('ProductFeaturesService', () => { url: { pathname: '', search: '' }, } as unknown as KibanaRequest); const res = { notFound: jest.fn() } as unknown as LifecycleResponseFactory; - const toolkit = { next: jest.fn() }; + const toolkit = httpServiceMock.createOnPostAuthToolkit(); beforeEach(() => { jest.clearAllMocks(); From 32144fc0244566db557646ff35cc82c29734df72 Mon Sep 17 00:00:00 2001 From: Robert Jaszczurek <92210485+rbrtj@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:17:29 +0200 Subject: [PATCH 20/60] [ML] Anomaly explorer: Show Data Gaps and Connect Anomalous Points on Single Metric Charts (#194119) ## Summary Fix for [#193885](https://github.com/elastic/kibana/issues/193885) Single metric viewer: ![Screenshot 2024-09-26 at 13 31 35](https://github.com/user-attachments/assets/3576758e-9cb1-4c55-bd84-40f2095cc54f) Anomaly explorer: | Before | After | | ------------- | ------------- | | ![image](https://github.com/user-attachments/assets/89f48abd-26ac-4dd4-ab10-b1c8198f50ff) | ![Screenshot 2024-09-26 at 13 32 05](https://github.com/user-attachments/assets/e3a6e1e3-6238-4c01-a372-fa0c25475fbd) | --- .../explorer_chart_single_metric.js | 22 +++++++++++++--- .../models/results_service/anomaly_charts.ts | 26 +++++++++++++++---- 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_single_metric.js b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_single_metric.js index e358c381288d3..1b746647ef38d 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_single_metric.js +++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_single_metric.js @@ -368,6 +368,7 @@ export class ExplorerChartSingleMetric extends React.Component { // These are used for displaying tooltips on mouseover. // Don't render dots where value=null (data gaps, with no anomalies) // or for multi-bucket anomalies. + // Except for scheduled events. const dots = lineChartGroup .append('g') .attr('class', 'chart-markers') @@ -375,7 +376,9 @@ export class ExplorerChartSingleMetric extends React.Component { .data( data.filter( (d) => - (d.value !== null || typeof d.anomalyScore === 'number') && + (d.value !== null || + typeof d.anomalyScore === 'number' || + d.scheduledEvents !== undefined) && !showMultiBucketAnomalyMarker(d) ) ); @@ -407,7 +410,11 @@ export class ExplorerChartSingleMetric extends React.Component { // Update all dots to new positions. dots .attr('cx', (d) => lineChartXScale(d.date)) - .attr('cy', (d) => lineChartYScale(d.value)) + // Fallback with domain's min value if value is null + // To ensure event markers are rendered properly at the bottom of the chart + .attr('cy', (d) => + lineChartYScale(d.value !== null ? d.value : lineChartYScale.domain()[0]) + ) .attr('class', (d) => { let markerClass = 'metric-value'; if (isAnomalyVisible(d)) { @@ -470,7 +477,14 @@ export class ExplorerChartSingleMetric extends React.Component { // Update all markers to new positions. scheduledEventMarkers .attr('x', (d) => lineChartXScale(d.date) - LINE_CHART_ANOMALY_RADIUS) - .attr('y', (d) => lineChartYScale(d.value) - SCHEDULED_EVENT_SYMBOL_HEIGHT / 2); + .attr( + 'y', + (d) => + // Fallback with domain's min value if value is null + // To ensure event markers are rendered properly at the bottom of the chart + lineChartYScale(d.value !== null ? d.value : lineChartYScale.domain()[0]) - + SCHEDULED_EVENT_SYMBOL_HEIGHT / 2 + ); } function showAnomalyPopover(marker, circle) { @@ -596,7 +610,7 @@ export class ExplorerChartSingleMetric extends React.Component { }); } } - } else { + } else if (marker.value !== null) { tooltipData.push({ label: i18n.translate( 'xpack.ml.explorer.singleMetricChart.valueWithoutAnomalyScoreLabel', diff --git a/x-pack/plugins/ml/server/models/results_service/anomaly_charts.ts b/x-pack/plugins/ml/server/models/results_service/anomaly_charts.ts index 1690e2db74164..771e40fc13336 100644 --- a/x-pack/plugins/ml/server/models/results_service/anomaly_charts.ts +++ b/x-pack/plugins/ml/server/models/results_service/anomaly_charts.ts @@ -1055,9 +1055,11 @@ export function anomalyChartsDataProvider(mlClient: MlClient, client: IScopedClu // differently because of how the source data is structured. // For rare chart values we are only interested wether a value is either `0` or not, // `0` acts like a flag in the chart whether to display the dot/marker. - // All other charts (single metric, population) are metric based and with + // For single metric chart, we need to pass null values to display data gaps. + // All other charts are distribution based and with // those a value of `null` acts as the flag to hide a data point. if ( + chartType === CHART_TYPE.SINGLE_METRIC || (chartType === CHART_TYPE.EVENT_DISTRIBUTION && value > 0) || (chartType !== CHART_TYPE.EVENT_DISTRIBUTION && value !== null) ) { @@ -1079,6 +1081,7 @@ export function anomalyChartsDataProvider(mlClient: MlClient, client: IScopedClu // Iterate through the anomaly records, adding anomalyScore properties // to the chartData entries for anomalous buckets. const chartDataForPointSearch = getChartDataForPointSearch(chartData, records[0], chartType); + let shouldSortChartData = false; each(records, (record) => { // Look for a chart point with the same time as the record. // If none found, insert a point for anomalies due to a gap in the data. @@ -1087,10 +1090,17 @@ export function anomalyChartsDataProvider(mlClient: MlClient, client: IScopedClu if (chartPoint === undefined) { chartPoint = { date: recordTime, value: null }; chartData.push(chartPoint); + shouldSortChartData = true; } if (chartPoint !== undefined) { chartPoint.anomalyScore = record.record_score; + // If it is an empty chart point, set the value to the actual value + // To properly display the anomaly marker on the chart + if (chartPoint.value === null) { + chartPoint.value = Array.isArray(record.actual) ? record.actual[0] : record.actual; + } + if (record.actual !== undefined) { chartPoint.actual = record.actual; chartPoint.typical = record.typical; @@ -1119,6 +1129,12 @@ export function anomalyChartsDataProvider(mlClient: MlClient, client: IScopedClu } }); + // Chart data is sorted by default, but if we added points for anomalies, + // we need to sort again to ensure the points are in the correct order. + if (shouldSortChartData) { + chartData.sort((a, b) => a.date - b.date); + } + // Add a scheduledEvents property to any points in the chart data set // which correspond to times of scheduled events for the job. if (scheduledEvents !== undefined) { @@ -1126,14 +1142,14 @@ export function anomalyChartsDataProvider(mlClient: MlClient, client: IScopedClu const chartPoint = findChartPointForTime(chartDataForPointSearch, Number(time)); if (chartPoint !== undefined) { chartPoint.scheduledEvents = events; - // We do not want to create additional points for single metric charts - // as it could break the chart. - } else if (chartType !== CHART_TYPE.SINGLE_METRIC) { + } else { // If there's no underlying metric data point for the scheduled event, // create a new chart point with a value of 0. + // Except for Single Metric Charts, where we want to create a point at the bottom of the chart. + // Which is not always `0`. const eventChartPoint: ChartPoint = { date: Number(time), - value: 0, + value: chartType === CHART_TYPE.SINGLE_METRIC ? null : 0, entity: SCHEDULE_EVENT_MARKER_ENTITY, scheduledEvents: events, }; From 49661a35744adea396d6a80039d1a5f9976c957e Mon Sep 17 00:00:00 2001 From: Vitalii Dmyterko <92328789+vitaliidm@users.noreply.github.com> Date: Mon, 30 Sep 2024 13:19:56 +0100 Subject: [PATCH 21/60] [Security Solution][Detection Engine] fixes empty item_id in exception item update request schema (#194175) ## Summary - fixes schema for `updateExceptionListItemSchema` , that led to [error in 8.15](https://github.com/elastic/kibana/issues/191315) 8.15 is fixed in https://github.com/elastic/kibana/pull/194172, in separate PR, since 8.16+ error in not reproducible. But schema still is not correct. So this PR just fixes schema --- .../src/request/update_exception_list_item_schema/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/kbn-securitysolution-io-ts-list-types/src/request/update_exception_list_item_schema/index.ts b/packages/kbn-securitysolution-io-ts-list-types/src/request/update_exception_list_item_schema/index.ts index 8b7941c8ea936..b0190d8fa3883 100644 --- a/packages/kbn-securitysolution-io-ts-list-types/src/request/update_exception_list_item_schema/index.ts +++ b/packages/kbn-securitysolution-io-ts-list-types/src/request/update_exception_list_item_schema/index.ts @@ -21,6 +21,7 @@ import { description } from '../../common/description'; import { name } from '../../common/name'; import { _version } from '../../common/underscore_version'; import { id } from '../../common/id'; +import { item_id } from '../../common/item_id'; import { meta } from '../../common/meta'; import { namespace_type } from '../../common/namespace_type'; import { ExpireTimeOrUndefined, expireTimeOrUndefined } from '../../common'; @@ -40,7 +41,7 @@ export const updateExceptionListItemSchema = t.intersection([ comments: DefaultUpdateCommentsArray, // defaults to empty array if not set during decode expire_time: expireTimeOrUndefined, id, // defaults to undefined if not set during decode - item_id: t.union([t.string, t.undefined]), + item_id, meta, // defaults to undefined if not set during decode namespace_type, // defaults to 'single' if not set during decode os_types: osTypeArrayOrUndefined, // defaults to empty array if not set during decode From b005ea907b7173b2aa7ab0974f9a2fcfef08de0d Mon Sep 17 00:00:00 2001 From: Vitalii Dmyterko <92328789+vitaliidm@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:15:24 +0100 Subject: [PATCH 22/60] [Security Solution][Detection Engine] removes field_caps call for all fields in index during rule execution (#193869) ## Summary - addresses https://github.com/elastic/kibana/issues/187059 ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../create_security_rule_type_wrapper.ts | 21 ----- .../create_indicator_match_alert_type.ts | 2 - .../indicator_match/indicator_match.ts | 5 +- .../threat_mapping/create_event_signal.ts | 1 + .../threat_mapping/create_threat_signal.ts | 1 + .../threat_mapping/create_threat_signals.ts | 20 ++-- .../indicator_match/threat_mapping/types.ts | 1 - .../new_terms/create_new_terms_alert_type.ts | 3 +- .../rule_types/query/query.ts | 1 - .../threshold/create_threshold_alert_type.ts | 2 - .../rule_types/threshold/threshold.test.ts | 4 +- .../rule_types/threshold/threshold.ts | 6 +- .../lib/detection_engine/rule_types/types.ts | 3 +- .../utils/get_fields_for_wildcard.test.ts | 94 ------------------- .../utils/get_fields_for_wildcard.ts | 39 -------- .../rule_types/utils/get_query_fields.ts | 28 ++++++ 16 files changed, 50 insertions(+), 181 deletions(-) delete mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_fields_for_wildcard.test.ts delete mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_fields_for_wildcard.ts create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_fields.ts diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/create_security_rule_type_wrapper.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/create_security_rule_type_wrapper.ts index f25a8429089b6..ac56d2c41a8fe 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/create_security_rule_type_wrapper.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/create_security_rule_type_wrapper.ts @@ -11,7 +11,6 @@ import agent from 'elastic-apm-node'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { TIMESTAMP } from '@kbn/rule-data-utils'; import { createPersistenceRuleTypeWrapper } from '@kbn/rule-registry-plugin/server'; -import type { DataViewFieldBase } from '@kbn/es-query'; import { buildExceptionFilter } from '@kbn/lists-plugin/server/services/exception_lists'; import { technicalRuleFieldMap } from '@kbn/rule-registry-plugin/common/assets/field_maps/technical_rule_field_map'; import type { FieldMap } from '@kbn/alerts-as-data-utils'; @@ -26,8 +25,6 @@ import { hasTimestampFields, isMachineLearningParams, isEsqlParams, - isQueryParams, - isEqlParams, getDisabledActionsWarningText, } from './utils/utils'; import { DEFAULT_MAX_SIGNALS, DEFAULT_SEARCH_AFTER_PAGE_SIZE } from '../../../../common/constants'; @@ -47,7 +44,6 @@ import { withSecuritySpan } from '../../../utils/with_security_span'; import { getInputIndex, DataViewError } from './utils/get_input_output_index'; import { TIMESTAMP_RUNTIME_FIELD } from './constants'; import { buildTimestampRuntimeMapping } from './utils/build_timestamp_runtime_mapping'; -import { getFieldsForWildcard } from './utils/get_fields_for_wildcard'; import { alertsFieldMap, rulesFieldMap } from '../../../../common/field_maps'; import { sendAlertSuppressionTelemetryEvent } from './utils/telemetry/send_alert_suppression_telemetry_event'; @@ -139,7 +135,6 @@ export const createSecurityRuleTypeWrapper: CreateSecurityRuleTypeWrapper = } = options; let runState = state; let inputIndex: string[] = []; - let inputIndexFields: DataViewFieldBase[] = []; let runtimeMappings: estypes.MappingRuntimeFields | undefined; const { from, maxSignals, timestampOverride, timestampOverrideFallbackDisabled, to } = params; @@ -337,21 +332,6 @@ export const createSecurityRuleTypeWrapper: CreateSecurityRuleTypeWrapper = }); } - if ( - !isMachineLearningParams(params) && - !isEsqlParams(params) && - !isQueryParams(params) && - !isEqlParams(params) - ) { - const dataViews = await services.getDataViews(); - inputIndexFields = await getFieldsForWildcard({ - index: inputIndex, - dataViews, - language: params.language, - ruleExecutionLogger, - }); - } - try { const { listClient, exceptionsClient } = getListClient({ esClient: services.scopedClusterClient.asCurrentUser, @@ -426,7 +406,6 @@ export const createSecurityRuleTypeWrapper: CreateSecurityRuleTypeWrapper = inputIndex, exceptionFilter, unprocessedExceptions, - inputIndexFields, runtimeMappings: { ...runtimeMappings, ...timestampRuntimeMappings, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/create_indicator_match_alert_type.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/create_indicator_match_alert_type.ts index 3ad9925f7f053..d7f3e96d9a43d 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/create_indicator_match_alert_type.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/create_indicator_match_alert_type.ts @@ -76,7 +76,6 @@ export const createIndicatorMatchAlertType = ( secondaryTimestamp, exceptionFilter, unprocessedExceptions, - inputIndexFields, }, services, spaceId, @@ -119,7 +118,6 @@ export const createIndicatorMatchAlertType = ( secondaryTimestamp, exceptionFilter, unprocessedExceptions, - inputIndexFields, wrapSuppressedHits, runOpts, licensing, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/indicator_match.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/indicator_match.ts index 4f004f0bdc628..b8392a82bb6c0 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/indicator_match.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/indicator_match.ts @@ -15,7 +15,7 @@ import type { RuleExecutorServices, } from '@kbn/alerting-plugin/server'; import type { ListClient } from '@kbn/lists-plugin/server'; -import type { Filter, DataViewFieldBase } from '@kbn/es-query'; +import type { Filter } from '@kbn/es-query'; import type { RuleRangeTuple, BulkCreate, WrapHits, WrapSuppressedHits, RunOpts } from '../types'; import type { ITelemetryEventsSender } from '../../../telemetry/sender'; import { createThreatSignals } from './threat_mapping/create_threat_signals'; @@ -43,7 +43,6 @@ export const indicatorMatchExecutor = async ({ secondaryTimestamp, exceptionFilter, unprocessedExceptions, - inputIndexFields, wrapSuppressedHits, runOpts, licensing, @@ -65,7 +64,6 @@ export const indicatorMatchExecutor = async ({ secondaryTimestamp?: string; exceptionFilter: Filter | undefined; unprocessedExceptions: ExceptionListItemSchema[]; - inputIndexFields: DataViewFieldBase[]; wrapSuppressedHits: WrapSuppressedHits; runOpts: RunOpts; licensing: LicensingPluginSetup; @@ -106,7 +104,6 @@ export const indicatorMatchExecutor = async ({ secondaryTimestamp, exceptionFilter, unprocessedExceptions, - inputIndexFields, runOpts, licensing, experimentalFeatures, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_event_signal.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_event_signal.ts index e6bd194504fd6..59d20b9dcf0a3 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_event_signal.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_event_signal.ts @@ -144,6 +144,7 @@ export const createEventSignal = async ({ index: inputIndex, exceptionFilter, fields: inputIndexFields, + loadFields: true, }); ruleExecutionLogger.debug(`${ids?.length} matched signals found`); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signal.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signal.ts index 318f8ddfbb759..8d726fb17e901 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signal.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signal.ts @@ -81,6 +81,7 @@ export const createThreatSignal = async ({ index: inputIndex, exceptionFilter, fields: inputIndexFields, + loadFields: true, }); ruleExecutionLogger.debug( diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts index 46e5ce84e808c..4d477d53604a4 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts @@ -36,8 +36,8 @@ import { getEventCount, getEventList } from './get_event_count'; import { getMappingFilters } from './get_mapping_filters'; import { THREAT_PIT_KEEP_ALIVE } from '../../../../../../common/cti/constants'; import { getMaxSignalsWarning, getSafeSortIds } from '../../utils/utils'; -import { getFieldsForWildcard } from '../../utils/get_fields_for_wildcard'; import { getDataTierFilter } from '../../utils/get_data_tier_filter'; +import { getQueryFields } from '../../utils/get_query_fields'; export const createThreatSignals = async ({ alertId, @@ -72,7 +72,6 @@ export const createThreatSignals = async ({ secondaryTimestamp, exceptionFilter, unprocessedExceptions, - inputIndexFields, licensing, experimentalFeatures, }: CreateThreatSignalsOptions): Promise => { @@ -115,6 +114,14 @@ export const createThreatSignals = async ({ const allEventFilters = [...filters, eventMappingFilter, ...dataTiersFilters]; const allThreatFilters = [...threatFilters, indicatorMappingFilter, ...dataTiersFilters]; + const dataViews = await services.getDataViews(); + const inputIndexFields = await getQueryFields({ + dataViews, + index: inputIndex, + query, + language, + }); + const eventCount = await getEventCount({ esClient: services.scopedClusterClient.asCurrentUser, index: inputIndex, @@ -140,12 +147,11 @@ export const createThreatSignals = async ({ if (newPitId) threatPitId = newPitId; }; - const dataViews = await services.getDataViews(); - const threatIndexFields = await getFieldsForWildcard({ - index: threatIndex, - language: threatLanguage ?? 'kuery', + const threatIndexFields = await getQueryFields({ dataViews, - ruleExecutionLogger, + index: threatIndex, + query: threatQuery, + language: threatLanguage, }); const threatListCount = await getThreatListCount({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/types.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/types.ts index e1072f873917a..37bc9d1810137 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/types.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/types.ts @@ -77,7 +77,6 @@ export interface CreateThreatSignalsOptions { secondaryTimestamp?: string; exceptionFilter: Filter | undefined; unprocessedExceptions: ExceptionListItemSchema[]; - inputIndexFields: DataViewFieldBase[]; runOpts: RunOpts; licensing: LicensingPluginSetup; experimentalFeatures: ExperimentalFeatures; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/create_new_terms_alert_type.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/create_new_terms_alert_type.ts index e33f580388f98..fc0c4b31426df 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/create_new_terms_alert_type.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/create_new_terms_alert_type.ts @@ -110,7 +110,6 @@ export const createNewTermsAlertType = ( unprocessedExceptions, alertTimestampOverride, publicBaseUrl, - inputIndexFields, alertWithSuppression, }, services, @@ -135,7 +134,7 @@ export const createNewTermsAlertType = ( type: params.type, query: params.query, exceptionFilter, - fields: inputIndexFields, + loadFields: true, }; const esFilter = await getFilter(filterArgs); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts index 5915447e5a541..edf7ece7cc84b 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts @@ -58,7 +58,6 @@ export const queryExecutor = async ({ services, index: runOpts.inputIndex, exceptionFilter: runOpts.exceptionFilter, - fields: runOpts.inputIndexFields, loadFields: true, }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/create_threshold_alert_type.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/create_threshold_alert_type.ts index 84f3a52af95e2..f48cea676b953 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/create_threshold_alert_type.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/create_threshold_alert_type.ts @@ -74,7 +74,6 @@ export const createThresholdAlertType = ( aggregatableTimestampField, exceptionFilter, unprocessedExceptions, - inputIndexFields, }, services, startedAt, @@ -99,7 +98,6 @@ export const createThresholdAlertType = ( aggregatableTimestampField, exceptionFilter, unprocessedExceptions, - inputIndexFields, spaceId, runOpts: execOptions.runOpts, licensing, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.test.ts index 50a315a58ef4d..8c790596b99ba 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.test.ts @@ -22,6 +22,8 @@ import { ruleExecutionLogMock } from '../../rule_monitoring/mocks'; import type { RunOpts } from '../types'; import type { ExperimentalFeatures } from '../../../../../common'; +jest.mock('../utils/get_filter', () => ({ getFilter: jest.fn() })); + describe('threshold_executor', () => { let alertServices: RuleExecutorServicesMock; let ruleExecutionLogger: ReturnType; @@ -107,7 +109,6 @@ describe('threshold_executor', () => { aggregatableTimestampField: TIMESTAMP, exceptionFilter: undefined, unprocessedExceptions: [], - inputIndexFields: [], spaceId: 'default', runOpts: {} as RunOpts, licensing, @@ -173,7 +174,6 @@ describe('threshold_executor', () => { aggregatableTimestampField: TIMESTAMP, exceptionFilter: undefined, unprocessedExceptions: [getExceptionListItemSchemaMock()], - inputIndexFields: [], spaceId: 'default', runOpts: {} as RunOpts, licensing, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.ts index ee0e80f03df15..06a0ff89ccc40 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.ts @@ -18,7 +18,7 @@ import type { RuleExecutorServices, } from '@kbn/alerting-plugin/server'; import type { IRuleDataClient } from '@kbn/rule-registry-plugin/server'; -import type { Filter, DataViewFieldBase } from '@kbn/es-query'; +import type { Filter } from '@kbn/es-query'; import type { CompleteRule, ThresholdRuleParams } from '../../rule_schema'; import { getFilter } from '../utils/get_filter'; import { bulkCreateThresholdSignals } from './bulk_create_threshold_signals'; @@ -64,7 +64,6 @@ export const thresholdExecutor = async ({ aggregatableTimestampField, exceptionFilter, unprocessedExceptions, - inputIndexFields, spaceId, runOpts, licensing, @@ -87,7 +86,6 @@ export const thresholdExecutor = async ({ aggregatableTimestampField: string; exceptionFilter: Filter | undefined; unprocessedExceptions: ExceptionListItemSchema[]; - inputIndexFields: DataViewFieldBase[]; spaceId: string; runOpts: RunOpts; licensing: LicensingPluginSetup; @@ -135,7 +133,7 @@ export const thresholdExecutor = async ({ services, index: inputIndex, exceptionFilter, - fields: inputIndexFields, + loadFields: true, }); // Look for new events over threshold diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/types.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/types.ts index 78c0a729be10e..6e2999ae5e3b2 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/types.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/types.ts @@ -32,7 +32,7 @@ import type { } from '@kbn/rule-registry-plugin/server'; import type { EcsFieldMap } from '@kbn/rule-registry-plugin/common/assets/field_maps/ecs_field_map'; import type { TypeOfFieldMap } from '@kbn/rule-registry-plugin/common/field_map'; -import type { Filter, DataViewFieldBase } from '@kbn/es-query'; +import type { Filter } from '@kbn/es-query'; import type { LicensingPluginSetup } from '@kbn/licensing-plugin/server'; import type { RulePreviewLoggedRequest } from '../../../../common/api/detection_engine/rule_preview/rule_preview.gen'; @@ -104,7 +104,6 @@ export interface RunOpts { alertWithSuppression: SuppressedAlertService; refreshOnIndexingAlerts: RefreshTypes; publicBaseUrl: string | undefined; - inputIndexFields: DataViewFieldBase[]; experimentalFeatures?: ExperimentalFeatures; } diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_fields_for_wildcard.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_fields_for_wildcard.test.ts deleted file mode 100644 index 709adb63ad9a0..0000000000000 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_fields_for_wildcard.test.ts +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { DataViewsContract } from '@kbn/data-views-plugin/common'; - -import { getFieldsForWildcard } from './get_fields_for_wildcard'; -import { ruleExecutionLogMock } from '../../rule_monitoring/mocks'; - -const mockFields = [ - { - name: 'agent.id', - type: 'string', - esTypes: ['keyword'], - }, - { - name: 'agent.name', - type: 'string', - esTypes: ['keyword'], - }, -]; - -const dataViewsMock = { - getFieldsForWildcard: jest.fn().mockResolvedValue(mockFields), -} as unknown as DataViewsContract; - -const ruleExecutionLogger = ruleExecutionLogMock.forExecutors.create(); - -describe('getFieldsForWildcard', () => { - it('should return empty array and not call dataViews API for eql language', async () => { - const fields = await getFieldsForWildcard({ - index: ['auditbeat-*'], - language: 'eql', - dataViews: dataViewsMock, - ruleExecutionLogger, - }); - - expect(fields).toEqual([]); - expect(dataViewsMock.getFieldsForWildcard).not.toHaveBeenCalled(); - }); - it('should return empty array and not call dataViews API for lucene language', async () => { - const fields = await getFieldsForWildcard({ - index: ['auditbeat-*'], - language: 'lucene', - dataViews: dataViewsMock, - ruleExecutionLogger, - }); - - expect(fields).toEqual([]); - expect(dataViewsMock.getFieldsForWildcard).not.toHaveBeenCalled(); - }); - it('should return empty array and not call dataViews API for non existing index', async () => { - const fields = await getFieldsForWildcard({ - index: undefined, - language: 'kuery', - dataViews: dataViewsMock, - ruleExecutionLogger, - }); - - expect(fields).toEqual([]); - expect(dataViewsMock.getFieldsForWildcard).not.toHaveBeenCalled(); - }); - it('should return fields and call dataViews API for kuery language', async () => { - const fields = await getFieldsForWildcard({ - index: ['auditbeat-*', 'filebeat-*'], - language: 'kuery', - dataViews: dataViewsMock, - ruleExecutionLogger, - }); - - expect(fields).toEqual(mockFields); - expect(dataViewsMock.getFieldsForWildcard).toHaveBeenCalledWith({ - pattern: 'auditbeat-*,filebeat-*', - allowNoIndex: true, - }); - }); - it('should return empty array on dataViews API error', async () => { - (dataViewsMock.getFieldsForWildcard as jest.Mock).mockRejectedValue(Error('some test error')); - const fields = await getFieldsForWildcard({ - index: ['auditbeat-*', 'filebeat-*'], - language: 'kuery', - dataViews: dataViewsMock, - ruleExecutionLogger, - }); - - expect(fields).toEqual([]); - expect(ruleExecutionLogger.error).toHaveBeenCalledWith( - expect.stringMatching('some test error') - ); - }); -}); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_fields_for_wildcard.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_fields_for_wildcard.ts deleted file mode 100644 index e1111c37604b5..0000000000000 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_fields_for_wildcard.ts +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { DataViewsContract, FieldSpec } from '@kbn/data-views-plugin/common'; -import type { LanguageOrUndefined } from '@kbn/securitysolution-io-ts-alerting-types'; - -import type { IRuleExecutionLogForExecutors } from '../../rule_monitoring'; - -export const getFieldsForWildcard = async ({ - index, - dataViews, - language, - ruleExecutionLogger, -}: { - index: string[] | undefined; - language: LanguageOrUndefined; - dataViews: DataViewsContract; - ruleExecutionLogger: IRuleExecutionLogForExecutors; -}): Promise => { - if (!index || language !== 'kuery') { - return []; - } - - try { - const fields = await dataViews.getFieldsForWildcard({ - pattern: index.join(), - allowNoIndex: true, - }); - - return fields; - } catch (e) { - ruleExecutionLogger.error(`Failed to fetch index fields: ${e?.message}`); - return []; - } -}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_fields.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_fields.ts new file mode 100644 index 0000000000000..3cef5dc280c85 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_fields.ts @@ -0,0 +1,28 @@ +/* + * Copyright 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 { DataViewsContract } from '@kbn/data-views-plugin/common'; +import { queryToFields } from '@kbn/data-plugin/common'; +import type { LanguageOrUndefined } from '@kbn/securitysolution-io-ts-alerting-types'; + +interface GetQueryFieldsArgs { + dataViews: DataViewsContract; + index: string[]; + query: string; + language: LanguageOrUndefined; +} + +export const getQueryFields = async ({ dataViews, index, query, language }: GetQueryFieldsArgs) => { + const dataViewLazy = await dataViews.createDataViewLazy({ + title: index.join(), + }); + return Object.values( + await queryToFields({ + dataView: dataViewLazy, + request: { query: [{ query, language: language || 'kuery' }] }, + }) + ); +}; From 31447b19e5ef7eb0c1d2a6315507ec6cfff40735 Mon Sep 17 00:00:00 2001 From: Konrad Szwarc Date: Mon, 30 Sep 2024 15:25:29 +0200 Subject: [PATCH 23/60] [EDR Workflows] Unskip metering cypress (#194404) Closes https://github.com/elastic/kibana/issues/187083 Moved the `login()` to `beforeEach` because placing it in `before` caused the session to remain unauthorized during test execution. --- .../management/cypress/e2e/serverless/metering.cy.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/metering.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/metering.cy.ts index e4ee27faed26e..d354531affd35 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/metering.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/metering.cy.ts @@ -8,6 +8,7 @@ import { recurse } from 'cypress-recurse'; import type { UsageRecord } from '@kbn/security-solution-serverless/server/types'; import { METERING_SERVICE_BATCH_SIZE } from '@kbn/security-solution-serverless/server/constants'; +import { login, ROLE } from '../../tasks/login'; import { getInterceptedRequestsFromTransparentApiProxy, startTransparentApiProxy, @@ -15,10 +16,8 @@ import { } from '../../tasks/transparent_api_proxy'; import type { ReturnTypeFromChainable } from '../../types'; import { indexEndpointHeartbeats } from '../../tasks/index_endpoint_heartbeats'; -import { login, ROLE } from '../../tasks/login'; -// Failing: See https://github.com/elastic/kibana/issues/187083 -describe.skip( +describe( 'Metering', { tags: ['@serverless', '@skipInServerlessMKI'], @@ -39,7 +38,6 @@ describe.skip( let endpointData: ReturnTypeFromChainable | undefined; before(() => { - login(ROLE.system_indices_superuser); startTransparentApiProxy({ port: 3623 }); indexEndpointHeartbeats({ count: HEARTBEAT_COUNT, @@ -49,6 +47,10 @@ describe.skip( }); }); + beforeEach(() => { + login(ROLE.system_indices_superuser); + }); + after(() => { if (endpointData) { endpointData.cleanup(); From b79855d0e96c444b06537a98c371c3c808c4ceac Mon Sep 17 00:00:00 2001 From: Tre Date: Mon, 30 Sep 2024 14:38:06 +0100 Subject: [PATCH 24/60] [FTR][Ownership] Assign Ownership to canvas/logstash_lens ES Archives (#194412) ## Summary Modify code owner declarations for `x-pack/test/functional/es_archives/canvas/logstash_lens` in .github/CODEOWNERS ### For reviewers To verify this pr, you can use the `scripts/get_owners_for_file.js` script E.g: ``` node scripts/get_owners_for_file.js --file x-pack/test/functional/es_archives/canvas/logstash_lens # Or any other file ``` #### Notes All of these are a best guess effort. The more help from the dev teams, the more accurate this will be for reporting in the future. Contributes to: https://github.com/elastic/kibana/issues/192979 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7f8f48e638148..0988c59ab7d23 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1239,6 +1239,7 @@ x-pack/test/observability_ai_assistant_functional @elastic/obs-ai-assistant /x-pack/test/functional/apps/canvas/ @elastic/kibana-presentation /x-pack/test_serverless/functional/test_suites/search/dashboards/ @elastic/kibana-presentation /test/plugin_functional/test_suites/panel_actions @elastic/kibana-presentation +/x-pack/test/functional/es_archives/canvas/logstash_lens @elastic/kibana-presentation #CC# /src/plugins/kibana_react/public/code_editor/ @elastic/kibana-presentation # Machine Learning From 396931f5056600e633dba64dab81a66096d05f72 Mon Sep 17 00:00:00 2001 From: Christos Nasikas Date: Mon, 30 Sep 2024 17:11:00 +0300 Subject: [PATCH 25/60] [ResponseOps][Alerts] Fix authorization issues with `discover` as consumers (#192321) ## Summary Alerts use its own RBAC model. The RBAC relies on a property called `consumer`. The consumer is tight coupled with the feature ID. It denotes the user's access to the rule and the alerts. For example, a user with access to the "Logs" feature has access only to alerts and rules with the `consumer` set as `logs`. Users can create an ES Query rule from Discover. When the feature was [implemented](https://github.com/elastic/kibana/pull/124534) (v8.3.0) the consumer was set to `discover`. Then it [changed](https://github.com/elastic/kibana/pull/166032) (v8.11.0) to `stackAlerts` (visible only on the stack management page) and then [to](https://github.com/elastic/kibana/pull/171364) (v8.12.0) `alerts` so it can be visible in Observability. Users who created rules that generated alerts with the `discover` consumer cannot see the alerts generated by the rule when they upgrade Kibana to 8.11+ even as superusers. This PR fixes the issues around the `discover` consumer. I added the following alert document to the `data.json.gz` to test for alerts with `discover` consumer. ``` { "type": "doc", "value": { "id": "1b75bfe9-d2f5-47e9-bac6-b082dd9c9e97", "index": ".internal.alerts-stack.alerts-default-000001", "source": { "@timestamp": "2021-10-19T14:00:38.749Z", "event.action": "active", "event.kind": "signal", "kibana.alert.duration.us": 1370302000, "kibana.alert.evaluation.threshold": -1, "kibana.alert.evaluation.value": 80, "kibana.alert.instance.id": "query matched", "kibana.alert.reason": "Document count is 80 in the last 100d in .kibana_alerting_cases index. Alert when greater than -1.", "kibana.alert.rule.category": "Elasticsearch query", "kibana.alert.rule.consumer": "discover", "kibana.alert.rule.name": "EsQuery discover", "kibana.alert.rule.producer": "stackAlerts", "kibana.alert.rule.rule_type_id": ".es-query", "kibana.alert.rule.uuid": "25c14920-faa7-4a9a-830c-ce32c8211237", "kibana.alert.start": "2021-10-19T15:00:41.555Z", "kibana.alert.status": "active", "kibana.alert.time_range": { "gte": "2021-10-19T15:00:41.555Z" }, "kibana.alert.uuid": "23237979-75bf-4b68-a210-ce5056b93356", "kibana.alert.workflow_status": "open", "kibana.space_ids": [ "default" ], "kibana.version": "8.0.0", "tags": [] } } } ``` ## Testing 1. Create a rule with the consumer as `discover`. See https://github.com/elastic/kibana/issues/184595 for instructions. 2. Go to the rule details page. 3. Verify that you do not get any error toaster and you can see the alerts. Fixes: https://github.com/elastic/kibana/issues/184595 ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios ### 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) ## Release notes Fix an issue with rules not being accessible created from Discover before 8.11.0. --------- Co-authored-by: Elastic Machine --- .../alerting_authorization.test.ts | 90 +++++++++--------- .../authorization/alerting_authorization.ts | 28 +++++- .../alerts_table/cells/render_cell_value.tsx | 2 +- .../observability/alerts/data.json.gz | Bin 4223 -> 4610 bytes .../common/lib/authentication/roles.ts | 18 ++++ .../common/lib/authentication/users.ts | 8 ++ .../tests/basic/search_strategy.ts | 81 ++++++++++++++++ 7 files changed, 180 insertions(+), 47 deletions(-) diff --git a/x-pack/plugins/alerting/server/authorization/alerting_authorization.test.ts b/x-pack/plugins/alerting/server/authorization/alerting_authorization.test.ts index 569fff83eaefe..f1cfb99a6daaa 100644 --- a/x-pack/plugins/alerting/server/authorization/alerting_authorization.test.ts +++ b/x-pack/plugins/alerting/server/authorization/alerting_authorization.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { fromKueryExpression } from '@kbn/es-query'; +import { KueryNode, fromKueryExpression, toKqlExpression } from '@kbn/es-query'; import { KibanaRequest } from '@kbn/core/server'; import { ruleTypeRegistryMock } from '../rule_type_registry.mock'; import { securityMock } from '@kbn/security-plugin/server/mocks'; @@ -910,20 +910,19 @@ describe('AlertingAuthorization', () => { getSpaceId, }); ruleTypeRegistry.list.mockReturnValue(setOfAlertTypes); - expect( - ( - await alertAuthorization.getFindAuthorizationFilter(AlertingAuthorizationEntity.Rule, { - type: AlertingAuthorizationFilterType.KQL, - fieldNames: { - ruleTypeId: 'path.to.rule_type_id', - consumer: 'consumer-field', - }, - }) - ).filter - ).toEqual( - fromKueryExpression( - `((path.to.rule_type_id:myAppAlertType and consumer-field:(alerts or myApp or myOtherApp or myAppWithSubFeature)) or (path.to.rule_type_id:mySecondAppAlertType and consumer-field:(alerts or myApp or myOtherApp or myAppWithSubFeature)) or (path.to.rule_type_id:myOtherAppAlertType and consumer-field:(alerts or myApp or myOtherApp or myAppWithSubFeature)))` - ) + + const filter = ( + await alertAuthorization.getFindAuthorizationFilter(AlertingAuthorizationEntity.Rule, { + type: AlertingAuthorizationFilterType.KQL, + fieldNames: { + ruleTypeId: 'path.to.rule_type_id', + consumer: 'consumer-field', + }, + }) + ).filter; + + expect(toKqlExpression(filter as KueryNode)).toMatchInlineSnapshot( + `"((path.to.rule_type_id: myAppAlertType AND (consumer-field: alerts OR consumer-field: discover OR consumer-field: myApp OR consumer-field: myOtherApp OR consumer-field: myAppWithSubFeature)) OR (path.to.rule_type_id: mySecondAppAlertType AND (consumer-field: alerts OR consumer-field: discover OR consumer-field: myApp OR consumer-field: myOtherApp OR consumer-field: myAppWithSubFeature)) OR (path.to.rule_type_id: myOtherAppAlertType AND (consumer-field: alerts OR consumer-field: discover OR consumer-field: myApp OR consumer-field: myOtherApp OR consumer-field: myAppWithSubFeature)))"` ); }); test('throws if user has no privileges to any rule type', async () => { @@ -1274,6 +1273,10 @@ describe('AlertingAuthorization', () => { "all": true, "read": true, }, + "discover": Object { + "all": true, + "read": true, + }, "myApp": Object { "all": true, "read": true, @@ -1311,6 +1314,10 @@ describe('AlertingAuthorization', () => { "all": true, "read": true, }, + "discover": Object { + "all": true, + "read": true, + }, "myApp": Object { "all": true, "read": true, @@ -2251,20 +2258,18 @@ describe('AlertingAuthorization', () => { }); }); test('creates a filter based on the privileged types', async () => { - expect( - ( - await alertAuthorization.getFindAuthorizationFilter(AlertingAuthorizationEntity.Rule, { - type: AlertingAuthorizationFilterType.KQL, - fieldNames: { - ruleTypeId: 'path.to.rule_type_id', - consumer: 'consumer-field', - }, - }) - ).filter - ).toEqual( - fromKueryExpression( - `path.to.rule_type_id:.esQuery and consumer-field:(alerts or stackAlerts or discover)` - ) + const filter = ( + await alertAuthorization.getFindAuthorizationFilter(AlertingAuthorizationEntity.Rule, { + type: AlertingAuthorizationFilterType.KQL, + fieldNames: { + ruleTypeId: 'path.to.rule_type_id', + consumer: 'consumer-field', + }, + }) + ).filter; + + expect(toKqlExpression(filter as KueryNode)).toMatchInlineSnapshot( + `"(path.to.rule_type_id: .esQuery AND (consumer-field: alerts OR consumer-field: discover OR consumer-field: stackAlerts))"` ); }); }); @@ -2557,21 +2562,20 @@ describe('AlertingAuthorization', () => { expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); }); }); + test('creates a filter based on the privileged types', async () => { - expect( - ( - await alertAuthorization.getFindAuthorizationFilter(AlertingAuthorizationEntity.Rule, { - type: AlertingAuthorizationFilterType.KQL, - fieldNames: { - ruleTypeId: 'path.to.rule_type_id', - consumer: 'consumer-field', - }, - }) - ).filter - ).toEqual( - fromKueryExpression( - `(path.to.rule_type_id:.esQuery and consumer-field:(alerts or stackAlerts or logs or discover)) or (path.to.rule_type_id:.logs-threshold-o11y and consumer-field:(alerts or stackAlerts or logs or discover)) or (path.to.rule_type_id:.threshold-rule-o11y and consumer-field:(alerts or stackAlerts or logs or discover))` - ) + const filter = ( + await alertAuthorization.getFindAuthorizationFilter(AlertingAuthorizationEntity.Rule, { + type: AlertingAuthorizationFilterType.KQL, + fieldNames: { + ruleTypeId: 'path.to.rule_type_id', + consumer: 'consumer-field', + }, + }) + ).filter; + + expect(toKqlExpression(filter as KueryNode)).toMatchInlineSnapshot( + `"((path.to.rule_type_id: .esQuery AND (consumer-field: alerts OR consumer-field: discover OR consumer-field: stackAlerts OR consumer-field: logs)) OR (path.to.rule_type_id: .logs-threshold-o11y AND (consumer-field: alerts OR consumer-field: discover OR consumer-field: stackAlerts OR consumer-field: logs)) OR (path.to.rule_type_id: .threshold-rule-o11y AND (consumer-field: alerts OR consumer-field: discover OR consumer-field: stackAlerts OR consumer-field: logs)))"` ); }); }); diff --git a/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts b/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts index 0fb53c1eab0a1..6b24f2f5de9a4 100644 --- a/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts +++ b/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts @@ -13,6 +13,7 @@ import { KueryNode } from '@kbn/es-query'; import { SecurityPluginSetup } from '@kbn/security-plugin/server'; import { FeaturesPluginStart } from '@kbn/features-plugin/server'; import { Space } from '@kbn/spaces-plugin/server'; +import { STACK_ALERTS_FEATURE_ID } from '@kbn/rule-data-utils'; import { RegistryRuleType } from '../rule_type_registry'; import { ALERTING_FEATURE_ID, RuleTypeRegistry } from '../types'; import { @@ -88,6 +89,8 @@ export interface ConstructorOptions { authorization?: SecurityPluginSetup['authz']; } +const DISCOVER_FEATURE_ID = 'discover'; + export class AlertingAuthorization { private readonly ruleTypeRegistry: RuleTypeRegistry; private readonly request: KibanaRequest; @@ -135,7 +138,7 @@ export class AlertingAuthorization { this.allPossibleConsumers = this.featuresIds.then((featuresIds) => { return featuresIds.size - ? asAuthorizedConsumers([ALERTING_FEATURE_ID, ...featuresIds], { + ? asAuthorizedConsumers([ALERTING_FEATURE_ID, DISCOVER_FEATURE_ID, ...featuresIds], { read: true, all: true, }) @@ -328,7 +331,22 @@ export class AlertingAuthorization { hasAllRequested: boolean; authorizedRuleTypes: Set; }> { - const fIds = featuresIds ?? (await this.featuresIds); + const fIds = new Set(featuresIds ?? (await this.featuresIds)); + + /** + * Temporary hack to fix issues with the discover consumer. + * Issue: https://github.com/elastic/kibana/issues/184595. + * PR https://github.com/elastic/kibana/pull/183756 will + * remove the hack and fix it in a generic way. + * + * The discover consumer should be authorized + * as the stackAlerts consumer. + */ + if (fIds.has(DISCOVER_FEATURE_ID)) { + fIds.delete(DISCOVER_FEATURE_ID); + fIds.add(STACK_ALERTS_FEATURE_ID); + } + if (this.authorization && this.shouldCheckAuthorization()) { const checkPrivileges = this.authorization.checkPrivilegesDynamicallyWithRequest( this.request @@ -347,11 +365,15 @@ export class AlertingAuthorization { >(); const allPossibleConsumers = await this.allPossibleConsumers; const addLegacyConsumerPrivileges = (legacyConsumer: string) => - legacyConsumer === ALERTING_FEATURE_ID || isEmpty(featuresIds); + legacyConsumer === ALERTING_FEATURE_ID || + legacyConsumer === DISCOVER_FEATURE_ID || + isEmpty(featuresIds); + for (const feature of fIds) { const featureDef = this.features .getKibanaFeatures() .find((kFeature) => kFeature.id === feature); + for (const ruleTypeId of featureDef?.alerting ?? []) { const ruleTypeAuth = ruleTypesWithAuthorization.find((rtwa) => rtwa.id === ruleTypeId); if (ruleTypeAuth) { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/render_cell_value.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/render_cell_value.tsx index 2d76d4cd19aba..ad82a9d3ee97c 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/render_cell_value.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/render_cell_value.tsx @@ -138,7 +138,7 @@ export function getAlertFormatters(fieldFormats: FieldFormatsRegistry) { const producer = rowData?.find(({ field }) => field === ALERT_RULE_PRODUCER)?.value?.[0]; const consumer: AlertConsumers = observabilityFeatureIds.includes(producer) ? 'observability' - : producer && (value === 'alerts' || value === 'stackAlerts') + : producer && (value === 'alerts' || value === 'stackAlerts' || value === 'discover') ? producer : value; const consumerData = alertProducersData[consumer]; diff --git a/x-pack/test/functional/es_archives/observability/alerts/data.json.gz b/x-pack/test/functional/es_archives/observability/alerts/data.json.gz index 72d24a0b36668d9c5aeda8be16e998f8cd4730b6..4017aaab1bddf1ca9ba2582b819b813dfdc42e2d 100644 GIT binary patch literal 4610 zcmV+d68-HTiwFpgcHL$G17u-zVJ>QOZ*BnXom+1sxs}J?=Tis`1ejTb72Yp;2r|gd z0s(e_?C#_x>A>LCR@#;vUEJvm`n&I8$!^(Jm0awW%932uJq=r8@vvCr|HnffvVQ$; zG5R+Y9FA>iFk%x>H zv(?;hiUObfVL7>pi>1A}&G}PI2_hH~^9vDUipNY>ikrXQUk~ZyU7Ri}>z9++G+&W_ zx{J@h{{SV<-!3MXP}t44A12OD?YfLrSj}zDrdll^Eg?n`!=bdzsbj9ib^7JiJT9(g z*V%-4G4(_3Gh8XEw2{ULg*6ep`O?W0s$=S7wSG>yPM32#U99i>I~SluVC{H&!q=Fu+Jb^2d+avj6y zk=4a08yrm*qf1BzO<=UVveS{M@NY)n`_+67l|HI(G^b(YH$RNhY(8ozV4LyPb*wz( zd^wwcYA(aN2%Ea!l@XM9bra`x{nhPpSL&&~sr$>1fBt!NZ}yi*X8$*v{eCu$KkUln zc0LO$e{b^kW>?bu&qeN}7cV{GUAe4Q>#GGNE)a_m!!aO2qDMv(=+?pqoUD(|w$&B1 zv-xtn+hIKBq!L2>wf(wf-DkFX-;-pyXTxnwFCTY!NOZZ3JB{9_{M?-D!+jU%*Yhks z&gLJ|_3Y!t=0;|>ak`ayaSPQ44=Jbk+ot^Y()Li!zdyh1F3uPC>ZB`N;Z45KNPJu@ zX7j3+shr}`gWsgfnmPdmh|{|X^qZUev@dn%hsz!s^v>?Lw3qdLZHoV>DAfZ)9?Qx4 zhChFo|Ns2mcfWRL4fk3>BPA#$Mi94HAZ;;6nz2ZOHCzilux6jE;g!LZF}NRLjN(jw zD{E%AF2Wb+_S5nTzVQ*R|8%idy{C=$P*4%~Ppx6qAK}qo z#_ifVHm)@F;^!=B>vi2QvX+al2Z*$cYpDqeOmM^nPsoZ8PzWg{j-@x64glFBKuAl* z<-qudy|Wh&4oQ!^Aov+CazO@K47At_EeZtbT)dAGN<8gr-5BxBUIwFHC+WZsgr|VG zp%iH)B0Q4-17RSzRC0jCULo<#l;|{t1un0h`zxpwH~SYf@L;Pjx0fKZAx^7*+}dkz zuPx|qtMKiSDtMUN8t8Ihx)dncxzOcn`}xt%d3hRD6gZ;DY4#_TK$cQy#fC)^eAFu0 zfku0z5vS0_7%_xv!z59Cq3L=Ct@3KNSdJOc;ot<~Yyi*zpaTP_K)lWjKyAJGXgL$K z=bBNAm^2P?W&*MW3~w4s;pla$vd? zNYIR(x6+2?+ zJj%9iB-@!b1L)CpE#12{qx(+q*m6UM-Mah>p}v|sE;1IPkcb5)5vSNAn~Xp_YV9yh z-b?e!+`&3~HbVEp9i=g$W!z~h-=4WcyHB(o33sR(xO1G`!E{VmKfiVfU(oYAXsM=28sjuHheG`OeSA{UiKSSl;6BT>ZH_IJSLCLCOD+yi$Am6#Oz zJ5A-=H+Q;E!yOBEz@68QXMRikq0w>} z8%RXCk1%3T7#SHDiY5dbw33MxujpLQE*EASGoQr8==+=5Jgz~a#1EqzyYyG^YXsq+hDp7sQ*|ZAe?z_p zB*ik%EO!J$Zi6Lc*tFRSI?O8f=&D9v7f2W#nDQb+g32`{G)@7Lz(M-7;aaB7kkAh^ zPNou^_6LbJyN!@|+UC1KqCjen#yRhv;!)obE zs`sFzPcjE@Vz#;+xld(7?_L$wc>{lBJq%C#S$0rkVJc~QUA=x}w3}uYsK*&;rr;R< zP=lnbx7%xQCmi@-iWx1Pw*>0oZE2W=yA`*+h>h`&JZc>iwv{$1WK_x{~)-@o(o3Dn)h!l!?O zMC(ReC-Jwdb&Ap1><{s`Lf|4sg#^C$Pe{$)B@))(EZb6PEy zvzwnEOn|xNLwVL;)u|?-{-nMQwEi4D6brsilX$&OQU7W$;qhPA&3Jv;-R1jtpFigU zt^3-a)`{;QEqvD%Ka**i+r@Ie^2^nHXOzQp5Is?X>dW)0I&pO)%pxYn_ck6EV`9dX zRZ_PuuO2EyeB17*C1m1}pmf7mfsmgOzQ9lO$(sOhp#bfK2{KkwBz!VfQEI6f@bxI-V!1xlZ;syBHRiXi31HJ})y&k>_g#3)~WjRYYD2IfO8gc6)vRY$AH8|j&QN?ue zMEon^>uHsLHN0M%TAqd0UcE1;OH{OgTDwX#P-~#psZi_1-g+QvHQ3!7wF>n6jHpF1 zk3I&Aq!$rf&6JS!o*>Ty2Y1tHgWVBO3x+GgR2uiM2`t9vK&k#k3Xgo`Y(=WbNtKH}LS!?SdS4|!$^p)$#`x4b6DYZgH>->I? zIAFSxyl*LOu-hi3kJ@%ODJ>9{bCOaDcqLKg*ELwg39#15ppj69F=d$#p*WiRFjBhZ zaUO2VrZ9X*Xkv?!?)Hd}(-V-gX!&LE1O`vw96SM{;BTdv>Kk9%c6Z?GK~Os4tGke& z5xxWl$A?mnV0=Rn_Y|N_l|)ig8-%6Y==kdR;$uN`Y`ws{VoCRfFUc_0CG=`8-YEnR z&`J)$0|UL@6uqFgk};;xTU(E%I@Ea!+jg7j^+Zs*(W^km&xl^haId1GC@_r?kJ2FR z7$}u&&X*~g#%eC#2?P&tQG~A{cwoTSfUkb=wGotV z_$mp5 z*x-E)_WacS}7HU_-ZKM33y)u7X`r$-q(Pyv%r_APeR50hHf|7ZN=9{P`cr( zK*-MsUx_7cq|MEOc*LFN$eLhK@Rp|(qUGlGClAFK^ZNZ(vX7-Nq75cH4pC`5Y`dX+ zClI*-_)B%iM(M8DowqupkFJrR_SlZV}f{EYDBsq_{@V+fYihvz!v zf-uN34b@3x)T#JA5hsqX9Jx{Cd>w{feJp*kiVV)zK(Dt(FIK<)NcJ5z-(Yud^eWKt zGoqIx-lUWi5+*WmG*v)aVTF_o3Y#RkFyt8MrRrBgl3i!|?sM*t6$KtPm+usuFIu$p zH8@`bzRm()V$69ZRNrCq4R%}cwGotV_$m`vJyaT@aea-G3;^(bNEF^=B7YT7i7}CTuU^#Y4 zC7~lOek<4^yfB(KPDtE~7pAq*rqBy(DBmeeBI2U6V~0t^0b{3+F<^uq3syn(})E^eujRSa2!kTJ)$@o#Dj3iTCR`?;EbdoBD9oaz*s}WJLo>< z!dS!?JH~PPVNwr~^aIA;9>!Sxx_8_fdUYs_ZQE_d*hWygVXQ#N&k$q8dK0Y`NKqva zmo6fWtwxkdDlAWqiPv8hYuN z@(vg~m7oqGMa-Lb5%E4C9z{f!=Uv>II1{-i;Rs?9o0nk^dK^b7zFt};K2Cf|I;@5b z_n`MHgfFeBfmUHq;1cfDd5bL830a4=3!XaVj^a2D zJf@}+ypOYdB`rJ)vAKAs5K&+D9^fIOexTP`(CY+35;uaKC2=38$}%D_D-7yxD&HwM0(dwSeQ*Tcm?O~P7_vhJb#L2k#n(nqI!SDT5JBOh8r@Ot3L7BpA*Dk_bbL;e*o;MyL@?!FbD%UMJKU3I$uHyXD=*BMn zRcnvgsO^8wJSZ5brk|~*wa{ujnoL2Q;^-P=W<)R!`Gabm!9|_HWO{kw?IPw033!~< z=*Rr&=;KwKJ{4+2s;4%`u?=|pSps&T=Q6V>(=?> ziz5GAbE~*OFW$?Sftc`w8;Vh~Rv~VUg)tcR$VW!KrUd)~Rj9JKUiuUr_HRG$3Ev>G s8>1ZupbT!zD1)+$Anv3_mO^$u3JgO~!(bqK8UxV(2U;<`jvWF40CwK;1poj5 literal 4223 zcmV-_5P*~RIZLEENCiX#6%9rEz-*B>U6tJUY*cr~3| zh0E{LpiUD5HF_Qwm!p! zqDmWSj8Iq;!P_sLEuc9TJ{FtjRJZA>vWw;Bp5Mo+Dy#QU^Y}i_?Q%8q$d@QpB|Mo$ zc>iIwxPI~JDbNac~I(dQWrRxEhpEI z47$K%^}#MCqQJkI{OH$J1&uywZnRFr$Zvj{q_Uc{RPa#Y>v=3ZQrv zt^fDF9;EMIdcx1;vR-el7L>R^EJh5+fCz~m8BJhV3mcDV^)b!MPw#g( zQr^bJUh3s7G#@;qI>q02^}m<4Z9V_-^s>8HE$`Jy7r4N?e4&&0xLlT1(a2Pt;=zO8 zrK>e{1_}@tcQY6_H}`2@8qV9xwjKJ};kUBa&3)~v|DYY!vd2TDy<-~O9 zp=6gdxAiUKe6(|3o<z_j9SE`afmY$kaZCwPbgR*q`*$f3wW3@wP%1t};|!_bAuOqWcT6Vs)KWL+3to*U7lB@9h2avTj3gjmF} zBglGTP?DYp7Ko4ZwLQg%o?-!nA3 zQs9>{Qbk{aYQ}I3lC+cyN$0IecO$ABbb6@Rh@tZ!+oqH3XW9;+2iF}K-Ul7in0;LrS)_(P-R@NOUx4M5F= z@08O56E=k5!!)5>^+C{q8g@aD>W(1YZ3pLXUqp%K6L>%qXrF2pmy;iF$|`O^qQp;= z8@uu!;9~^gUxZn+s8e($#(zV;CnUwHo>}e)hPn^-A;YfE7BFDe^@uJS^mT!R(Sa#1 zYDiGIfrQ2>AQCu8pEg{})EN?bJL6;u!Rc_2I8<&cBp&zqj+0{DrDin7$@dGa*IXNc z1Ck#2$f2Vk104d|ktU@=2#T0j71+(1c|E^r#2{!=lY8ISQvj?eJaPPhssIG*=Ab89c5aAt0|)eS7tapd{k&RJ?x*_2PYl8 zIZNUl;ywiAnDdAy$FU(n8iPlmhr{_@QmhQs>V$rm=2&V7IUN$i^U}i6z8i98O{`t| zj;Dp9eof<&4yuK_LOX8U>aGeGq=m^C;jl_@*MuT&f`vC?&5<_>GtQN>+P|(A@~IG0 zCJG_(5LzfP*P5Qvpk{_0Nem&UJoz~0$w%nEY+8$v1eD|9F%@iVvcIjP~`BZmZvO(sunZqIx|N zS`J!f+d{WxIY&%j$9af|-SOKO74T1g`Rio8wAcHaWbA{Ntulc@-sZ)O3w^(5=6h@O zR6hT_sGGn3aCGVXdDFipvuzO_UM6j2Z<>Mm>$|H(8R9Q6I^JDP-(A()<=$QW?%kEI zX3%ys3*Y`75^Xwhlf>VyHz~@SIv*&p`T9SaFTXZ&eI3XDsK0`K{J*n**ZGtCkAGdv zR?S5>o1E6mReAICwg@P0wXM(QrzX`bG~YD0fi~ZxZMER%G>h|1isqxehR1*1bmPrs zch~Q(zI>@Gv>9uE-Xy+%wD4P3{LB`qvddMq_N#Rj`+(??5)@ybSJ8>9J7E?vF@Ci7 zaWN%kN?9Q_8`?#DzuZGE6AuKXV+gqJLViK`0z1toZvw!D0<;q*$XHF0@X1(3sih|4 z>viyTr|#T|@g-Qnd*JK28fAQCd}VyS9=>`A`32$2a+YvV4hbDK;?_lEwZ@2QFu*;d zifMc%_mkd}%T>H7 zKs%vUu_|u;>Lo-GB3fhVaQfA@`fXSIY_#>1t0r3ted9Xvu|&0(lv<&pb^f>^4wx<^ z=fj6Mcv|kk5C^-y-O-!7yQo}}lv2PeiK;%X!6Ht8wN3_&gffgN%X|oC98$Vxah`6= zrZ8OgR?_D!;&EC6QubPY$(BI21TJF!O2NN{Vrpo7?U(xuzP5tW5ntVf{E{5&F&I9S zdIaw`6md@h+Ehs-HMK!l%8ib%jxRnHwDzqR*bIO#$uQP^=+$1mb8sG@h0M+anO<*- zUNBn86jKye;z+y>EI$1lqDmwOczMS*FIc$5Zd$3Ur^BU~tL9H(QT z7pntpa6<+%z6|b(ua^3qf%5)OPV_*RI)?`z=g0n zBws+9N%)^ofkJaAP0|?fC2Ol&u%YG-`}w}L*Y6yxFJ7>0ePw*THGJ_YA;ShTI#ljK zeC-6KL+h)3LMj;sj= z1#fvuAzE(e2s}41Z_c-pLo9s}Z7@+igKf9e?+iRQ0ADJ5Ze)DDG0zQ5>iAkh(4o(` z*e~~BtnrGjs=#hT-fgEx zRC6RG5d+N~GTjqjE%iGG-hVQeYZLE=&D`fAyyaZ-HsoI8ARAIWHg?uqQVk@5A`c72K3 zg93*5(7V3&%RRX3YbPij@zq_(FDdArc2QAH5VlGp&U{2B8jFIE5;_Vq(v2bhL)&Ea zDe;B-o^SrrWco-a4|(?7$oP7Do*Sl)4fM>Z(5Ld;*e~~>^|cd}jzRaj3;F1d**${) zyful1WRUS9A+88Rns^2*$1bTPbi{lNRv4`}PDnh66{fY(rl%FwQor-?;NW=@F=Onl zO(N>4V1*=l=t;!=at~TzJ3;B_Ki^%*J7BEQ(z5`VX9QE51oE;z067_qoKYCbAdQST zDMCb^MtqfN#9=(>^Zw-wusn@;{?mv(g!}^SFyT0s-g`uGG>8Y`khNSP5x^KpK}6^& zW58HT$2;jh=AOQYFAj{6#z55BlRjhY?O}{H$Gu}QG{*MJJ&3WLpmdBP)m_Lh5M#u8 z6Rj0UQ6&(UE+UPsMwCe^EKiOJH-`PpEjtiTg)u5<&sDJwJ0wRsohUQLGRAT=sS!q# z+6hWGjP(%mOA6&HMXWdPBI12OJc@`cuXk~4;!Nb8gc0~8wlBk;G#p1?e7&?xJW?x+ z=GCx_ueXP9>mv9P&!&+-G%&u@TE01&?^iIT*AFNZ;{11A?vVq!BeN) zD8g~zDK&-QL&Wlx)bu?ExUG8U;8EZ29N_FxpXrrd5{Gd~+zCoIdiBup3!;}4j_?#P z63K(f$uvdUVT+^<%sa{hjd~39qIF;t`VoGDt^BAzU`iyfa7e;s#G`#6?M=UauS`@8HQkfW}8^ej} z*i3~iBpxEFEF%K5o=)9u^*fKPwK*tyHU!?BQ};_@$WGVppNc(cE`X3-4*46bQD`A4J8S2QEvmnNrKrUB}$wL z?VK~hkHQtJ-lz*tQx0>qgvLErU|Om-9vLNHce`XE9h;EyX1{}!!!HIrE%)GJz^-q1 V6Ve`%GWrNF{|_Dp+$ZP!004?fEG7T| diff --git a/x-pack/test/rule_registry/common/lib/authentication/roles.ts b/x-pack/test/rule_registry/common/lib/authentication/roles.ts index 89878a10cc6d0..df887ea463e29 100644 --- a/x-pack/test/rule_registry/common/lib/authentication/roles.ts +++ b/x-pack/test/rule_registry/common/lib/authentication/roles.ts @@ -265,6 +265,23 @@ export const logsOnlyAllSpacesAll: Role = { }, }; +export const stackAlertsOnlyAllSpacesAll: Role = { + name: 'stack_alerts_only_all_spaces_all', + privileges: { + elasticsearch: { + indices: [], + }, + kibana: [ + { + feature: { + stackAlerts: ['all'], + }, + spaces: ['*'], + }, + ], + }, +}; + /** * This role exists to test that the alert search strategy allows * users who do not have access to security solutions the ability @@ -494,6 +511,7 @@ export const allRoles = [ securitySolutionOnlyReadSpacesAll, observabilityOnlyAllSpacesAll, logsOnlyAllSpacesAll, + stackAlertsOnlyAllSpacesAll, observabilityOnlyReadSpacesAll, observabilityOnlyAllSpacesAllWithReadESIndices, observabilityMinReadAlertsRead, diff --git a/x-pack/test/rule_registry/common/lib/authentication/users.ts b/x-pack/test/rule_registry/common/lib/authentication/users.ts index 2a63c296d842a..3d418ab9e779d 100644 --- a/x-pack/test/rule_registry/common/lib/authentication/users.ts +++ b/x-pack/test/rule_registry/common/lib/authentication/users.ts @@ -30,6 +30,7 @@ import { observabilityMinReadAlertsAllSpacesAll, observabilityOnlyAllSpacesAllWithReadESIndices, securitySolutionOnlyAllSpacesAllWithReadESIndices, + stackAlertsOnlyAllSpacesAll, } from './roles'; import { User } from './types'; @@ -176,6 +177,12 @@ export const logsOnlySpacesAll: User = { roles: [logsOnlyAllSpacesAll.name], }; +export const stackAlertsOnlySpacesAll: User = { + username: 'stack_alerts_only_all_spaces_all', + password: 'stack_alerts_only_all_spaces_all', + roles: [stackAlertsOnlyAllSpacesAll.name], +}; + export const obsOnlySpacesAllEsRead: User = { username: 'obs_only_all_spaces_all_es_read', password: 'obs_only_all_spaces_all_es_read', @@ -290,6 +297,7 @@ export const allUsers = [ secOnlyReadSpacesAll, obsOnlySpacesAll, logsOnlySpacesAll, + stackAlertsOnlySpacesAll, obsSecSpacesAll, obsSecReadSpacesAll, obsMinReadAlertsRead, diff --git a/x-pack/test/rule_registry/security_and_spaces/tests/basic/search_strategy.ts b/x-pack/test/rule_registry/security_and_spaces/tests/basic/search_strategy.ts index cbdd9d2301294..2fe2567f5e523 100644 --- a/x-pack/test/rule_registry/security_and_spaces/tests/basic/search_strategy.ts +++ b/x-pack/test/rule_registry/security_and_spaces/tests/basic/search_strategy.ts @@ -13,6 +13,8 @@ import { obsOnlySpacesAll, logsOnlySpacesAll, secOnlySpacesAllEsReadAll, + stackAlertsOnlySpacesAll, + superUser, } from '../../../common/lib/authentication/users'; type RuleRegistrySearchResponseWithErrors = RuleRegistrySearchResponse & { @@ -346,6 +348,85 @@ export default ({ getService }: FtrProviderContext) => { }); }); + describe('discover', () => { + before(async () => { + await esArchiver.load('x-pack/test/functional/es_archives/observability/alerts'); + }); + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/observability/alerts'); + }); + + it('should return alerts from .es-query rule type with consumer discover with access only to stack rules', async () => { + const result = await secureBsearch.send({ + supertestWithoutAuth, + auth: { + username: stackAlertsOnlySpacesAll.username, + password: stackAlertsOnlySpacesAll.password, + }, + referer: 'test', + kibanaVersion, + internalOrigin: 'Kibana', + options: { + featureIds: ['discover'], + }, + strategy: 'privateRuleRegistryAlertsSearchStrategy', + }); + + expect(result.rawResponse.hits.total).to.eql(1); + + const consumers = result.rawResponse.hits.hits.map((hit) => { + return hit.fields?.['kibana.alert.rule.consumer']; + }); + + expect(consumers.every((consumer) => consumer === 'discover')); + }); + + it('should return alerts from .es-query rule type with consumer discover as superuser', async () => { + const result = await secureBsearch.send({ + supertestWithoutAuth, + auth: { + username: superUser.username, + password: superUser.password, + }, + referer: 'test', + kibanaVersion, + internalOrigin: 'Kibana', + options: { + featureIds: ['discover'], + }, + strategy: 'privateRuleRegistryAlertsSearchStrategy', + }); + + expect(result.rawResponse.hits.total).to.eql(1); + + const consumers = result.rawResponse.hits.hits.map((hit) => { + return hit.fields?.['kibana.alert.rule.consumer']; + }); + + expect(consumers.every((consumer) => consumer === 'discover')); + }); + + it('should not return alerts from .es-query rule type with consumer discover without access to stack rules', async () => { + const result = await secureBsearch.send({ + supertestWithoutAuth, + auth: { + username: logsOnlySpacesAll.username, + password: logsOnlySpacesAll.password, + }, + referer: 'test', + kibanaVersion, + internalOrigin: 'Kibana', + options: { + featureIds: ['discover'], + }, + strategy: 'privateRuleRegistryAlertsSearchStrategy', + }); + + expect(result.statusCode).to.be(500); + expect(result.message).to.be('Unauthorized to find alerts for any rule types'); + }); + }); + describe('empty response', () => { it('should return an empty response', async () => { const result = await secureBsearch.send({ From 0dada14ac580088b24a084d1d1b61b08a7055ebb Mon Sep 17 00:00:00 2001 From: Jon Date: Mon, 30 Sep 2024 09:20:16 -0500 Subject: [PATCH 26/60] [cloud deploy] Fix deployment config (#194076) Followup to https://github.com/elastic/kibana/pull/193101 Fixes https://buildkite.com/elastic/kibana-pull-request/builds/237163#01922ad1-38ef-48e6-a0bd-d3f051c4bb0f/537-542 --- .buildkite/scripts/steps/artifacts/cloud.sh | 1 - .buildkite/scripts/steps/cloud/build_and_deploy.sh | 1 - 2 files changed, 2 deletions(-) diff --git a/.buildkite/scripts/steps/artifacts/cloud.sh b/.buildkite/scripts/steps/artifacts/cloud.sh index bc28ceabd1c04..a7a556598ce42 100644 --- a/.buildkite/scripts/steps/artifacts/cloud.sh +++ b/.buildkite/scripts/steps/artifacts/cloud.sh @@ -42,7 +42,6 @@ jq ' .resources.kibana[0].plan.kibana.docker_image = "'$KIBANA_TEST_IMAGE'" | .resources.kibana[0].plan.kibana.version = "'$FULL_VERSION'" | .resources.elasticsearch[0].plan.elasticsearch.version = "'$FULL_VERSION'" | - .resources.enterprise_search[0].plan.enterprise_search.version = "'$FULL_VERSION'" | .resources.integrations_server[0].plan.integrations_server.version = "'$FULL_VERSION'" ' .buildkite/scripts/steps/cloud/deploy.json > "$DEPLOYMENT_SPEC" diff --git a/.buildkite/scripts/steps/cloud/build_and_deploy.sh b/.buildkite/scripts/steps/cloud/build_and_deploy.sh index 6615d0ec4cdd4..25e7d8fc631c9 100755 --- a/.buildkite/scripts/steps/cloud/build_and_deploy.sh +++ b/.buildkite/scripts/steps/cloud/build_and_deploy.sh @@ -68,7 +68,6 @@ if [ -z "${CLOUD_DEPLOYMENT_ID}" ] || [ "${CLOUD_DEPLOYMENT_ID}" = 'null' ]; the .name = "'$CLOUD_DEPLOYMENT_NAME'" | .resources.kibana[0].plan.kibana.version = "'$VERSION'" | .resources.elasticsearch[0].plan.elasticsearch.version = "'$VERSION'" | - .resources.enterprise_search[0].plan.enterprise_search.version = "'$VERSION'" | .resources.integrations_server[0].plan.integrations_server.version = "'$VERSION'" ' .buildkite/scripts/steps/cloud/deploy.json > /tmp/deploy.json From 9f9d911dbacc45729fd6e93bad0e08a761eb8823 Mon Sep 17 00:00:00 2001 From: Irene Blanco Date: Mon, 30 Sep 2024 16:38:45 +0200 Subject: [PATCH 27/60] [Inventory] Promote new inventory plugin in APM (#193997) ## Summary Closes https://github.com/elastic/kibana/issues/192856. This PR removes the ability to enable the new APM experience and replaces it with a link promoting the new Inventory feature. ![Screen Recording 2024-09-25 at 15 02 29](https://github.com/user-attachments/assets/5dc6b8af-f207-43e5-8125-fffb4b823e4d) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../custom_no_data_page.cy.ts | 40 ---- .../app/service_inventory/index.tsx | 34 +-- .../entities_inventory_callout.tsx | 59 +++++ .../index.tsx} | 119 +++++------ .../templates/custom_no_data_template.tsx | 124 ----------- .../templates/service_group_template.tsx | 8 - .../shared/entity_enablement/index.tsx | 202 ------------------ .../entity_manager_context.tsx | 7 +- .../observability_solution/apm/tsconfig.json | 5 +- .../inventory/public/types.ts | 3 +- .../observability_shared/common/index.ts | 3 + .../entity_inventory_locator.ts | 24 +++ .../common/locators/index.ts | 1 + .../observability_shared/public/plugin.ts | 4 + 14 files changed, 151 insertions(+), 482 deletions(-) delete mode 100644 x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/custom_no_data_page/custom_no_data_page.cy.ts create mode 100644 x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template/entities_inventory_callout.tsx rename x-pack/plugins/observability_solution/apm/public/components/routing/templates/{apm_main_template.tsx => apm_main_template/index.tsx} (63%) delete mode 100644 x-pack/plugins/observability_solution/apm/public/components/routing/templates/custom_no_data_template.tsx delete mode 100644 x-pack/plugins/observability_solution/apm/public/components/shared/entity_enablement/index.tsx create mode 100644 x-pack/plugins/observability_solution/observability_shared/common/locators/entity_inventory/entity_inventory_locator.ts diff --git a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/custom_no_data_page/custom_no_data_page.cy.ts b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/custom_no_data_page/custom_no_data_page.cy.ts deleted file mode 100644 index a246a2ccb7c34..0000000000000 --- a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/custom_no_data_page/custom_no_data_page.cy.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -describe('Custom no data page', () => { - beforeEach(() => { - cy.loginAsEditorUser(); - }); - - before(() => { - // make sure entity centric experience is disabled - cy.updateAdvancedSettings({ - 'observability:entityCentricExperience': false, - }); - }); - - after(() => { - cy.updateAdvancedSettings({ - 'observability:entityCentricExperience': false, - }); - }); - - it('shows the default no data screen when entity centric experience is disabled ', () => { - cy.visitKibana('/app/apm'); - cy.contains('Welcome to Elastic Observability!'); - }); - - it('shows the custom no data screen when entity centric experience is enabled', () => { - cy.updateAdvancedSettings({ - 'observability:entityCentricExperience': true, - }); - cy.visitKibana('/app/apm'); - cy.contains('Welcome to Elastic Observability!').should('not.exist'); - cy.contains('Detect and resolve problems with your application'); - cy.contains('Try collecting services from logs'); - }); -}); diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/service_inventory/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/service_inventory/index.tsx index e30c79eb483f7..55f72d21f48d7 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/service_inventory/index.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/service_inventory/index.tsx @@ -5,40 +5,8 @@ * 2.0. */ import React from 'react'; -import { i18n } from '@kbn/i18n'; -import { EuiEmptyPrompt, EuiLoadingLogo } from '@elastic/eui'; -import { isEmpty } from 'lodash'; import { ApmServiceInventory } from './apm_signal_inventory'; -import { MultiSignalInventory } from './multi_signal_inventory'; -import { useApmParams } from '../../../hooks/use_apm_params'; -import { useEntityManagerEnablementContext } from '../../../context/entity_manager_context/use_entity_manager_enablement_context'; export function ServiceInventory() { - const { isEnablementPending, isEntityCentricExperienceViewEnabled } = - useEntityManagerEnablementContext(); - - const { - query: { serviceGroup }, - } = useApmParams('/services'); - - if (isEnablementPending) { - return ( - } - title={ -

- {i18n.translate('xpack.apm.loadingService', { - defaultMessage: 'Loading services', - })} -

- } - /> - ); - } - - return isEntityCentricExperienceViewEnabled && isEmpty(serviceGroup) ? ( - - ) : ( - - ); + return ; } diff --git a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template/entities_inventory_callout.tsx b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template/entities_inventory_callout.tsx new file mode 100644 index 0000000000000..16cc93e2827f2 --- /dev/null +++ b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template/entities_inventory_callout.tsx @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiFlexGroup, EuiFlexItem, EuiLink, EuiToolTip, EuiButtonIcon } from '@elastic/eui'; +import { TechnicalPreviewBadge } from '@kbn/observability-shared-plugin/public'; +import React from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { ApmPluginStartDeps } from '../../../../plugin'; + +interface EntitiesInventoryCalloutProps { + onDissmiss: () => void; +} + +export function EntitiesInventoryCallout({ onDissmiss }: EntitiesInventoryCalloutProps) { + const { services } = useKibana(); + const { observabilityShared } = services; + + const entitiesInventoryLocator = observabilityShared.locators.entitiesInventory; + + return ( + + + + + + + + + + + + } + > + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template/index.tsx similarity index 63% rename from x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx rename to x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template/index.tsx index fca4f3809edb5..8633e206599b6 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template/index.tsx @@ -11,24 +11,22 @@ import { entityCentricExperience } from '@kbn/observability-plugin/common'; import { ObservabilityPageTemplateProps } from '@kbn/observability-shared-plugin/public'; import type { KibanaPageTemplateProps } from '@kbn/shared-ux-page-kibana-template'; import React, { useContext } from 'react'; -import { i18n } from '@kbn/i18n'; import { useLocation } from 'react-router-dom'; import { FeatureFeedbackButton } from '@kbn/observability-shared-plugin/public'; -import { useEntityManagerEnablementContext } from '../../../context/entity_manager_context/use_entity_manager_enablement_context'; -import { useDefaultAiAssistantStarterPromptsForAPM } from '../../../hooks/use_default_ai_assistant_starter_prompts_for_apm'; -import { KibanaEnvironmentContext } from '../../../context/kibana_environment_context/kibana_environment_context'; -import { getPathForFeedback } from '../../../utils/get_path_for_feedback'; -import { EnvironmentsContextProvider } from '../../../context/environments_context/environments_context'; -import { FETCH_STATUS, useFetcher } from '../../../hooks/use_fetcher'; -import { ApmPluginStartDeps } from '../../../plugin'; -import { ServiceGroupSaveButton } from '../../app/service_groups'; -import { ServiceGroupsButtonGroup } from '../../app/service_groups/service_groups_button_group'; -import { ApmEnvironmentFilter } from '../../shared/environment_filter'; -import { getNoDataConfig } from './no_data_config'; -import { useApmPluginContext } from '../../../context/apm_plugin/use_apm_plugin_context'; -import { EntityEnablement } from '../../shared/entity_enablement'; -import { CustomNoDataTemplate } from './custom_no_data_template'; -import { ServiceInventoryView } from '../../../context/entity_manager_context/entity_manager_context'; +import { useLocalStorage } from '../../../../hooks/use_local_storage'; +import { useEntityManagerEnablementContext } from '../../../../context/entity_manager_context/use_entity_manager_enablement_context'; +import { useDefaultAiAssistantStarterPromptsForAPM } from '../../../../hooks/use_default_ai_assistant_starter_prompts_for_apm'; +import { KibanaEnvironmentContext } from '../../../../context/kibana_environment_context/kibana_environment_context'; +import { getPathForFeedback } from '../../../../utils/get_path_for_feedback'; +import { EnvironmentsContextProvider } from '../../../../context/environments_context/environments_context'; +import { FETCH_STATUS, useFetcher } from '../../../../hooks/use_fetcher'; +import { ApmPluginStartDeps } from '../../../../plugin'; +import { ServiceGroupSaveButton } from '../../../app/service_groups'; +import { ServiceGroupsButtonGroup } from '../../../app/service_groups/service_groups_button_group'; +import { ApmEnvironmentFilter } from '../../../shared/environment_filter'; +import { getNoDataConfig } from '../no_data_config'; +import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context'; +import { EntitiesInventoryCallout } from './entities_inventory_callout'; // Paths that must skip the no data screen const bypassNoDataScreenPaths = ['/settings', '/diagnostics']; @@ -78,8 +76,8 @@ export function ApmMainTemplate({ entityCentricExperience, true ); - const { isEntityCentricExperienceViewEnabled, serviceInventoryViewLocalStorageSetting } = - useEntityManagerEnablementContext(); + + const { isEntityCentricExperienceViewEnabled } = useEntityManagerEnablementContext(); const ObservabilityPageTemplate = observabilityShared.navigation.PageTemplate; @@ -117,11 +115,6 @@ export function ApmMainTemplate({ const hasApmData = !!data?.hasData; const hasApmIntegrations = !!fleetApmPoliciesData?.hasApmPolicies; - const showCustomEmptyState = - !hasApmData && - !isLoading && - isEntityCentricExperienceSettingEnabled && - serviceInventoryViewLocalStorageSetting === ServiceInventoryView.classic; const noDataConfig = getNoDataConfig({ basePath, @@ -142,6 +135,7 @@ export function ApmMainTemplate({ const rightSideItems = [...(showServiceGroupSaveButton ? [] : [])]; const sanitizedPath = getPathForFeedback(window.location.pathname); + const pageHeaderTitle = ( {pageHeader?.pageTitle ?? pageTitle} @@ -168,47 +162,44 @@ export function ApmMainTemplate({ ); - const pageTemplate = showCustomEmptyState ? ( - - ) : ( - - {isEntityCentricExperienceSettingEnabled && - showEnablementCallout && - selectedNavButton === 'allServices' ? ( - - ) : null} - {showServiceGroupsNav && selectedNavButton && ( - - )} -
- ), - }} - {...pageTemplateProps} - > - {children} -
+ const [dismissedEntitiesInventoryCallout, setdismissedEntitiesInventoryCallout] = useLocalStorage( + `apm.dismissedEntitiesInventoryCallout`, + false ); - return {pageTemplate}; + const showEntitiesInventoryCallout = + !dismissedEntitiesInventoryCallout && + isEntityCentricExperienceSettingEnabled && + selectedNavButton !== undefined; + + return ( + + + {showEntitiesInventoryCallout ? ( + { + setdismissedEntitiesInventoryCallout(true); + }} + /> + ) : null} + {showServiceGroupsNav && selectedNavButton && ( + + )} + + ), + }} + {...pageTemplateProps} + > + {children} + + + ); } diff --git a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/custom_no_data_template.tsx b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/custom_no_data_template.tsx deleted file mode 100644 index d006e43c3971b..0000000000000 --- a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/custom_no_data_template.tsx +++ /dev/null @@ -1,124 +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 { - EuiFlexGroup, - EuiFlexItem, - EuiSpacer, - EuiTextColor, - EuiText, - EuiButton, - EuiPageTemplate, - EuiCard, - EuiImage, - EuiScreenReaderOnly, -} from '@elastic/eui'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; -import React from 'react'; -import { i18n } from '@kbn/i18n'; -import { KibanaSolutionAvatar } from '@kbn/shared-ux-avatar-solution'; -import { NoDataConfig } from '@kbn/shared-ux-page-no-data-config-types'; -import { ApmPluginStartDeps } from '../../../plugin'; -import { EntityEnablement } from '../../shared/entity_enablement'; - -export function CustomNoDataTemplate({ - isPageDataLoaded, - noDataConfig, -}: { - isPageDataLoaded: boolean; - noDataConfig?: NoDataConfig; -}) { - const { services } = useKibana(); - const { http, observabilityShared } = services; - const basePath = http?.basePath.get(); - - const ObservabilityPageTemplate = observabilityShared.navigation.PageTemplate; - const imageUrl = `${basePath}/plugins/kibanaReact/assets/elastic_agent_card.svg`; - - return ( - - - - - - -

- {i18n.translate('xpack.apm.customEmtpyState.title', { - defaultMessage: 'Detect and resolve problems with your application', - })} -

- -

- {i18n.translate('xpack.apm.customEmtpyState.description', { - defaultMessage: - 'Start collecting data for your applications and services so you can detect and resolve problems faster.', - })} -

-
-
- - - - {i18n.translate('xpack.apm.customEmtpyState.title.reader', { - defaultMessage: 'Add APM data', - })} - - - } - description={i18n.translate('xpack.apm.customEmtpyState.card.description', { - defaultMessage: - 'Use APM agents to collect APM data. We make it easy with agents for many popular languages.', - })} - footer={ - - - - {noDataConfig?.action.elasticAgent.title} - - - -

- -

-
-
-
- } - image={ - - } - /> -
-
-
- ); -} diff --git a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/service_group_template.tsx b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/service_group_template.tsx index 67695c6485006..d9fb2437be14c 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/service_group_template.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/service_group_template.tsx @@ -20,8 +20,6 @@ import { useApmRouter } from '../../../hooks/use_apm_router'; import { useAnyOfApmParams } from '../../../hooks/use_apm_params'; import { ApmMainTemplate } from './apm_main_template'; import { useBreadcrumb } from '../../../context/breadcrumbs/use_breadcrumb'; -import { TechnicalPreviewBadge } from '../../shared/technical_preview_badge'; -import { useEntityManagerEnablementContext } from '../../../context/entity_manager_context/use_entity_manager_enablement_context'; export function ServiceGroupTemplate({ pageTitle, @@ -165,7 +163,6 @@ type ServiceGroupContextTab = NonNullable[0] & { function useTabs(selectedTab: ServiceGroupContextTab['key']) { const router = useApmRouter(); const { query } = useAnyOfApmParams('/services', '/service-map'); - const { isEntityCentricExperienceViewEnabled } = useEntityManagerEnablementContext(); const tabs: ServiceGroupContextTab[] = [ { @@ -180,11 +177,6 @@ function useTabs(selectedTab: ServiceGroupContextTab['key']) { defaultMessage: 'Inventory', })} - - {isEntityCentricExperienceViewEnabled && ( - - )} - ), href: router.link('/services', { query }), diff --git a/x-pack/plugins/observability_solution/apm/public/components/shared/entity_enablement/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/shared/entity_enablement/index.tsx deleted file mode 100644 index 62f5cf708bcf7..0000000000000 --- a/x-pack/plugins/observability_solution/apm/public/components/shared/entity_enablement/index.tsx +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React, { useState } from 'react'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; -import useToggle from 'react-use/lib/useToggle'; -import { - EuiButtonIcon, - EuiFlexGroup, - EuiFlexItem, - EuiLink, - EuiLoadingSpinner, - EuiPopover, - EuiPopoverFooter, - EuiSkeletonText, - EuiText, - EuiTextColor, -} from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import type { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; -import { EntityManagerUnauthorizedError } from '@kbn/entityManager-plugin/public'; -import { TechnicalPreviewBadge } from '../technical_preview_badge'; -import { ApmPluginStartDeps } from '../../../plugin'; -import { useEntityManagerEnablementContext } from '../../../context/entity_manager_context/use_entity_manager_enablement_context'; -import { FeedbackModal } from './feedback_modal'; -import { ServiceInventoryView } from '../../../context/entity_manager_context/entity_manager_context'; -import { Unauthorized } from './unauthorized_modal'; -import { useLocalStorage } from '../../../hooks/use_local_storage'; - -export function EntityEnablement({ label, tooltip }: { label: string; tooltip?: string }) { - const [isFeedbackModalVisible, setsIsFeedbackModalVisible] = useLocalStorage( - 'apm.isFeedbackModalVisible', - undefined - ); - - const [isUnauthorizedModalVisible, setsIsUnauthorizedModalVisible] = useState(false); - - const { - services: { entityManager }, - notifications, - } = useKibana(); - - const { - isEntityManagerEnabled, - isEnablementPending, - refetch, - setServiceInventoryViewLocalStorageSetting, - isEntityCentricExperienceViewEnabled, - tourState, - updateTourState, - } = useEntityManagerEnablementContext(); - - const [isPopoverOpen, togglePopover] = useToggle(false); - const [isLoading, setIsLoading] = useToggle(false); - - const handleRestoreView = async () => { - setServiceInventoryViewLocalStorageSetting(ServiceInventoryView.classic); - if (isFeedbackModalVisible === undefined) { - setsIsFeedbackModalVisible(true); - } - }; - - const handleEnablement = async () => { - if (isEntityManagerEnabled) { - setServiceInventoryViewLocalStorageSetting(ServiceInventoryView.entity); - if (tourState.isModalVisible === undefined) { - updateTourState({ isModalVisible: true }); - } - return; - } - - setIsLoading(true); - try { - const response = await entityManager.entityClient.enableManagedEntityDiscovery(); - if (response.success) { - setIsLoading(false); - setServiceInventoryViewLocalStorageSetting(ServiceInventoryView.entity); - - if (tourState.isModalVisible === undefined) { - updateTourState({ isModalVisible: true }); - } - refetch(); - } else { - throw new Error(response.message); - } - } catch (error) { - setIsLoading(false); - - if (error instanceof EntityManagerUnauthorizedError) { - setsIsUnauthorizedModalVisible(true); - return; - } - - const err = error as Error | IHttpFetchError; - notifications.toasts.danger({ - title: i18n.translate('xpack.apm.eemEnablement.errorTitle', { - defaultMessage: 'Error while enabling the new experience', - }), - body: 'response' in err ? err.body?.message ?? err.response?.statusText : err.message, - }); - } - }; - - const handleOnCloseFeedback = () => { - setsIsFeedbackModalVisible(false); - }; - - return isEnablementPending ? ( - - - - ) : ( - - - {isLoading ? ( - - ) : ( - - )} - - - - {isEntityCentricExperienceViewEnabled - ? i18n.translate('xpack.apm.eemEnablement.enabled.', { - defaultMessage: 'Viewing our new experience', - }) - : label} - - - {tooltip && ( - - - } - isOpen={isPopoverOpen} - closePopover={togglePopover} - anchorPosition="downLeft" - > -
- -

- {i18n.translate('xpack.apm.entityEnablement.content', { - defaultMessage: - 'Our new experience combines both APM-instrumented services with services detected from logs in a single service inventory.', - })} -

-
-
- - - - {i18n.translate('xpack.apm.entityEnablement.footer', { - defaultMessage: 'Learn more', - })} - - - -
-
- )} - {isEntityCentricExperienceViewEnabled && ( - - - {i18n.translate('xpack.apm.eemEnablement.restoreClassicView.', { - defaultMessage: 'Restore classic view', - })} - - - )} - - setsIsUnauthorizedModalVisible(false)} - label={label} - /> -
- ); -} diff --git a/x-pack/plugins/observability_solution/apm/public/context/entity_manager_context/entity_manager_context.tsx b/x-pack/plugins/observability_solution/apm/public/context/entity_manager_context/entity_manager_context.tsx index 93205c907caa0..95a246ddce566 100644 --- a/x-pack/plugins/observability_solution/apm/public/context/entity_manager_context/entity_manager_context.tsx +++ b/x-pack/plugins/observability_solution/apm/public/context/entity_manager_context/entity_manager_context.tsx @@ -62,11 +62,6 @@ export function EntityManagerEnablementContextProvider({ true ); - const isEntityCentricExperienceViewEnabled = - isEntityManagerEnabled && - serviceInventoryViewLocalStorageSetting === ServiceInventoryView.entity && - isEntityCentricExperienceSettingEnabled; - function handleServiceInventoryViewChange(nextView: ServiceInventoryView) { setServiceInventoryViewLocalStorageSetting(nextView); // Updates the telemetry context variable every time the user switches views @@ -88,7 +83,7 @@ export function EntityManagerEnablementContextProvider({ refetch, serviceInventoryViewLocalStorageSetting, setServiceInventoryViewLocalStorageSetting: handleServiceInventoryViewChange, - isEntityCentricExperienceViewEnabled, + isEntityCentricExperienceViewEnabled: isEntityCentricExperienceSettingEnabled, tourState, updateTourState: handleTourStateUpdate, }} diff --git a/x-pack/plugins/observability_solution/apm/tsconfig.json b/x-pack/plugins/observability_solution/apm/tsconfig.json index 9195c2547a71a..6f3ff13a2af3e 100644 --- a/x-pack/plugins/observability_solution/apm/tsconfig.json +++ b/x-pack/plugins/observability_solution/apm/tsconfig.json @@ -120,10 +120,6 @@ "@kbn/test-jest-helpers", "@kbn/security-plugin-types-common", "@kbn/entityManager-plugin", - "@kbn/react-hooks", - "@kbn/shared-ux-avatar-solution", - "@kbn/shared-ux-page-no-data-config-types", - "@kbn/react-hooks", "@kbn/server-route-repository-utils", "@kbn/core-analytics-browser", "@kbn/apm-types", @@ -131,6 +127,7 @@ "@kbn/serverless", "@kbn/aiops-log-rate-analysis", "@kbn/router-utils", + "@kbn/react-hooks", ], "exclude": ["target/**/*"] } diff --git a/x-pack/plugins/observability_solution/inventory/public/types.ts b/x-pack/plugins/observability_solution/inventory/public/types.ts index ed4a500edca68..2393b1b55e2b6 100644 --- a/x-pack/plugins/observability_solution/inventory/public/types.ts +++ b/x-pack/plugins/observability_solution/inventory/public/types.ts @@ -13,10 +13,10 @@ import { EntityManagerPublicPluginStart, } from '@kbn/entityManager-plugin/public'; import type { InferencePublicStart, InferencePublicSetup } from '@kbn/inference-plugin/public'; +import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import type { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plugin/public'; -import type { SharePluginStart } from '@kbn/share-plugin/public'; /* eslint-disable @typescript-eslint/no-empty-interface*/ @@ -25,6 +25,7 @@ export interface ConfigSchema {} export interface InventorySetupDependencies { observabilityShared: ObservabilitySharedPluginSetup; inference: InferencePublicSetup; + share: SharePluginSetup; data: DataPublicPluginSetup; entityManager: EntityManagerPublicPluginSetup; } diff --git a/x-pack/plugins/observability_solution/observability_shared/common/index.ts b/x-pack/plugins/observability_solution/observability_shared/common/index.ts index d845ea1d398fd..d13e2b32839d6 100644 --- a/x-pack/plugins/observability_solution/observability_shared/common/index.ts +++ b/x-pack/plugins/observability_solution/observability_shared/common/index.ts @@ -178,6 +178,7 @@ export type { ServiceEntityLocatorParams, TransactionDetailsByTraceIdLocator, TransactionDetailsByTraceIdLocatorParams, + EntitiesInventoryLocator, } from './locators'; export { @@ -201,6 +202,8 @@ export { SERVICE_ENTITY_LOCATOR, TransactionDetailsByTraceIdLocatorDefinition, TRANSACTION_DETAILS_BY_TRACE_ID_LOCATOR, + EntitiesInventoryLocatorDefinition, + ENTITIES_INVENTORY_LOCATOR_ID, } from './locators'; export { COMMON_OBSERVABILITY_GROUPING } from './embeddable_grouping'; diff --git a/x-pack/plugins/observability_solution/observability_shared/common/locators/entity_inventory/entity_inventory_locator.ts b/x-pack/plugins/observability_solution/observability_shared/common/locators/entity_inventory/entity_inventory_locator.ts new file mode 100644 index 0000000000000..deb820b0d5e0a --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_shared/common/locators/entity_inventory/entity_inventory_locator.ts @@ -0,0 +1,24 @@ +/* + * Copyright 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 { SerializableRecord } from '@kbn/utility-types'; +import { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/common'; + +export type EntitiesInventoryLocator = LocatorPublic; + +export const ENTITIES_INVENTORY_LOCATOR_ID = 'ENTITY_INVENTORY_LOCATOR'; + +export class EntitiesInventoryLocatorDefinition implements LocatorDefinition { + public readonly id = ENTITIES_INVENTORY_LOCATOR_ID; + + public readonly getLocation = async () => { + return { + app: 'observability', + path: `/inventory`, + state: {}, + }; + }; +} diff --git a/x-pack/plugins/observability_solution/observability_shared/common/locators/index.ts b/x-pack/plugins/observability_solution/observability_shared/common/locators/index.ts index 9c5ded4940d5a..34a6ff391d672 100644 --- a/x-pack/plugins/observability_solution/observability_shared/common/locators/index.ts +++ b/x-pack/plugins/observability_solution/observability_shared/common/locators/index.ts @@ -17,3 +17,4 @@ export * from './infra/metrics_explorer_locator'; export * from './profiling/flamegraph_locator'; export * from './profiling/stacktraces_locator'; export * from './profiling/topn_functions_locator'; +export * from './entity_inventory/entity_inventory_locator'; diff --git a/x-pack/plugins/observability_solution/observability_shared/public/plugin.ts b/x-pack/plugins/observability_solution/observability_shared/public/plugin.ts index 7cd63d7be7602..7a131a2686ad0 100644 --- a/x-pack/plugins/observability_solution/observability_shared/public/plugin.ts +++ b/x-pack/plugins/observability_solution/observability_shared/public/plugin.ts @@ -45,6 +45,8 @@ import { type MetricsExplorerLocator, type ServiceEntityLocator, type TransactionDetailsByTraceIdLocator, + type EntitiesInventoryLocator, + EntitiesInventoryLocatorDefinition, } from '../common'; import { updateGlobalNavigation } from './services/update_global_navigation'; export interface ObservabilitySharedSetup { @@ -82,6 +84,7 @@ interface ObservabilitySharedLocators { transactionDetailsByTraceId: TransactionDetailsByTraceIdLocator; serviceEntity: ServiceEntityLocator; }; + entitiesInventory: EntitiesInventoryLocator; } export class ObservabilitySharedPlugin implements Plugin { @@ -159,6 +162,7 @@ export class ObservabilitySharedPlugin implements Plugin { ), serviceEntity: urlService.locators.create(new ServiceEntityLocatorDefinition()), }, + entitiesInventory: urlService.locators.create(new EntitiesInventoryLocatorDefinition()), }; } } From 05926c20c57b7abc69c6c068d5733f29306f73ba Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Mon, 30 Sep 2024 10:40:02 -0400 Subject: [PATCH 28/60] [Response Ops][Alerting] Use ES client to update rule SO at end of rule run instead of SO client. (#193341) Resolves https://github.com/elastic/kibana/issues/192397 ## Summary Updates alerting task runner end of run updates to use the ES client update function for a true partial update instead of the saved objects client update function that performs a GET then an update. ## To verify Create a rule in multiple spaces and ensure they run correctly and their execution status and monitoring history are updated at the end of each run. Because we're performing a partial update on attributes that are not in the AAD, the rule should continue running without any encryption errors. ## Risk Matrix | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Updating saved object directly using ES client will break BWC | Medium | High | Response Ops follows an intermediate release strategy for any changes to the rule saved object where schema changes are introduced in an intermediate release before any changes to the saved object are actually made in a followup release. This ensures that any rollbacks that may be required in a release will roll back to a version that is already aware of the new schema. The team is socialized to this strategy as we are requiring users of the alerting framework to also follow this strategy. This should address any backward compatibility issues that might arise by circumventing the saved objects client update function. | | Updating saved object directly using ES client will break AAD | Medium | High | An explicit allowlist of non-AAD fields that are allowed to be partially updated has been introduced and any fields not in this allowlist will not be included in the partial update. Any updates to the rule saved object that might break AAD would show up with > 1 execution of a rule and we have a plethora of functional tests that rely on multiple executions of a rule that would flag if there were issues running due to AAD issues. | --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine --- .../alerting/server/saved_objects/index.ts | 2 +- .../partially_update_rule.test.ts | 164 +++++++++++++++++- .../saved_objects/partially_update_rule.ts | 50 ++++++ .../alerting/server/task_runner/fixtures.ts | 89 +++++----- .../server/task_runner/task_runner.test.ts | 51 ++---- .../server/task_runner/task_runner.ts | 19 +- .../task_runner_alerts_client.test.ts | 18 +- .../task_runner/task_runner_cancel.test.ts | 85 ++++----- x-pack/plugins/alerting/tsconfig.json | 3 +- 9 files changed, 340 insertions(+), 141 deletions(-) diff --git a/x-pack/plugins/alerting/server/saved_objects/index.ts b/x-pack/plugins/alerting/server/saved_objects/index.ts index eb07a84950d14..a3bb0b4f0afe8 100644 --- a/x-pack/plugins/alerting/server/saved_objects/index.ts +++ b/x-pack/plugins/alerting/server/saved_objects/index.ts @@ -23,7 +23,7 @@ import { RawRule } from '../types'; import { getImportWarnings } from './get_import_warnings'; import { isRuleExportable } from './is_rule_exportable'; import { RuleTypeRegistry } from '../rule_type_registry'; -export { partiallyUpdateRule } from './partially_update_rule'; +export { partiallyUpdateRule, partiallyUpdateRuleWithEs } from './partially_update_rule'; import { RULES_SETTINGS_SAVED_OBJECT_TYPE, MAINTENANCE_WINDOW_SAVED_OBJECT_TYPE, diff --git a/x-pack/plugins/alerting/server/saved_objects/partially_update_rule.test.ts b/x-pack/plugins/alerting/server/saved_objects/partially_update_rule.test.ts index 5fcf23cbae6fb..294bc81481540 100644 --- a/x-pack/plugins/alerting/server/saved_objects/partially_update_rule.test.ts +++ b/x-pack/plugins/alerting/server/saved_objects/partially_update_rule.test.ts @@ -10,16 +10,23 @@ import { ISavedObjectsRepository, SavedObjectsErrorHelpers, } from '@kbn/core/server'; - -import { PartiallyUpdateableRuleAttributes, partiallyUpdateRule } from './partially_update_rule'; -import { savedObjectsClientMock } from '@kbn/core/server/mocks'; +import { + PartiallyUpdateableRuleAttributes, + partiallyUpdateRule, + partiallyUpdateRuleWithEs, +} from './partially_update_rule'; +import { elasticsearchServiceMock, savedObjectsClientMock } from '@kbn/core/server/mocks'; import { RULE_SAVED_OBJECT_TYPE } from '.'; +import { ALERTING_CASES_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server'; +import { estypes } from '@elastic/elasticsearch'; +import { RuleExecutionStatuses } from '@kbn/alerting-types'; const MockSavedObjectsClientContract = savedObjectsClientMock.create(); const MockISavedObjectsRepository = MockSavedObjectsClientContract as unknown as jest.Mocked; +const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; -describe('partially_update_rule', () => { +describe('partiallyUpdateRule', () => { beforeEach(() => { jest.resetAllMocks(); }); @@ -104,6 +111,101 @@ describe('partially_update_rule', () => { }); }); +describe('partiallyUpdateRuleWithEs', () => { + beforeEach(() => { + jest.resetAllMocks(); + jest.clearAllMocks(); + }); + + test('should work with no options', async () => { + esClient.update.mockResolvedValueOnce(MockEsUpdateResponse(MockRuleId)); + + await partiallyUpdateRuleWithEs(esClient, MockRuleId, DefaultAttributesForEsUpdate); + expect(esClient.update).toHaveBeenCalledTimes(1); + expect(esClient.update).toHaveBeenCalledWith({ + id: `alert:${MockRuleId}`, + index: ALERTING_CASES_SAVED_OBJECT_INDEX, + doc: { + alert: DefaultAttributesForEsUpdate, + }, + }); + }); + + test('should strip unallowed attributes ', async () => { + const attributes = + AttributesForEsUpdateWithUnallowedFields as unknown as PartiallyUpdateableRuleAttributes; + esClient.update.mockResolvedValueOnce(MockEsUpdateResponse(MockRuleId)); + + await partiallyUpdateRuleWithEs(esClient, MockRuleId, attributes); + expect(esClient.update).toHaveBeenCalledWith({ + id: `alert:${MockRuleId}`, + index: ALERTING_CASES_SAVED_OBJECT_INDEX, + doc: { + alert: DefaultAttributesForEsUpdate, + }, + }); + }); + + test('should handle ES errors', async () => { + esClient.update.mockRejectedValueOnce(new Error('wops')); + + await expect( + partiallyUpdateRuleWithEs(esClient, MockRuleId, DefaultAttributes) + ).rejects.toThrowError('wops'); + }); + + test('should handle the version option', async () => { + esClient.update.mockResolvedValueOnce(MockEsUpdateResponse(MockRuleId)); + + await partiallyUpdateRuleWithEs(esClient, MockRuleId, DefaultAttributesForEsUpdate, { + version: 'WzQsMV0=', + }); + expect(esClient.update).toHaveBeenCalledWith({ + id: `alert:${MockRuleId}`, + index: ALERTING_CASES_SAVED_OBJECT_INDEX, + if_primary_term: 1, + if_seq_no: 4, + doc: { + alert: DefaultAttributesForEsUpdate, + }, + }); + }); + + test('should handle the ignore404 option', async () => { + esClient.update.mockResolvedValueOnce(MockEsUpdateResponse(MockRuleId)); + + await partiallyUpdateRuleWithEs(esClient, MockRuleId, DefaultAttributesForEsUpdate, { + ignore404: true, + }); + expect(esClient.update).toHaveBeenCalledWith( + { + id: `alert:${MockRuleId}`, + index: ALERTING_CASES_SAVED_OBJECT_INDEX, + doc: { + alert: DefaultAttributesForEsUpdate, + }, + }, + { ignore: [404] } + ); + }); + + test('should handle the refresh option', async () => { + esClient.update.mockResolvedValueOnce(MockEsUpdateResponse(MockRuleId)); + + await partiallyUpdateRuleWithEs(esClient, MockRuleId, DefaultAttributesForEsUpdate, { + refresh: 'wait_for', + }); + expect(esClient.update).toHaveBeenCalledWith({ + id: `alert:${MockRuleId}`, + index: ALERTING_CASES_SAVED_OBJECT_INDEX, + doc: { + alert: DefaultAttributesForEsUpdate, + }, + refresh: 'wait_for', + }); + }); +}); + function getMockSavedObjectClients(): Record< string, jest.Mocked @@ -126,6 +228,50 @@ const DefaultAttributes = { const ExtraneousAttributes = { ...DefaultAttributes, foo: 'bar' }; +const DefaultAttributesForEsUpdate = { + running: false, + executionStatus: { + status: 'active' as RuleExecutionStatuses, + lastExecutionDate: '2023-01-01T08:44:40.000Z', + lastDuration: 12, + error: null, + warning: null, + }, + monitoring: { + run: { + calculated_metrics: { + success_ratio: 20, + }, + history: [ + { + success: true, + timestamp: 1640991880000, + duration: 12, + outcome: 'success', + }, + ], + last_run: { + timestamp: '2023-01-01T08:44:40.000Z', + metrics: { + duration: 12, + gap_duration_s: null, + total_alerts_created: null, + total_alerts_detected: null, + total_indexing_duration_ms: null, + total_search_duration_ms: null, + }, + }, + }, + }, +}; + +const AttributesForEsUpdateWithUnallowedFields = { + ...DefaultAttributesForEsUpdate, + alertTypeId: 'foo', + consumer: 'consumer', + randomField: 'bar', +}; + const MockRuleId = 'rule-id'; const MockUpdateValue = { @@ -137,3 +283,13 @@ const MockUpdateValue = { }, references: [], }; + +const MockEsUpdateResponse = (id: string) => ({ + _index: '.kibana_alerting_cases_9.0.0_001', + _id: `alert:${id}`, + _version: 3, + result: 'updated' as estypes.Result, + _shards: { total: 1, successful: 1, failed: 0 }, + _seq_no: 5, + _primary_term: 1, +}); diff --git a/x-pack/plugins/alerting/server/saved_objects/partially_update_rule.ts b/x-pack/plugins/alerting/server/saved_objects/partially_update_rule.ts index 2665845a1110f..f9b4da5ed767b 100644 --- a/x-pack/plugins/alerting/server/saved_objects/partially_update_rule.ts +++ b/x-pack/plugins/alerting/server/saved_objects/partially_update_rule.ts @@ -7,10 +7,13 @@ import { omit, pick } from 'lodash'; import { + ElasticsearchClient, SavedObjectsClient, SavedObjectsErrorHelpers, SavedObjectsUpdateOptions, } from '@kbn/core/server'; +import { decodeRequestVersion } from '@kbn/core-saved-objects-base-server-internal'; +import { ALERTING_CASES_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server'; import { RawRule } from '../types'; import { @@ -67,3 +70,50 @@ export async function partiallyUpdateRule( throw err; } } + +// Explicit list of attributes that we allow to be partially updated +// There should be no overlap between this list and RuleAttributesIncludedInAAD or RuleAttributesToEncrypt +const RuleAttributesAllowedForPartialUpdate = [ + 'executionStatus', + 'lastRun', + 'monitoring', + 'nextRun', + 'running', +]; + +// direct, partial update to a rule saved object via ElasticsearchClient + +// we do this direct partial update to avoid the overhead of the SavedObjectsClient for +// only these allow-listed fields which don't impact encryption. in addition, because these +// fields are only updated by the system user at the end of a rule run, they should not +// need to be included in any (user-centric) audit logs. +export async function partiallyUpdateRuleWithEs( + esClient: ElasticsearchClient, + id: string, + attributes: PartiallyUpdateableRuleAttributes, + options: PartiallyUpdateRuleSavedObjectOptions = {} +): Promise { + // ensure we only have the valid attributes that are not encrypted and are excluded from AAD + const attributeUpdates = omit(attributes, [ + ...RuleAttributesToEncrypt, + ...RuleAttributesIncludedInAAD, + ]); + // ensure we only have attributes that we explicitly allow to be updated + const attributesAllowedForUpdate = pick(attributeUpdates, RuleAttributesAllowedForPartialUpdate); + + const updateParams = { + id: `alert:${id}`, + index: ALERTING_CASES_SAVED_OBJECT_INDEX, + ...(options.version ? decodeRequestVersion(options.version) : {}), + doc: { + alert: attributesAllowedForUpdate, + }, + ...(options.refresh ? { refresh: options.refresh } : {}), + }; + + if (options.ignore404) { + await esClient.update(updateParams, { ignore: [404] }); + } else { + await esClient.update(updateParams); + } +} diff --git a/x-pack/plugins/alerting/server/task_runner/fixtures.ts b/x-pack/plugins/alerting/server/task_runner/fixtures.ts index ae8eccfcb1f86..5174aa9b965ec 100644 --- a/x-pack/plugins/alerting/server/task_runner/fixtures.ts +++ b/x-pack/plugins/alerting/server/task_runner/fixtures.ts @@ -7,6 +7,7 @@ import { TaskStatus } from '@kbn/task-manager-plugin/server'; import { SavedObject } from '@kbn/core/server'; +import { ALERTING_CASES_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server'; import { Rule, RuleTypeParams, @@ -64,7 +65,7 @@ const defaultHistory = [ }, ]; -export const generateSavedObjectParams = ({ +export const generateRuleUpdateParams = ({ error = null, warning = null, status = 'ok', @@ -83,53 +84,59 @@ export const generateSavedObjectParams = ({ history?: RuleMonitoring['run']['history']; alertsCount?: Record; }) => [ - RULE_SAVED_OBJECT_TYPE, - '1', { - monitoring: { - run: { - calculated_metrics: { - success_ratio: successRatio, + id: `alert:1`, + index: ALERTING_CASES_SAVED_OBJECT_INDEX, + doc: { + alert: { + monitoring: { + run: { + calculated_metrics: { + success_ratio: successRatio, + }, + history, + last_run: { + timestamp: '1970-01-01T00:00:00.000Z', + metrics: { + duration: 0, + gap_duration_s: null, + total_alerts_created: null, + total_alerts_detected: null, + total_indexing_duration_ms: null, + total_search_duration_ms: null, + }, + }, + }, }, - history, - last_run: { - timestamp: '1970-01-01T00:00:00.000Z', - metrics: { - duration: 0, - gap_duration_s: null, - total_alerts_created: null, - total_alerts_detected: null, - total_indexing_duration_ms: null, - total_search_duration_ms: null, + executionStatus: { + error, + lastDuration: 0, + lastExecutionDate: '1970-01-01T00:00:00.000Z', + status, + warning, + }, + lastRun: { + outcome, + outcomeOrder: RuleLastRunOutcomeOrderMap[outcome], + outcomeMsg: + (error?.message && [error?.message]) || + (warning?.message && [warning?.message]) || + null, + warning: error?.reason || warning?.reason || null, + alertsCount: { + active: 0, + ignored: 0, + new: 0, + recovered: 0, + ...(alertsCount || {}), }, }, + nextRun, + running: false, }, }, - executionStatus: { - error, - lastDuration: 0, - lastExecutionDate: '1970-01-01T00:00:00.000Z', - status, - warning, - }, - lastRun: { - outcome, - outcomeOrder: RuleLastRunOutcomeOrderMap[outcome], - outcomeMsg: - (error?.message && [error?.message]) || (warning?.message && [warning?.message]) || null, - warning: error?.reason || warning?.reason || null, - alertsCount: { - active: 0, - ignored: 0, - new: 0, - recovered: 0, - ...(alertsCount || {}), - }, - }, - nextRun, - running: false, }, - { refresh: false, namespace: undefined }, + { ignore: [404] }, ]; export const GENERIC_ERROR_MESSAGE = 'GENERIC ERROR MESSAGE'; diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts b/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts index 438ffb3685e2a..e06c260109b76 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts @@ -59,7 +59,7 @@ import { generateRunnerResult, RULE_ACTIONS, generateEnqueueFunctionInput, - generateSavedObjectParams, + generateRuleUpdateParams, mockTaskInstance, GENERIC_ERROR_MESSAGE, generateAlertInstance, @@ -341,8 +341,8 @@ describe('Task Runner', () => { testAlertingEventLogCalls({ status: 'ok' }); - expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( - ...generateSavedObjectParams({}) + expect(elasticsearchService.client.asInternalUser.update).toHaveBeenCalledWith( + ...generateRuleUpdateParams({}) ); expect(taskRunnerFactoryInitializerParams.executionContext.withContext).toBeCalledTimes(1); @@ -2676,8 +2676,8 @@ describe('Task Runner', () => { status: 'ok', }); - expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( - ...generateSavedObjectParams({}) + expect(elasticsearchService.client.asInternalUser.update).toHaveBeenCalledWith( + ...generateRuleUpdateParams({}) ); expect(mockUsageCounter.incrementCounter).not.toHaveBeenCalled(); }); @@ -2789,10 +2789,8 @@ describe('Task Runner', () => { }); await taskRunner.run(); - expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( - ...generateSavedObjectParams({ - nextRun: '1970-01-01T00:00:10.000Z', - }) + expect(elasticsearchService.client.asInternalUser.update).toHaveBeenCalledWith( + ...generateRuleUpdateParams({ nextRun: '1970-01-01T00:00:10.000Z' }) ); }); @@ -2825,21 +2823,14 @@ describe('Task Runner', () => { ); await taskRunner.run(); ruleType.executor.mockClear(); - expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( - ...generateSavedObjectParams({ - error: { - message: GENERIC_ERROR_MESSAGE, - reason: 'execute', - }, + + expect(elasticsearchService.client.asInternalUser.update).toHaveBeenCalledWith( + ...generateRuleUpdateParams({ + error: { message: GENERIC_ERROR_MESSAGE, reason: 'execute' }, outcome: 'failed', status: 'error', successRatio: 0, - history: [ - { - success: false, - timestamp: 0, - }, - ], + history: [{ success: false, timestamp: 0 }], }) ); }); @@ -2947,15 +2938,12 @@ describe('Task Runner', () => { expect(actionsClient.bulkEnqueueExecution).toHaveBeenCalledTimes(1); - expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( - ...generateSavedObjectParams({ + expect(elasticsearchService.client.asInternalUser.update).toHaveBeenCalledWith( + ...generateRuleUpdateParams({ status: 'warning', outcome: 'warning', warning, - alertsCount: { - active: 1, - new: 1, - }, + alertsCount: { active: 1, new: 1 }, }) ); @@ -3117,15 +3105,12 @@ describe('Task Runner', () => { expect(actionsClient.bulkEnqueueExecution).toHaveBeenCalledTimes(1); - expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( - ...generateSavedObjectParams({ + expect(elasticsearchService.client.asInternalUser.update).toHaveBeenCalledWith( + ...generateRuleUpdateParams({ status: 'warning', outcome: 'warning', warning, - alertsCount: { - active: 2, - new: 2, - }, + alertsCount: { active: 2, new: 2 }, }) ); diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner.ts b/x-pack/plugins/alerting/server/task_runner/task_runner.ts index e01dd73df7e58..b5a1854581bf3 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.ts @@ -42,7 +42,7 @@ import { import { asErr, asOk, isErr, isOk, map, resolveErr, Result } from '../lib/result_type'; import { taskInstanceToAlertTaskInstance } from './alert_task_instance'; import { isAlertSavedObjectNotFoundError, isEsUnavailableError } from '../lib/is_alerting_error'; -import { partiallyUpdateRule, RULE_SAVED_OBJECT_TYPE } from '../saved_objects'; +import { partiallyUpdateRuleWithEs, RULE_SAVED_OBJECT_TYPE } from '../saved_objects'; import { AlertInstanceContext, AlertInstanceState, @@ -204,7 +204,6 @@ export class TaskRunner< private async updateRuleSavedObjectPostRun( ruleId: string, - namespace: string | undefined, attributes: { executionStatus?: RawRuleExecutionStatus; monitoring?: RawRuleMonitoring; @@ -212,7 +211,7 @@ export class TaskRunner< lastRun?: RawRuleLastRun | null; } ) { - const client = this.internalSavedObjectsRepository; + const client = this.context.elasticsearch.client.asInternalUser; try { // Future engineer -> Here we are just checking if we need to wait for // the update of the attribute `running` in the rule's saved object @@ -223,13 +222,12 @@ export class TaskRunner< // eslint-disable-next-line no-empty } catch {} try { - await partiallyUpdateRule( + await partiallyUpdateRuleWithEs( client, ruleId, { ...attributes, running: false }, { ignore404: true, - namespace, refresh: false, } ); @@ -548,7 +546,7 @@ export class TaskRunner< const { executionStatus: execStatus, executionMetrics: execMetrics } = await this.timer.runWithTimer(TaskRunnerTimerSpan.ProcessRuleRun, async () => { const { - params: { alertId: ruleId, spaceId }, + params: { alertId: ruleId }, startedAt, schedule: taskSchedule, } = this.taskInstance; @@ -560,8 +558,6 @@ export class TaskRunner< nextRun = getNextRun({ startDate: startedAt, interval: taskSchedule.interval }); } - const namespace = this.context.spaceIdToNamespace(spaceId); - const { executionStatus, executionMetrics, lastRun, outcome } = processRunResults({ logger: this.logger, logPrefix: `${this.ruleType.id}:${ruleId}`, @@ -602,7 +598,7 @@ export class TaskRunner< )} - ${JSON.stringify(lastRun)}` ); } - await this.updateRuleSavedObjectPostRun(ruleId, namespace, { + await this.updateRuleSavedObjectPostRun(ruleId, { executionStatus: ruleExecutionStatusToRaw(executionStatus), nextRun, lastRun: lastRunToRaw(lastRun), @@ -758,11 +754,10 @@ export class TaskRunner< // Write event log entry const { - params: { alertId: ruleId, spaceId, consumer }, + params: { alertId: ruleId, consumer }, schedule: taskSchedule, startedAt, } = this.taskInstance; - const namespace = this.context.spaceIdToNamespace(spaceId); if (consumer && !this.ruleConsumer) { this.ruleConsumer = consumer; @@ -803,7 +798,7 @@ export class TaskRunner< `Updating rule task for ${this.ruleType.id} rule with id ${ruleId} - execution error due to timeout` ); const outcome = 'failed'; - await this.updateRuleSavedObjectPostRun(ruleId, namespace, { + await this.updateRuleSavedObjectPostRun(ruleId, { executionStatus: ruleExecutionStatusToRaw(executionStatus), lastRun: { outcome, diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts b/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts index c116230016e9b..6c7331de463ea 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts @@ -46,7 +46,7 @@ import { RULE_NAME, generateRunnerResult, RULE_ACTIONS, - generateSavedObjectParams, + generateRuleUpdateParams, mockTaskInstance, DATE_1970, DATE_1970_5_MIN, @@ -376,8 +376,8 @@ describe('Task Runner', () => { { tags: ['1', 'test'] } ); - expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( - ...generateSavedObjectParams({}) + expect(elasticsearchService.client.asInternalUser.update).toHaveBeenCalledWith( + ...generateRuleUpdateParams({}) ); expect(taskRunnerFactoryInitializerParams.executionContext.withContext).toBeCalledTimes(1); @@ -510,8 +510,8 @@ describe('Task Runner', () => { 'ruleRunMetrics for test:1: {"numSearches":3,"totalSearchDurationMs":23423,"esSearchDurationMs":33,"numberOfTriggeredActions":0,"numberOfGeneratedActions":0,"numberOfActiveAlerts":0,"numberOfRecoveredAlerts":0,"numberOfNewAlerts":0,"numberOfDelayedAlerts":0,"hasReachedAlertLimit":false,"hasReachedQueuedActionsLimit":false,"triggeredActionsStatus":"complete"}', { tags: ['1', 'test'] } ); - expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( - ...generateSavedObjectParams({}) + expect(elasticsearchService.client.asInternalUser.update).toHaveBeenCalledWith( + ...generateRuleUpdateParams({}) ); expect(taskRunnerFactoryInitializerParams.executionContext.withContext).toBeCalledTimes(1); expect( @@ -708,8 +708,8 @@ describe('Task Runner', () => { tags: ['1', 'test'], }); - expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( - ...generateSavedObjectParams({}) + expect(elasticsearchService.client.asInternalUser.update).toHaveBeenCalledWith( + ...generateRuleUpdateParams({}) ); expect(taskRunnerFactoryInitializerParams.executionContext.withContext).toBeCalledTimes(1); @@ -799,8 +799,8 @@ describe('Task Runner', () => { tags: ['1', 'test'], }); - expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( - ...generateSavedObjectParams({}) + expect(elasticsearchService.client.asInternalUser.update).toHaveBeenCalledWith( + ...generateRuleUpdateParams({}) ); expect(taskRunnerFactoryInitializerParams.executionContext.withContext).toBeCalledTimes(1); diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner_cancel.test.ts b/x-pack/plugins/alerting/server/task_runner/task_runner_cancel.test.ts index 3a6a9547fb902..e5572707ae6fd 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner_cancel.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner_cancel.test.ts @@ -63,6 +63,7 @@ import { TaskRunnerContext } from './types'; import { backfillClientMock } from '../backfill_client/backfill_client.mock'; import { UntypedNormalizedRuleType } from '../rule_type_registry'; import { rulesSettingsServiceMock } from '../rules_settings/rules_settings_service.mock'; +import { ALERTING_CASES_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server'; import { maintenanceWindowsServiceMock } from './maintenance_windows/maintenance_windows_service.mock'; jest.mock('uuid', () => ({ @@ -225,53 +226,57 @@ describe('Task Runner Cancel', () => { testAlertingEventLogCalls({ status: 'ok' }); - expect(internalSavedObjectsRepository.update).toHaveBeenCalledTimes(1); - expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( - RULE_SAVED_OBJECT_TYPE, - '1', + expect(elasticsearchService.client.asInternalUser.update).toHaveBeenCalledTimes(1); + expect(elasticsearchService.client.asInternalUser.update).toHaveBeenCalledWith( { - executionStatus: { - error: { - message: `test:1: execution cancelled due to timeout - exceeded rule type timeout of 5m`, - reason: 'timeout', - }, - lastDuration: 0, - lastExecutionDate: '1970-01-01T00:00:00.000Z', - status: 'error', - warning: null, - }, - lastRun: { - alertsCount: {}, - outcome: 'failed', - outcomeMsg: [ - 'test:1: execution cancelled due to timeout - exceeded rule type timeout of 5m', - ], - outcomeOrder: 20, - warning: 'timeout', - }, - monitoring: { - run: { - calculated_metrics: { - success_ratio: 0, + id: `alert:1`, + index: ALERTING_CASES_SAVED_OBJECT_INDEX, + doc: { + alert: { + executionStatus: { + error: { + message: `test:1: execution cancelled due to timeout - exceeded rule type timeout of 5m`, + reason: 'timeout', + }, + lastDuration: 0, + lastExecutionDate: '1970-01-01T00:00:00.000Z', + status: 'error', + warning: null, + }, + lastRun: { + alertsCount: {}, + outcome: 'failed', + outcomeMsg: [ + 'test:1: execution cancelled due to timeout - exceeded rule type timeout of 5m', + ], + outcomeOrder: 20, + warning: 'timeout', }, - history: [], - last_run: { - metrics: { - duration: 0, - gap_duration_s: null, - total_alerts_created: null, - total_alerts_detected: null, - total_indexing_duration_ms: null, - total_search_duration_ms: null, + monitoring: { + run: { + calculated_metrics: { + success_ratio: 0, + }, + history: [], + last_run: { + metrics: { + duration: 0, + gap_duration_s: null, + total_alerts_created: null, + total_alerts_detected: null, + total_indexing_duration_ms: null, + total_search_duration_ms: null, + }, + timestamp: '1970-01-01T00:00:00.000Z', + }, }, - timestamp: '1970-01-01T00:00:00.000Z', }, + nextRun: '1970-01-01T00:00:10.000Z', + running: false, }, }, - nextRun: '1970-01-01T00:00:10.000Z', - running: false, }, - { refresh: false, namespace: undefined } + { ignore: [404] } ); expect(mockUsageCounter.incrementCounter).toHaveBeenCalledTimes(1); expect(mockUsageCounter.incrementCounter).toHaveBeenCalledWith({ diff --git a/x-pack/plugins/alerting/tsconfig.json b/x-pack/plugins/alerting/tsconfig.json index c09816222b010..c0951663a8489 100644 --- a/x-pack/plugins/alerting/tsconfig.json +++ b/x-pack/plugins/alerting/tsconfig.json @@ -72,7 +72,8 @@ "@kbn/alerting-state-types", "@kbn/core-security-server", "@kbn/core-http-server", - "@kbn/zod" + "@kbn/zod", + "@kbn/core-saved-objects-base-server-internal" ], "exclude": [ "target/**/*" From 2a935dcce37bd3e3f3fce32d6257b2ec7191dac5 Mon Sep 17 00:00:00 2001 From: Nathan L Smith Date: Mon, 30 Sep 2024 09:55:49 -0500 Subject: [PATCH 29/60] Hide progress bar on initial load when client prefers reduced motion (#194365) ## Summary See https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion ![CleanShot 2024-09-29 at 21 57 36](https://github.com/user-attachments/assets/27436ec4-986b-4c91-9d9f-e49d59d76e7c) --- .../apps/core-apps-server-internal/assets/legacy_styles.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/core/apps/core-apps-server-internal/assets/legacy_styles.css b/packages/core/apps/core-apps-server-internal/assets/legacy_styles.css index 55ed0fbfdf8ba..ea149e7fec132 100644 --- a/packages/core/apps/core-apps-server-internal/assets/legacy_styles.css +++ b/packages/core/apps/core-apps-server-internal/assets/legacy_styles.css @@ -114,3 +114,9 @@ body, html { transform: scaleX(1) translateX(100%); } } + +@media (prefers-reduced-motion) { + .kbnProgress { + display: none; + } +} From 508141423e7d18ce87628d826628d161c3292418 Mon Sep 17 00:00:00 2001 From: Hanna Tamoudi Date: Mon, 30 Sep 2024 17:46:05 +0200 Subject: [PATCH 30/60] [Automatic Import] add fields mapping to readme (#193717) --- .../build_integration.test.ts | 62 ++++-- .../integration_builder/build_integration.ts | 43 +++-- .../integration_builder/data_stream.test.ts | 12 ++ .../server/integration_builder/data_stream.ts | 37 +++- .../server/integration_builder/fields.test.ts | 34 ++++ .../server/integration_builder/fields.ts | 20 +- .../integration_builder/readme_files.test.ts | 182 ++++++++++++++++++ .../integration_builder/readme_files.ts | 42 ++++ .../server/templates/build_readme.md.njk | 8 + .../server/templates/package_readme.md.njk | 43 ++--- .../server/templates/readme.njk | 31 +++ .../server/util/samples.test.ts | 159 ++++++++++++++- .../server/util/samples.ts | 43 ++++- 13 files changed, 634 insertions(+), 82 deletions(-) create mode 100644 x-pack/plugins/integration_assistant/server/integration_builder/readme_files.test.ts create mode 100644 x-pack/plugins/integration_assistant/server/integration_builder/readme_files.ts create mode 100644 x-pack/plugins/integration_assistant/server/templates/build_readme.md.njk create mode 100644 x-pack/plugins/integration_assistant/server/templates/readme.njk diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.test.ts b/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.test.ts index e8800af12653f..419e287e23bf7 100644 --- a/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.test.ts +++ b/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.test.ts @@ -14,6 +14,7 @@ import { createAgentInput } from './agent'; import { createPipeline } from './pipeline'; import { DataStream, Docs, InputType, Pipeline, Integration } from '../../common'; import yaml from 'js-yaml'; +import { createReadme } from './readme_files'; const mockedDataPath = 'path'; const mockedId = 123; @@ -23,6 +24,10 @@ jest.mock('./data_stream'); jest.mock('./fields'); jest.mock('./agent'); jest.mock('./pipeline'); +jest.mock('./readme_files'); + +(createFieldMapping as jest.Mock).mockReturnValue([]); +(createDataStream as jest.Mock).mockReturnValue([]); (generateUniqueId as jest.Mock).mockReturnValue(mockedId); @@ -106,22 +111,11 @@ describe('buildPackage', () => { // _dev files expect(ensureDirSync).toHaveBeenCalledWith(`${integrationPath}/_dev/build`); - expect(createSync).toHaveBeenCalledWith( - `${integrationPath}/_dev/build/docs/README.md`, - expect.any(String) - ); expect(createSync).toHaveBeenCalledWith( `${integrationPath}/_dev/build/build.yml`, expect.any(String) ); - // Docs files - expect(ensureDirSync).toHaveBeenCalledWith(`${integrationPath}/docs/`); - expect(createSync).toHaveBeenCalledWith( - `${integrationPath}/docs/README.md`, - expect.any(String) - ); - // Changelog file expect(createSync).toHaveBeenCalledWith(`${integrationPath}/changelog.yml`, expect.any(String)); @@ -188,6 +182,52 @@ describe('buildPackage', () => { secondDataStreamDocs ); }); + + it('Should call createReadme once with sorted fields', async () => { + jest.clearAllMocks(); + + const firstDSFieldsMapping = [{ name: 'name a', description: 'description 1', type: 'type 1' }]; + + const firstDataStreamFields = [ + { name: 'name b', description: 'description 1', type: 'type 1' }, + ]; + + const secondDSFieldsMapping = [ + { name: 'name c', description: 'description 2', type: 'type 2' }, + { name: 'name e', description: 'description 3', type: 'type 3' }, + ]; + + const secondDataStreamFields = [ + { name: 'name d', description: 'description 2', type: 'type 2' }, + ]; + + (createFieldMapping as jest.Mock).mockReturnValueOnce(firstDSFieldsMapping); + (createDataStream as jest.Mock).mockReturnValueOnce(firstDataStreamFields); + + (createFieldMapping as jest.Mock).mockReturnValueOnce(secondDSFieldsMapping); + (createDataStream as jest.Mock).mockReturnValueOnce(secondDataStreamFields); + + await buildPackage(testIntegration); + + expect(createReadme).toHaveBeenCalledWith(integrationPath, testIntegration.name, [ + { + datastream: firstDatastreamName, + fields: [ + { name: 'name a', description: 'description 1', type: 'type 1' }, + + { name: 'name b', description: 'description 1', type: 'type 1' }, + ], + }, + { + datastream: secondDatastreamName, + fields: [ + { name: 'name c', description: 'description 2', type: 'type 2' }, + { name: 'name d', description: 'description 2', type: 'type 2' }, + { name: 'name e', description: 'description 3', type: 'type 3' }, + ], + }, + ]); + }); }); describe('renderPackageManifestYAML', () => { diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.ts b/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.ts index b9bc1b55268d7..8743ada38bdb6 100644 --- a/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.ts +++ b/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.ts @@ -16,6 +16,8 @@ import { createAgentInput } from './agent'; import { createDataStream } from './data_stream'; import { createFieldMapping } from './fields'; import { createPipeline } from './pipeline'; +import { createReadme } from './readme_files'; +import { Field, flattenObjectsList } from '../util/samples'; const initialVersion = '1.0.0'; @@ -37,17 +39,27 @@ export async function buildPackage(integration: Integration): Promise { const packageDir = createDirectories(workingDir, integration, packageDirectoryName); const dataStreamsDir = joinPath(packageDir, 'data_stream'); - - for (const dataStream of integration.dataStreams) { + const fieldsPerDatastream = integration.dataStreams.map((dataStream) => { const dataStreamName = dataStream.name; const specificDataStreamDir = joinPath(dataStreamsDir, dataStreamName); - createDataStream(integration.name, specificDataStreamDir, dataStream); + const dataStreamFields = createDataStream(integration.name, specificDataStreamDir, dataStream); createAgentInput(specificDataStreamDir, dataStream.inputTypes); createPipeline(specificDataStreamDir, dataStream.pipeline); - createFieldMapping(integration.name, dataStreamName, specificDataStreamDir, dataStream.docs); - } + const fields = createFieldMapping( + integration.name, + dataStreamName, + specificDataStreamDir, + dataStream.docs + ); + + return { + datastream: dataStreamName, + fields: mergeAndSortFields(fields, dataStreamFields), + }; + }); + createReadme(packageDir, integration.name, fieldsPerDatastream); const zipBuffer = await createZipArchive(workingDir, packageDirectoryName); removeDirSync(workingDir); @@ -67,7 +79,6 @@ function createDirectories( } function createPackage(packageDir: string, integration: Integration): void { - createReadme(packageDir, integration); createChangelog(packageDir); createBuildFile(packageDir); createPackageManifest(packageDir, integration); @@ -102,20 +113,6 @@ function createChangelog(packageDir: string): void { createSync(joinPath(packageDir, 'changelog.yml'), changelogTemplate); } -function createReadme(packageDir: string, integration: Integration) { - const readmeDirPath = joinPath(packageDir, '_dev/build/docs/'); - const mainReadmeDirPath = joinPath(packageDir, 'docs/'); - ensureDirSync(mainReadmeDirPath); - ensureDirSync(readmeDirPath); - const readmeTemplate = nunjucks.render('package_readme.md.njk', { - package_name: integration.name, - data_streams: integration.dataStreams, - }); - - createSync(joinPath(readmeDirPath, 'README.md'), readmeTemplate); - createSync(joinPath(mainReadmeDirPath, 'README.md'), readmeTemplate); -} - async function createZipArchive(workingDir: string, packageDirectoryName: string): Promise { const tmpPackageDir = joinPath(workingDir, packageDirectoryName); const zip = new AdmZip(); @@ -124,6 +121,12 @@ async function createZipArchive(workingDir: string, packageDirectoryName: string return buffer; } +function mergeAndSortFields(fields: Field[], dataStreamFields: Field[]): Field[] { + const mergedFields = [...fields, ...dataStreamFields]; + + return flattenObjectsList(mergedFields); +} + /* eslint-disable @typescript-eslint/naming-convention */ /** * Creates a package manifest dictionary. diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.test.ts b/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.test.ts index 550c6118636cc..0a269fa07a1c8 100644 --- a/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.test.ts +++ b/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.test.ts @@ -81,4 +81,16 @@ describe('createDataStream', () => { expect(render).toHaveBeenCalledWith(`filestream_manifest.yml.njk`, expect.anything()); expect(render).toHaveBeenCalledWith(`azure_eventhub_manifest.yml.njk`, expect.anything()); }); + + it('Should return the list of fields', async () => { + const fields = createDataStream(packageName, dataStreamPath, firstDataStream); + + expect(Array.isArray(fields)).toBe(true); + fields.forEach((field) => { + expect(field).toMatchObject({ + name: expect.any(String), + type: expect.any(String), + }); + }); + }); }); diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.ts b/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.ts index 02b3f12f53d68..d66ee1958b3ea 100644 --- a/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.ts +++ b/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.ts @@ -7,14 +7,16 @@ import nunjucks from 'nunjucks'; import { join as joinPath } from 'path'; +import { load } from 'js-yaml'; import type { DataStream } from '../../common'; -import { copySync, createSync, ensureDirSync, listDirSync } from '../util'; +import { copySync, createSync, ensureDirSync, listDirSync, readSync } from '../util'; +import { Field } from '../util/samples'; export function createDataStream( packageName: string, specificDataStreamDir: string, dataStream: DataStream -): void { +): Field[] { const dataStreamName = dataStream.name; const pipelineDir = joinPath(specificDataStreamDir, 'elasticsearch', 'ingest_pipeline'); const title = dataStream.title; @@ -23,7 +25,7 @@ export function createDataStream( const useMultilineNDJSON = samplesFormat.name === 'ndjson' && samplesFormat.multiline === true; ensureDirSync(specificDataStreamDir); - createDataStreamFolders(specificDataStreamDir, pipelineDir); + const fields = createDataStreamFolders(specificDataStreamDir, pipelineDir); createPipelineTests(specificDataStreamDir, dataStream.rawSamples, packageName, dataStreamName); const dataStreams: string[] = []; @@ -51,19 +53,34 @@ export function createDataStream( }); createSync(joinPath(specificDataStreamDir, 'manifest.yml'), finalManifest); + + return fields; +} + +function createDataStreamFolders(specificDataStreamDir: string, pipelineDir: string): Field[] { + ensureDirSync(pipelineDir); + return copyFilesFromTemplateDir(specificDataStreamDir); } -function createDataStreamFolders(specificDataStreamDir: string, pipelineDir: string): void { +function copyFilesFromTemplateDir(specificDataStreamDir: string): Field[] { const dataStreamTemplatesDir = joinPath(__dirname, '../templates/data_stream'); const items = listDirSync(dataStreamTemplatesDir); + return items.flatMap((item) => { + const sourcePath = joinPath(dataStreamTemplatesDir, item); + const destinationPath = joinPath(specificDataStreamDir, item); + copySync(sourcePath, destinationPath); + const files = listDirSync(sourcePath); - for (const item of items) { - const s = joinPath(dataStreamTemplatesDir, item); - const d = joinPath(specificDataStreamDir, item); - copySync(s, d); - } + return loadFieldsFromFiles(sourcePath, files); + }); +} - ensureDirSync(pipelineDir); +function loadFieldsFromFiles(sourcePath: string, files: string[]): Field[] { + return files.flatMap((file) => { + const filePath = joinPath(sourcePath, file); + const content = readSync(filePath); + return load(content) as Field[]; + }); } function createPipelineTests( diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/fields.test.ts b/x-pack/plugins/integration_assistant/server/integration_builder/fields.test.ts index a657f699cfff9..bb76577d64fd3 100644 --- a/x-pack/plugins/integration_assistant/server/integration_builder/fields.test.ts +++ b/x-pack/plugins/integration_assistant/server/integration_builder/fields.test.ts @@ -65,4 +65,38 @@ describe('createFieldMapping', () => { ); expect(createSync).toHaveBeenCalledWith(`${dataStreamPath}/fields/fields.yml`, expectedFields); }); + + it('Should return all fields flattened', async () => { + const docs: Docs = [ + { + key: 'foo', + anotherKey: 'bar', + }, + ]; + + const baseFields = `- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword +- name: "@timestamp" + type: date + description: Event timestamp. +`; + (render as jest.Mock).mockReturnValue(baseFields); + + const fieldsResult = createFieldMapping(packageName, dataStreamName, dataStreamPath, docs); + + expect(fieldsResult).toEqual([ + { + name: 'data_stream.type', + type: 'constant_keyword', + description: 'Data stream type.', + }, + { name: 'data_stream.dataset', type: 'constant_keyword' }, + { name: '@timestamp', type: 'date', description: 'Event timestamp.' }, + { name: 'key', type: 'keyword' }, + { name: 'anotherKey', type: 'keyword' }, + ]); + }); }); diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/fields.ts b/x-pack/plugins/integration_assistant/server/integration_builder/fields.ts index 79977ef2f3927..476bc0e74d697 100644 --- a/x-pack/plugins/integration_assistant/server/integration_builder/fields.ts +++ b/x-pack/plugins/integration_assistant/server/integration_builder/fields.ts @@ -6,7 +6,8 @@ */ import nunjucks from 'nunjucks'; - +import { load } from 'js-yaml'; +import { Field } from '../util/samples'; import { createSync, generateFields, mergeSamples } from '../util'; export function createFieldMapping( @@ -14,28 +15,33 @@ export function createFieldMapping( dataStreamName: string, specificDataStreamDir: string, docs: object[] -): void { +): Field[] { const dataStreamFieldsDir = `${specificDataStreamDir}/fields`; - createBaseFields(dataStreamFieldsDir, packageName, dataStreamName); - createCustomFields(dataStreamFieldsDir, docs); + const baseFields = createBaseFields(dataStreamFieldsDir, packageName, dataStreamName); + const customFields = createCustomFields(dataStreamFieldsDir, docs); + + return [...baseFields, ...customFields]; } function createBaseFields( dataStreamFieldsDir: string, packageName: string, dataStreamName: string -): void { +): Field[] { const datasetName = `${packageName}.${dataStreamName}`; const baseFields = nunjucks.render('base_fields.yml.njk', { module: packageName, dataset: datasetName, }); - createSync(`${dataStreamFieldsDir}/base-fields.yml`, baseFields); + + return load(baseFields) as Field[]; } -function createCustomFields(dataStreamFieldsDir: string, pipelineResults: object[]): void { +function createCustomFields(dataStreamFieldsDir: string, pipelineResults: object[]): Field[] { const mergedResults = mergeSamples(pipelineResults); const fieldKeys = generateFields(mergedResults); createSync(`${dataStreamFieldsDir}/fields.yml`, fieldKeys); + + return load(fieldKeys) as Field[]; } diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/readme_files.test.ts b/x-pack/plugins/integration_assistant/server/integration_builder/readme_files.test.ts new file mode 100644 index 0000000000000..ae9080fff8a74 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/integration_builder/readme_files.test.ts @@ -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 { testIntegration } from '../../__jest__/fixtures/build_integration'; +import { ensureDirSync, createSync } from '../util'; +import { configure } from 'nunjucks'; +import { join as joinPath } from 'path'; +import { createReadme } from './readme_files'; + +jest.mock('../util', () => ({ + ...jest.requireActual('../util'), + createSync: jest.fn(), + ensureDirSync: jest.fn(), +})); + +describe('createReadme', () => { + const integrationPath = 'path'; + + const templateDir = joinPath(__dirname, '../templates'); + configure([templateDir], { + autoescape: false, + }); + + beforeEach(async () => { + jest.clearAllMocks(); + }); + + it('Should create expected files', async () => { + const fields = [ + { + datastream: 'data_stream_1', + fields: [ + { + name: 'data_stream.type', + type: 'constant_keyword', + description: 'Data stream type.', + }, + { + name: 'data_stream.dataset', + type: 'constant_keyword', + description: 'Data stream dataset name.', + }, + { + name: 'event.dataset', + type: 'constant_keyword', + description: 'Event dataset', + value: 'package.datastream', + }, + { name: '@timestamp', type: 'date', description: 'Event timestamp.' }, + ], + }, + { + datastream: 'data_stream_2', + fields: [{ name: '@timestamp', type: 'date', description: 'Event timestamp.' }], + }, + ]; + + createReadme(integrationPath, testIntegration.name, fields); + + expect(createSync).toHaveBeenCalledWith( + `${integrationPath}/_dev/build/docs/README.md`, + expect.any(String) + ); + + // Docs files + expect(ensureDirSync).toHaveBeenCalledWith(`${integrationPath}/docs/`); + expect(createSync).toHaveBeenCalledWith( + `${integrationPath}/docs/README.md`, + expect.any(String) + ); + }); + + it('Should render a table per datastream with fields mapping in package readme', async () => { + const fields = [ + { + datastream: 'data_stream_1', + fields: [ + { + name: 'data_stream.type', + type: 'constant_keyword', + description: 'Data stream type.', + }, + { + name: 'data_stream.dataset', + type: 'constant_keyword', + }, + { + name: 'event.dataset', + type: 'constant_keyword', + description: 'Event dataset', + value: 'package.datastream', + }, + { name: '@timestamp', type: 'date', description: 'Event timestamp.' }, + ], + }, + { + datastream: 'data_stream_2', + fields: [{ name: '@timestamp', type: 'date', description: 'Event timestamp.' }], + }, + ]; + + createReadme(integrationPath, testIntegration.name, fields); + + const firstDatastreamFieldsDisplayed = ` +| Field | Description | Type | +|---|---|---| +| data_stream.type | Data stream type. | constant_keyword | +| data_stream.dataset | | constant_keyword | +| event.dataset | Event dataset | constant_keyword | +| @timestamp | Event timestamp. | date | +`; + + const secondDatastreamFieldsDisplayed = ` +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +`; + + expect(createSync).toHaveBeenCalledWith( + `${integrationPath}/docs/README.md`, + expect.stringContaining(firstDatastreamFieldsDisplayed) + ); + + expect(createSync).toHaveBeenCalledWith( + `${integrationPath}/docs/README.md`, + expect.stringContaining(secondDatastreamFieldsDisplayed) + ); + }); + + it('Should not render a fields mapping table in build readme', async () => { + const fields = [ + { + datastream: 'data_stream_1', + fields: [{ name: '@timestamp', type: 'date', description: 'Event timestamp.' }], + }, + ]; + + createReadme(integrationPath, testIntegration.name, fields); + + expect(createSync).toHaveBeenCalledWith( + `${integrationPath}/_dev/build/docs/README.md`, + expect.stringContaining('{{fields "data_stream_1"}}') + ); + }); + + it('Should render a formatted table per datastream with fields mapping in package readme', async () => { + const fields = [ + { + datastream: 'data_stream_1', + fields: [ + { + name: 'data_stream.type', + type: 'constant_keyword', + description: 'Data stream type.\n', + }, + { + name: 'data_stream.dataset', + type: 'constant_keyword', + }, + ], + }, + ]; + + createReadme(integrationPath, testIntegration.name, fields); + + const firstDatastreamFieldsDisplayed = ` +| Field | Description | Type | +|---|---|---| +| data_stream.type | Data stream type. | constant_keyword | +| data_stream.dataset | | constant_keyword | +`; + + expect(createSync).toHaveBeenCalledWith( + `${integrationPath}/docs/README.md`, + expect.stringContaining(firstDatastreamFieldsDisplayed) + ); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/readme_files.ts b/x-pack/plugins/integration_assistant/server/integration_builder/readme_files.ts new file mode 100644 index 0000000000000..163b2b04b52f9 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/integration_builder/readme_files.ts @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import nunjucks from 'nunjucks'; + +import { join as joinPath } from 'path'; +import { createSync, ensureDirSync } from '../util'; + +export function createReadme(packageDir: string, integrationName: string, fields: object[]) { + createPackageReadme(packageDir, integrationName, fields); + createBuildReadme(packageDir, integrationName, fields); +} + +function createPackageReadme(packageDir: string, integrationName: string, fields: object[]) { + const dirPath = joinPath(packageDir, 'docs/'); + createReadmeFile(dirPath, 'package_readme.md.njk', integrationName, fields); +} + +function createBuildReadme(packageDir: string, integrationName: string, fields: object[]) { + const dirPath = joinPath(packageDir, '_dev/build/docs/'); + createReadmeFile(dirPath, 'build_readme.md.njk', integrationName, fields); +} + +function createReadmeFile( + targetDir: string, + templateName: string, + integrationName: string, + fields: object[] +) { + ensureDirSync(targetDir); + + const template = nunjucks.render(templateName, { + package_name: integrationName, + fields, + }); + + createSync(joinPath(targetDir, 'README.md'), template); +} diff --git a/x-pack/plugins/integration_assistant/server/templates/build_readme.md.njk b/x-pack/plugins/integration_assistant/server/templates/build_readme.md.njk new file mode 100644 index 0000000000000..e23fa4af9efe8 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/build_readme.md.njk @@ -0,0 +1,8 @@ +{% include "readme.njk" %} +{% for data_stream in fields %} +### {{ data_stream.datastream }} + +Insert a description of the datastream here. + +{% raw %}{{fields {% endraw %}"{{ data_stream.datastream }}"{% raw %}}}{% endraw %} +{% endfor %} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/package_readme.md.njk b/x-pack/plugins/integration_assistant/server/templates/package_readme.md.njk index 02bf606ab386a..b47e3491b5bc2 100644 --- a/x-pack/plugins/integration_assistant/server/templates/package_readme.md.njk +++ b/x-pack/plugins/integration_assistant/server/templates/package_readme.md.njk @@ -1,38 +1,17 @@ -# {{ package_name }} Integration +{% include "readme.njk" %} +{% for data_stream in fields %} +### {{ data_stream.datastream }} -## Overview - -Explain what the integration is, define the third-party product that is providing data, establish its relationship to the larger ecosystem of Elastic products, and help the reader understand how it can be used to solve a tangible problem. -Check the [overview guidelines](https://www.elastic.co/guide/en/integrations-developer/current/documentation-guidelines.html#idg-docs-guidelines-overview) for more information. - -## Datastreams - -Provide a high-level overview of the kind of data that is collected by the integration. -Check the [datastreams guidelines](https://www.elastic.co/guide/en/integrations-developer/current/documentation-guidelines.html#idg-docs-guidelines-datastreams) for more information. - -## Requirements - -The requirements section helps readers to confirm that the integration will work with their systems. -Check the [requirements guidelines](https://www.elastic.co/guide/en/integrations-developer/current/documentation-guidelines.html#idg-docs-guidelines-requirements) for more information. - -## Setup - -Point the reader to the [Observability Getting started guide](https://www.elastic.co/guide/en/observability/master/observability-get-started.html) for generic, step-by-step instructions. Include any additional setup instructions beyond what’s included in the guide, which may include instructions to update the configuration of a third-party service. -Check the [setup guidelines](https://www.elastic.co/guide/en/integrations-developer/current/documentation-guidelines.html#idg-docs-guidelines-setup) for more information. - -## Troubleshooting (optional) - -Provide information about special cases and exceptions that aren’t necessary for getting started or won’t be applicable to all users. Check the [troubleshooting guidelines](https://www.elastic.co/guide/en/integrations-developer/current/documentation-guidelines.html#idg-docs-guidelines-troubleshooting) for more information. - -## Reference +Insert a description of the datastream here. -Provide detailed information about the log or metric types we support within the integration. Check the [reference guidelines](https://www.elastic.co/guide/en/integrations-developer/current/documentation-guidelines.html#idg-docs-guidelines-reference) for more information. +**ECS Field Reference** -## Logs -{% for data_stream in data_streams %} -### {{ data_stream.name }} +Please refer to the following [document](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for detailed information on ECS fields. -Insert a description of the datastream here. +**Exported fields** -{% raw %}{{fields {% endraw %}"{{ data_stream.name }}"{% raw %}}}{% endraw %} +| Field | Description | Type | +|---|---|---| +{% for field in data_stream.fields %}| {{ field.name }} | {{ field.description | default('') | replace('\n', ' ') | trim }} | {{ field.type }} | {% endfor %} +{% endfor %} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/readme.njk b/x-pack/plugins/integration_assistant/server/templates/readme.njk new file mode 100644 index 0000000000000..91c1bf6f1b40c --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/readme.njk @@ -0,0 +1,31 @@ +# {{ package_name }} Integration + +## Overview + +Explain what the integration is, define the third-party product that is providing data, establish its relationship to the larger ecosystem of Elastic products, and help the reader understand how it can be used to solve a tangible problem. +Check the [overview guidelines](https://www.elastic.co/guide/en/integrations-developer/current/documentation-guidelines.html#idg-docs-guidelines-overview) for more information. + +## Datastreams + +Provide a high-level overview of the kind of data that is collected by the integration. +Check the [datastreams guidelines](https://www.elastic.co/guide/en/integrations-developer/current/documentation-guidelines.html#idg-docs-guidelines-datastreams) for more information. + +## Requirements + +The requirements section helps readers to confirm that the integration will work with their systems. +Check the [requirements guidelines](https://www.elastic.co/guide/en/integrations-developer/current/documentation-guidelines.html#idg-docs-guidelines-requirements) for more information. + +## Setup + +Point the reader to the [Observability Getting started guide](https://www.elastic.co/guide/en/observability/master/observability-get-started.html) for generic, step-by-step instructions. Include any additional setup instructions beyond what’s included in the guide, which may include instructions to update the configuration of a third-party service. +Check the [setup guidelines](https://www.elastic.co/guide/en/integrations-developer/current/documentation-guidelines.html#idg-docs-guidelines-setup) for more information. + +## Troubleshooting (optional) + +Provide information about special cases and exceptions that aren’t necessary for getting started or won’t be applicable to all users. Check the [troubleshooting guidelines](https://www.elastic.co/guide/en/integrations-developer/current/documentation-guidelines.html#idg-docs-guidelines-troubleshooting) for more information. + +## Reference + +Provide detailed information about the log or metric types we support within the integration. Check the [reference guidelines](https://www.elastic.co/guide/en/integrations-developer/current/documentation-guidelines.html#idg-docs-guidelines-reference) for more information. + +## Logs \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/util/samples.test.ts b/x-pack/plugins/integration_assistant/server/util/samples.test.ts index 131135e842334..f87f9a96ca2c0 100644 --- a/x-pack/plugins/integration_assistant/server/util/samples.test.ts +++ b/x-pack/plugins/integration_assistant/server/util/samples.test.ts @@ -5,7 +5,164 @@ * 2.0. */ -import { merge } from './samples'; +import { flattenObjectsList, merge } from './samples'; + +describe('flattenObjectsList', () => { + it('Should return a list with flattened key/value entries', async () => { + const result = flattenObjectsList([ + { + name: 'a', + type: 'group', + fields: [ + { + name: 'b', + type: 'keyword', + description: 'Some description for b', + }, + { + name: 'c', + type: 'group', + fields: [ + { + name: 'd', + type: 'keyword', + }, + { + name: 'e', + description: 'Some description for e', + type: 'keyword', + }, + ], + }, + ], + }, + ]); + + expect(result).toEqual([ + { + name: 'a.b', + type: 'keyword', + description: 'Some description for b', + }, + { + name: 'a.c.d', + type: 'keyword', + description: undefined, + }, + { + name: 'a.c.e', + type: 'keyword', + description: 'Some description for e', + }, + ]); + }); + + it('Should return an empty list if passed an empty list', async () => { + const result = flattenObjectsList([]); + + expect(result).toEqual([]); + }); + + it('Should return a list with key/value entries', async () => { + const result = flattenObjectsList([ + { + name: 'a', + type: 'keyword', + description: 'Some description for a', + }, + ]); + + expect(result).toEqual([ + { + name: 'a', + type: 'keyword', + description: 'Some description for a', + }, + ]); + }); + + it('Should return an sorted list of key/value entries', async () => { + const result = flattenObjectsList([ + { + name: 'c', + type: 'group', + fields: [ + { + name: 'b', + type: 'keyword', + description: 'Some description for b', + }, + { + name: 'a', + type: 'group', + fields: [ + { + name: 'e', + type: 'keyword', + description: 'Some description for e', + }, + { + name: 'd', + type: 'keyword', + }, + ], + }, + ], + }, + ]); + + expect(result).toEqual([ + { + name: 'c.a.d', + type: 'keyword', + description: undefined, + }, + { + name: 'c.a.e', + type: 'keyword', + description: 'Some description for e', + }, + { + name: 'c.b', + type: 'keyword', + description: 'Some description for b', + }, + ]); + }); + + it('Should not error if group type is not an array', async () => { + const result = flattenObjectsList([ + { + name: 'a', + type: 'group', + fields: [ + { + name: 'b', + type: 'keyword', + description: 'Some description for b', + }, + { + name: 'c', + type: 'group', + }, + ], + }, + ]); + + expect(result).toEqual([ + { + name: 'a.b', + type: 'keyword', + description: 'Some description for b', + }, + { + name: 'a.c', + type: 'group', + description: undefined, + }, + ]); + }); +}); describe('merge', () => { it('Should return source if target is empty', async () => { diff --git a/x-pack/plugins/integration_assistant/server/util/samples.ts b/x-pack/plugins/integration_assistant/server/util/samples.ts index a29813c1643f8..6993e87a774e9 100644 --- a/x-pack/plugins/integration_assistant/server/util/samples.ts +++ b/x-pack/plugins/integration_assistant/server/util/samples.ts @@ -18,9 +18,10 @@ interface NewObj { }; } -interface Field { +export interface Field { name: string; type: string; + description?: string; fields?: Field[]; } @@ -233,3 +234,43 @@ export function mergeSamples(objects: any[]): string { return JSON.stringify(result, null, 2); } + +export function flattenObjectsList( + obj: Field[] +): Array<{ name: string; type: string; description?: string }> { + const result: Array<{ name: string; type: string; description?: string }> = []; + flattenObject(obj, '', '.', result); + + return sortArrayOfObjects(result); +} + +function flattenObject( + obj: Field[], + parentKey: string = '', + separator: string = '.', + result: Array<{ name: string; type: string; description?: string }> +): void { + obj.forEach((element) => { + if (element.name) { + const newKey = parentKey ? `${parentKey}${separator}${element.name}` : element.name; + + if (element.fields && Array.isArray(element.fields)) { + flattenObject(element.fields, newKey, separator, result); + } else { + result.push({ + name: newKey, + type: element.type, + description: element.description, + }); + } + } + }); +} + +function sortArrayOfObjects( + objectsArray: Array<{ name: string; type: string; description?: string }> +): Array<{ name: string; type: string; description?: string }> { + return objectsArray.sort((a, b) => { + return a.name.localeCompare(b.name); + }); +} From 896dce358c05d6553ac184abae2164a907447c31 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Mon, 30 Sep 2024 18:09:52 +0200 Subject: [PATCH 31/60] [SLOs] Update API docs for group-by field !! (#194393) ## Summary Update API docs for group-by field !! --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../output/kibana.serverless.staging.yaml | 29 +++++++++----- oas_docs/output/kibana.serverless.yaml | 29 +++++++++----- oas_docs/output/kibana.staging.yaml | 29 +++++++++----- oas_docs/output/kibana.yaml | 29 +++++++++----- .../slo/docs/openapi/slo/bundled.json | 40 ++++++++++++++----- .../slo/docs/openapi/slo/bundled.yaml | 27 ++++++++----- .../schemas/create_slo_request.yaml | 4 +- .../slo/components/schemas/group_by.yaml | 11 +++++ .../schemas/slo_definition_response.yaml | 6 +-- .../schemas/slo_with_summary_response.yaml | 6 +-- .../schemas/update_slo_request.yaml | 2 + 11 files changed, 147 insertions(+), 65 deletions(-) create mode 100644 x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/group_by.yaml diff --git a/oas_docs/output/kibana.serverless.staging.yaml b/oas_docs/output/kibana.serverless.staging.yaml index cf5cdbac0e9a4..a5d53bd71cc83 100644 --- a/oas_docs/output/kibana.serverless.staging.yaml +++ b/oas_docs/output/kibana.serverless.staging.yaml @@ -32014,9 +32014,7 @@ components: description: A description for the SLO. type: string groupBy: - description: optional group by field to use to generate an SLO per distinct value - example: some.field - type: string + $ref: '#/components/schemas/SLOs_group_by' id: description: >- A optional and unique identifier for the SLO. Must be between 8 and @@ -32175,6 +32173,21 @@ components: type: number title: Find SLO response type: object + SLOs_group_by: + description: >- + optional group by field or fields to use to generate an SLO per distinct + value + example: + - - service.name + - service.name + - - service.name + - service.environment + oneOf: + - type: string + - items: + type: string + type: array + title: Group by SLOs_indicator_properties_apm_availability: description: Defines properties for the APM availability indicator type type: object @@ -32765,9 +32778,7 @@ components: example: true type: boolean groupBy: - description: optional group by field to use to generate an SLO per distinct value - example: some.field - type: string + $ref: '#/components/schemas/SLOs_group_by' id: description: The identifier of the SLO. example: 8853df00-ae2e-11ed-90af-09bb6422b258 @@ -32851,9 +32862,7 @@ components: example: true type: boolean groupBy: - description: optional group by field to use to generate an SLO per distinct value - example: some.field - type: string + $ref: '#/components/schemas/SLOs_group_by' id: description: The identifier of the SLO. example: 8853df00-ae2e-11ed-90af-09bb6422b258 @@ -33074,6 +33083,8 @@ components: description: description: A description for the SLO. type: string + groupBy: + $ref: '#/components/schemas/SLOs_group_by' indicator: oneOf: - $ref: '#/components/schemas/SLOs_indicator_properties_custom_kql' diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index 675e8c0903b2f..93c3a5533c8a0 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -15304,9 +15304,7 @@ components: description: A description for the SLO. type: string groupBy: - description: optional group by field to use to generate an SLO per distinct value - example: some.field - type: string + $ref: '#/components/schemas/SLOs_group_by' id: description: >- A optional and unique identifier for the SLO. Must be between 8 and @@ -15465,6 +15463,21 @@ components: type: number title: Find SLO response type: object + SLOs_group_by: + description: >- + optional group by field or fields to use to generate an SLO per distinct + value + example: + - - service.name + - service.name + - - service.name + - service.environment + oneOf: + - type: string + - items: + type: string + type: array + title: Group by SLOs_indicator_properties_apm_availability: description: Defines properties for the APM availability indicator type type: object @@ -16055,9 +16068,7 @@ components: example: true type: boolean groupBy: - description: optional group by field to use to generate an SLO per distinct value - example: some.field - type: string + $ref: '#/components/schemas/SLOs_group_by' id: description: The identifier of the SLO. example: 8853df00-ae2e-11ed-90af-09bb6422b258 @@ -16141,9 +16152,7 @@ components: example: true type: boolean groupBy: - description: optional group by field to use to generate an SLO per distinct value - example: some.field - type: string + $ref: '#/components/schemas/SLOs_group_by' id: description: The identifier of the SLO. example: 8853df00-ae2e-11ed-90af-09bb6422b258 @@ -16364,6 +16373,8 @@ components: description: description: A description for the SLO. type: string + groupBy: + $ref: '#/components/schemas/SLOs_group_by' indicator: oneOf: - $ref: '#/components/schemas/SLOs_indicator_properties_custom_kql' diff --git a/oas_docs/output/kibana.staging.yaml b/oas_docs/output/kibana.staging.yaml index c70f9b4bce454..96352fc0cd962 100644 --- a/oas_docs/output/kibana.staging.yaml +++ b/oas_docs/output/kibana.staging.yaml @@ -40005,9 +40005,7 @@ components: description: A description for the SLO. type: string groupBy: - description: optional group by field to use to generate an SLO per distinct value - example: some.field - type: string + $ref: '#/components/schemas/SLOs_group_by' id: description: >- A optional and unique identifier for the SLO. Must be between 8 and @@ -40166,6 +40164,21 @@ components: type: number title: Find SLO response type: object + SLOs_group_by: + description: >- + optional group by field or fields to use to generate an SLO per distinct + value + example: + - - service.name + - service.name + - - service.name + - service.environment + oneOf: + - type: string + - items: + type: string + type: array + title: Group by SLOs_indicator_properties_apm_availability: description: Defines properties for the APM availability indicator type type: object @@ -40756,9 +40769,7 @@ components: example: true type: boolean groupBy: - description: optional group by field to use to generate an SLO per distinct value - example: some.field - type: string + $ref: '#/components/schemas/SLOs_group_by' id: description: The identifier of the SLO. example: 8853df00-ae2e-11ed-90af-09bb6422b258 @@ -40842,9 +40853,7 @@ components: example: true type: boolean groupBy: - description: optional group by field to use to generate an SLO per distinct value - example: some.field - type: string + $ref: '#/components/schemas/SLOs_group_by' id: description: The identifier of the SLO. example: 8853df00-ae2e-11ed-90af-09bb6422b258 @@ -41065,6 +41074,8 @@ components: description: description: A description for the SLO. type: string + groupBy: + $ref: '#/components/schemas/SLOs_group_by' indicator: oneOf: - $ref: '#/components/schemas/SLOs_indicator_properties_custom_kql' diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index 947ae1155041f..6d53cb1a38bdd 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -22291,9 +22291,7 @@ components: description: A description for the SLO. type: string groupBy: - description: optional group by field to use to generate an SLO per distinct value - example: some.field - type: string + $ref: '#/components/schemas/SLOs_group_by' id: description: >- A optional and unique identifier for the SLO. Must be between 8 and @@ -22452,6 +22450,21 @@ components: type: number title: Find SLO response type: object + SLOs_group_by: + description: >- + optional group by field or fields to use to generate an SLO per distinct + value + example: + - - service.name + - service.name + - - service.name + - service.environment + oneOf: + - type: string + - items: + type: string + type: array + title: Group by SLOs_indicator_properties_apm_availability: description: Defines properties for the APM availability indicator type type: object @@ -23042,9 +23055,7 @@ components: example: true type: boolean groupBy: - description: optional group by field to use to generate an SLO per distinct value - example: some.field - type: string + $ref: '#/components/schemas/SLOs_group_by' id: description: The identifier of the SLO. example: 8853df00-ae2e-11ed-90af-09bb6422b258 @@ -23128,9 +23139,7 @@ components: example: true type: boolean groupBy: - description: optional group by field to use to generate an SLO per distinct value - example: some.field - type: string + $ref: '#/components/schemas/SLOs_group_by' id: description: The identifier of the SLO. example: 8853df00-ae2e-11ed-90af-09bb6422b258 @@ -23351,6 +23360,8 @@ components: description: description: A description for the SLO. type: string + groupBy: + $ref: '#/components/schemas/SLOs_group_by' indicator: oneOf: - $ref: '#/components/schemas/SLOs_indicator_properties_custom_kql' diff --git a/x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.json b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.json index 7e28ae729cc46..b8d3e28ce210a 100644 --- a/x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.json +++ b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.json @@ -1738,6 +1738,31 @@ } } }, + "group_by": { + "title": "Group by", + "description": "optional group by field or fields to use to generate an SLO per distinct value", + "example": [ + [ + "service.name" + ], + "service.name", + [ + "service.name", + "service.environment" + ] + ], + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, "slo_with_summary_response": { "title": "SLO response", "type": "object", @@ -1835,9 +1860,7 @@ "example": true }, "groupBy": { - "description": "optional group by field to use to generate an SLO per distinct value", - "type": "string", - "example": "some.field" + "$ref": "#/components/schemas/group_by" }, "instanceId": { "description": "the value derived from the groupBy field, if present, otherwise '*'", @@ -2046,9 +2069,7 @@ "$ref": "#/components/schemas/settings" }, "groupBy": { - "description": "optional group by field to use to generate an SLO per distinct value", - "type": "string", - "example": "some.field" + "$ref": "#/components/schemas/group_by" }, "tags": { "description": "List of tags", @@ -2142,6 +2163,9 @@ "settings": { "$ref": "#/components/schemas/settings" }, + "groupBy": { + "$ref": "#/components/schemas/group_by" + }, "tags": { "description": "List of tags", "type": "array", @@ -2243,9 +2267,7 @@ "example": true }, "groupBy": { - "description": "optional group by field to use to generate an SLO per distinct value", - "type": "string", - "example": "some.field" + "$ref": "#/components/schemas/group_by" }, "tags": { "description": "List of tags", diff --git a/x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml index 0426d2d03bc89..dc57f3e4ea4f6 100644 --- a/x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml +++ b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml @@ -1204,6 +1204,19 @@ components: example: 0.9836 errorBudget: $ref: '#/components/schemas/error_budget' + group_by: + title: Group by + description: optional group by field or fields to use to generate an SLO per distinct value + example: + - - service.name + - service.name + - - service.name + - service.environment + oneOf: + - type: string + - type: array + items: + type: string slo_with_summary_response: title: SLO response type: object @@ -1274,9 +1287,7 @@ components: type: boolean example: true groupBy: - description: optional group by field to use to generate an SLO per distinct value - type: string - example: some.field + $ref: '#/components/schemas/group_by' instanceId: description: the value derived from the groupBy field, if present, otherwise '*' type: string @@ -1425,9 +1436,7 @@ components: settings: $ref: '#/components/schemas/settings' groupBy: - description: optional group by field to use to generate an SLO per distinct value - type: string - example: some.field + $ref: '#/components/schemas/group_by' tags: description: List of tags type: array @@ -1487,6 +1496,8 @@ components: $ref: '#/components/schemas/objective' settings: $ref: '#/components/schemas/settings' + groupBy: + $ref: '#/components/schemas/group_by' tags: description: List of tags type: array @@ -1558,9 +1569,7 @@ components: type: boolean example: true groupBy: - description: optional group by field to use to generate an SLO per distinct value - type: string - example: some.field + $ref: '#/components/schemas/group_by' tags: description: List of tags type: array diff --git a/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/create_slo_request.yaml b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/create_slo_request.yaml index c3a848fe52133..292836da1c535 100644 --- a/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/create_slo_request.yaml +++ b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/create_slo_request.yaml @@ -37,9 +37,7 @@ properties: settings: $ref: "settings.yaml" groupBy: - description: optional group by field to use to generate an SLO per distinct value - type: string - example: "some.field" + $ref: "group_by.yaml" tags: description: List of tags type: array diff --git a/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/group_by.yaml b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/group_by.yaml new file mode 100644 index 0000000000000..6870d539c17ee --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/group_by.yaml @@ -0,0 +1,11 @@ +title: Group by +description: optional group by field or fields to use to generate an SLO per distinct value +example: + - [ "service.name" ] + - service.name + - [ "service.name", "service.environment" ] +oneOf: + - type: string + - type: array + items: + type: string diff --git a/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/slo_definition_response.yaml b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/slo_definition_response.yaml index 0b4ffa774d10f..430b105eb32fc 100644 --- a/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/slo_definition_response.yaml +++ b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/slo_definition_response.yaml @@ -63,9 +63,7 @@ properties: type: boolean example: true groupBy: - description: optional group by field to use to generate an SLO per distinct value - type: string - example: "some.field" + $ref: "group_by.yaml" tags: description: List of tags type: array @@ -82,4 +80,4 @@ properties: version: description: The internal SLO version type: number - example: 2 \ No newline at end of file + example: 2 diff --git a/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/slo_with_summary_response.yaml b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/slo_with_summary_response.yaml index df8e35996feb3..3da2423acb154 100644 --- a/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/slo_with_summary_response.yaml +++ b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/slo_with_summary_response.yaml @@ -67,9 +67,7 @@ properties: type: boolean example: true groupBy: - description: optional group by field to use to generate an SLO per distinct value - type: string - example: "some.field" + $ref: "group_by.yaml" instanceId: description: the value derived from the groupBy field, if present, otherwise '*' type: string @@ -90,4 +88,4 @@ properties: version: description: The internal SLO version type: number - example: 2 \ No newline at end of file + example: 2 diff --git a/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/update_slo_request.yaml b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/update_slo_request.yaml index 8d2c61c7b2249..95603878e8e99 100644 --- a/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/update_slo_request.yaml +++ b/x-pack/plugins/observability_solution/slo/docs/openapi/slo/components/schemas/update_slo_request.yaml @@ -26,6 +26,8 @@ properties: $ref: "objective.yaml" settings: $ref: "settings.yaml" + groupBy: + $ref: "group_by.yaml" tags: description: List of tags type: array From 5def848d2cee99e337a46f57893c14be1d1c7052 Mon Sep 17 00:00:00 2001 From: Vadim Kibana <82822460+vadimkibana@users.noreply.github.com> Date: Mon, 30 Sep 2024 18:14:58 +0200 Subject: [PATCH 32/60] [ES|QL] AST package documentation (#194296) Updates documentation for the ES|QL AST package. --- packages/kbn-esql-ast/README.md | 97 ++------- packages/kbn-esql-ast/src/builder/README.md | 39 ++++ packages/kbn-esql-ast/src/parser/README.md | 144 ++++++++++++- .../kbn-esql-ast/src/pretty_print/README.md | 76 ++++++- packages/kbn-esql-ast/src/visitor/README.md | 202 +++++++++++++++++- packages/kbn-esql-ast/src/walker/README.md | 125 ++++++++--- 6 files changed, 575 insertions(+), 108 deletions(-) create mode 100644 packages/kbn-esql-ast/src/builder/README.md diff --git a/packages/kbn-esql-ast/README.md b/packages/kbn-esql-ast/README.md index 76232d371b9cb..f7be5248f2ca0 100644 --- a/packages/kbn-esql-ast/README.md +++ b/packages/kbn-esql-ast/README.md @@ -1,89 +1,38 @@ -# ES|QL utility library +# ES|QL AST library -## Folder structure +The general idea of this package is to provide low-level ES|QL parsing, +building, traversal, pretty-printing, and manipulation features on top of a +custom compact AST representation, which is designed to be resilient to many +grammar changes. -This library brings all the foundation data structure to enable all advanced features within an editor for ES|QL as validation, autocomplete, hover, etc... -The package is structure as follow: +Contents of this package: -``` -src - |- antlr // => contains the ES|QL grammar files and various compilation assets - | ast_factory.ts // => binding to the Antlr that generates the AST data structure - | ast_errors.ts // => error translation utility from raw Antlr to something understandable (somewhat) - | antlr_error_listener.ts // => The ES|QL syntax error listener - | antlr_facade.ts // => getParser and getLexer utilities - | ... // => miscellaneas utilities to work with AST -``` - -### Basic usage - -#### Get AST from a query string +- [`builder` — Contains the `Builder` class for AST node construction](./src/builder/README.md). +- [`parser` — Contains text to ES|QL AST parsing code](./src/parser/README.md). +- [`walker` — Contains the ES|QL AST `Walker` utility](./src/walker/README.md). +- [`visitor` — Contains the ES|QL AST `Visitor` utility](./src/visitor/README.md). +- [`pretty_print` — Contains code for formatting AST to text](./src/pretty_print/README.md). -This module contains the entire logic to translate from a query string into the AST data structure. -The `getAstAndSyntaxErrors` function returns the AST data structure, unless a syntax error happens in which case the `errors` array gets populated with a Syntax error. -##### Usage +## Demo -```js -import { getAstAndSyntaxErrors } from '@kbn/esql-ast'; +Much of the functionality of this package is demonstrated in the demo UI. You +can run it in Storybook, using the following command: -const queryString = "from index | stats 1 + avg(myColumn) "; -const { ast, errors} = await astProvider(queryString); - -if(errors){ - console.log({ syntaxErrors: errors }); -} -// do stuff with the ast +```bash +yarn storybook esql_ast_inspector ``` -## How does it work - -The general idea of this package is to provide all ES|QL features on top of a custom compact AST definition (all data structure types defined in `./types.ts`) which is designed to be resilient to many grammar changes. -The pipeline is the following: +Alternatively, you can start Kibana with *Example Plugins* enabled, using: +```bash +yarn start --run-examples ``` -Antlr grammar files -=> Compiled grammar files (.ts assets in the antlr folder) -=> AST Factory (Antlr Parser tree => custom AST) -``` - -Each feature function works with the combination of the AST and the definition files: the former describe the current statement in a easy to traverse way, while the definitions describe what's the expected behaviour of each node in the AST node (i.e. what arguments should it accept? How many arguments? etc...). -While AST requires the grammar to be compiled to be updated, definitions are static files which can be dynamically updated without running the ANTLR compile task. - -#### AST - -The AST is generated by 2 files: `ast_factory.ts` and its buddy `ast_walker.ts`: -* `ast_factory.ts` is a binding to Antlr and access the Parser tree -* Parser tree is passed over to `ast_walker` to append new AST nodes - -In general Antlr is resilient to grammar errors, in the sense that it can produe a Parser tree up to the point of the error, then stops. This is useful to perform partial tasks even with broken queries and this means that a partial AST can be produced even with an invalid query. - -### Keeping ES|QL up to date - -In general when operating on changes here use the `yarn kbn watch` in a terminal window to make sure changes are correctly compiled. - -### How to add new commands/options -When a new command/option is added to ES|QL it is done via a grammar update. -Therefore adding them requires a two step phase: -* Update the grammar with the new one - * add/fix all AST generator bindings in case of new/changed TOKENS in the `lexer` grammar file -* Update the definition files for commands/options +Then navigate to the *ES|QL AST Inspector* plugin in the Kibana UI. -To update the grammar: -1. Make sure the `lexer` and `parser` files are up to date with their ES counterparts - * an existing Kibana CI job is updating them already automatically -2. Run the script into the `package.json` to compile the ES|QL grammar. -3. open the `ast_factory.ts` file and add a new `exit` method -4. write some code in the `ast_walker/ts` to translate the Antlr Parser tree into the custom AST (there are already few utilites for that, but sometimes it is required to write some more code if the `parser` introduced a new flow) - * pro tip: use the `http://lab.antlr.org/` to visualize/debug the parser tree for a given statement (copy and paste the grammar files there) -5. if something goes wrong with new quoted/unquoted identifier token, open the `ast_helpers.ts` and check the ids of the new tokens in the `getQuotedText` and `getUnquotedText` functions - please make sure to leave a comment on the token name -#### Debug and fix grammar changes (tokens, etc...) +## Keeping ES|QL AST library up to date -On TOKEN renaming or with subtle `lexer` grammar changes it can happens that test breaks, this can be happen for two main issues: -* A TOKEN name changed so the `ast_walker.ts` doesn't find it any more. Go there and rename the TOKEN name. -* TOKEN order changed and tests started failing. This probably generated some TOKEN id reorder and there are two functions in `ast_helpers.ts` who rely on hardcoded ids: `getQuotedText` and `getUnquotedText`. - * Note that the `getQuotedText` and `getUnquotedText` are automatically updated on grammar changes detected by the Kibana CI sync job. - * to fix this just look at the commented tokens and update the ids. If a new token add it and leave a comment to point to the new token name. - * This choice was made to reduce the bundle size, as importing the `esql_parser` adds some hundreds of Kbs to the bundle otherwise. \ No newline at end of file +In general when operating on changes here use the `yarn kbn watch` in a terminal +window to make sure changes are correctly compiled. diff --git a/packages/kbn-esql-ast/src/builder/README.md b/packages/kbn-esql-ast/src/builder/README.md new file mode 100644 index 0000000000000..8b874579dab29 --- /dev/null +++ b/packages/kbn-esql-ast/src/builder/README.md @@ -0,0 +1,39 @@ +# Builder + +Contains the `Builder` class for AST node construction. It provides the most +low-level stateless AST node construction API. + +The `Builder` API can be used when constructing AST nodes from scratch manually, +and it is also used by the parser to construct the AST nodes during the parsing +process. + +When parsing the AST nodes will typically have more information, such as the +position in the source code, and other metadata. When constructing the AST nodes +manually, this information is not available, but the `Builder` API can still be +used as it permits to skip the metadata. + + +## Usage + +Construct a `literal` expression node: + +```typescript +import { Builder } from '@kbn/esql-ast'; + +const node = Builder.expression.literal.numeric({ value: 42, literalType: 'integer' }); +``` + +Returns: + +```js +{ + type: 'literal', + literalType: 'integer', + value: 42, + name: '42', + + location: { min: 0, max: 0 }, + text: '', + incomplete: false, +} +``` diff --git a/packages/kbn-esql-ast/src/parser/README.md b/packages/kbn-esql-ast/src/parser/README.md index 1500be94c40c8..e054c8999714c 100644 --- a/packages/kbn-esql-ast/src/parser/README.md +++ b/packages/kbn-esql-ast/src/parser/README.md @@ -1,6 +1,91 @@ +# ES|QL Parser + +The Kibana ES|QL parser uses the ANTLR library for lexing and parse tree (CST) +generation. The ANTLR grammar is imported from the Elasticsearch repository in +an automated CI job. + +We use the ANTLR outputs: (1) the token stream; and (2) the parse tree to +generate (1) the Abstract Syntax Tree (AST), (2) for syntax validation, (3) for +syntax highlighting, and (4) for formatting (comment and whitespace) extraction +and assignment to AST nodes. + +In general ANTLR is resilient to grammar errors, in the sense that it can +produce a Parser tree up to the point of the error, then stops. This is useful +to perform partial tasks even with broken queries and this means that a partial +AST can be produced even with an invalid query. + + +## Folder structure + +The parser is structured as follows: + +``` +src/ +|- parser/ Contains the logic to parse the ES|QL query and generate the AST. +| |- factories.ts Contains AST node factories. +| |- antlr_error_listener.ts Contains code which traverses ANTLR CST and collects syntax errors. +| |- esql_ast_builder_listener.ts Contains code which traverses ANTLR CST and builds the AST. +| +|- antlr/ Contains the autogenerated ES|QL ANTLR grammar files and various compilation assets. + |- esql_lexer.g4 Contains the ES|QL ANTLR lexer grammar. + |- esql_parser.g4 Contains the ES|QL ANTLR parser grammar. +``` + + +## Usage + +### Get AST from a query string + +The `parse` function returns the AST data structure, unless a syntax error +happens in which case the `errors` array gets populated with a Syntax errors. + +```js +import { parse } from '@kbn/esql-ast'; + +const src = "FROM index | STATS 1 + AVG(myColumn) "; +const { root, errors } = await parse(src); + +if(errors){ + console.log({ syntaxErrors: errors }); +} + +// do stuff with the ast +``` + +The `root` is the root node of the AST. The AST is a tree structure where each +node represents a part of the query. Each node has a `type` property which +indicates the type of the node. + + +### Parse a query and populate the AST with comments + +When calling the `parse` method with the `withFormatting` flag set to `true`, +the AST will be populated with comments. + +```js +import { parse } from '@kbn/esql-ast'; + +const src = "FROM /* COMMENT */ index"; +const { root } = await parse(src, { withFormatting: true }); +``` + + ## Comments -### Inter-node comment places +By default, when parsing the AST does not include any *formatting* information, +such as comments or whitespace. This is because the AST is designed to be +compact and to be used for syntax validation, syntax highlighting, and other +high-level operations. + +However, sometimes it is useful to have comments attached to the AST nodes. The +parser can collect all comments when the `withFormatting` flag is set to `true` +and attach them to the AST nodes. The comments are attached to the closest node, +while also considering the surrounding punctuation. + +### Inter-node comments + +Currently, when parsed inter-node comments are attached to the node from the +left side. Around colon in source identifier: @@ -25,3 +110,60 @@ Time interface expressions: ```eslq STATS 1 /* asdf */ DAY ``` + + +## Internal Details + + +### How does it work? + +The pipeline is the following: + +1. ANTLR grammar files are added to Kibana. +2. ANTLR grammar files are compiled to `.ts` assets in the `antlr` folder. +3. A query is parsed to a CST by ANTLR. +4. The `ESQLAstBuilderListener` traverses the CST and builds the AST. +5. Optionally: + 1. Comments and whitespace are extracted from the ANTLR lexer's token stream. + 2. The comments and whitespace are attached to the AST nodes. + + +### How to add new commands/options? + +When a new command/option is added to ES|QL it is done via a grammar update. +Therefore adding them requires a two step phase: + +To update the grammar: + +1. Make sure the `lexer` and `parser` files are up to date with their ES + counterparts. + * an existing Kibana CI job is updating them already automatically +2. Run the script into the `package.json` to compile the ES|QL grammar. +3. open the `ast_factory.ts` file and add a new `exit` method +4. write some code in the `ast_walker/ts` to translate the Antlr Parser tree + into the custom AST (there are already few utilites for that, but sometimes + it is required to write some more code if the `parser` introduced a new flow) + * pro tip: use the `http://lab.antlr.org/` to visualize/debug the parser tree + for a given statement (copy and paste the grammar files there) +5. if something goes wrong with new quoted/unquoted identifier token, open + the `ast_helpers.ts` and check the ids of the new tokens in the `getQuotedText` + and `getUnquotedText` functions, please make sure to leave a comment on the + token name + + +#### Debug and fix grammar changes (tokens, etc...) + +On token renaming or with subtle `lexer` grammar changes it can happens that +test breaks, this can be happen for two main issues: + +* A token name changed so the `esql_ast_builder_listener.ts` doesn't find it any + more. Go there and rename the TOKEN name. +* Token order changed and tests started failing. This probably generated some + token id reorder and there are two functions in `helpers.ts` who rely on + hardcoded ids: `getQuotedText` and `getUnquotedText`. + * Note that the `getQuotedText` and `getUnquotedText` are automatically + updated on grammar changes detected by the Kibana CI sync job. + * to fix this just look at the commented tokens and update the ids. If a new + token add it and leave a comment to point to the new token name. + * This choice was made to reduce the bundle size, as importing the + `esql_parser` adds some hundreds of Kbs to the bundle otherwise. diff --git a/packages/kbn-esql-ast/src/pretty_print/README.md b/packages/kbn-esql-ast/src/pretty_print/README.md index 48066697a5a7e..1d600fc19d3bc 100644 --- a/packages/kbn-esql-ast/src/pretty_print/README.md +++ b/packages/kbn-esql-ast/src/pretty_print/README.md @@ -4,20 +4,82 @@ human-readable string. This is useful for debugging or for displaying the AST to the user. -This module provides a number of pretty-printing options. +This module provides a number of pretty-printing facilities. There are two +main classes that provide pretty-printing: + +- `BasicPrettyPrinter` — provides the basic pretty-printing to a single + line. +- `WrappingPrettyPrinter` — provides more advanced pretty-printing, which + can wrap the query to multiple lines, and can also wrap the query to a + specific width. ## `BasicPrettyPrinter` -The `BasicPrettyPrinter` class provides the most basic pretty-printing—it -prints a query to a single line. Or it can print a query with each command on -a separate line, with the ability to customize the indentation before the pipe -character. +The `BasicPrettyPrinter` class provides the simpler pretty-printing +functionality—it prints a query to a single line. Or, it can print a query +with each command on a separate line, with the ability to customize the +indentation before the pipe character. + +Usage: + +```typescript +import { parse, BasicPrettyPrinter } from '@kbn/esql-ast'; + +const src = 'FROM index | LIMIT 10'; +const { root } = parse(src); +const text = BasicPrettyPrinter.print(root); + +console.log(text); // FROM index | LIMIT 10 +``` + +It can print each command on a separate line, with a custom indentation before +the pipe character: + +```typescript +const text = BasicPrettyPrinter.multiline(root, { pipeTab: ' ' }); +``` It can also print a single command to a single line; or an expression to a -single line. +single line. Below is the summary of the top-level functions: - `BasicPrettyPrinter.print()` — prints query to a single line. - `BasicPrettyPrinter.multiline()` — prints a query to multiple lines. - `BasicPrettyPrinter.command()` — prints a command to a single line. -- `BasicPrettyPrinter.expression()` — prints an expression to a single line. +- `BasicPrettyPrinter.expression()` — prints an expression to a single + line. + +See `BasicPrettyPrinterOptions` for formatting options. For example, a +`lowercase` options allows you to lowercase all ES|QL keywords: + +```typescript +const text = BasicPrettyPrinter.print(root, { lowercase: true }); +``` + +The `BasicPrettyPrinter` prints only *left* and *right* multi-line comments, +which do not have line breaks, as this formatter is designed to print a query +to a single line. If you need to print a query to multiple lines, use the +`WrappingPrettyPrinter`. + + +## `WrappingPrettyPrinter` + +The *wrapping pretty printer* can print a query to multiple lines, and can wrap +the text to a new line if the line width exceeds a certain threshold. It also +prints all comments attached to the AST (including ones that force the text +to be wrapped). + +Usage: + +```typescript +import { parse, WrappingPrettyPrinter } from '@kbn/esql-ast'; + +const src = ` + FROM index /* this is a comment */ + | LIMIT 10`; +const { root } = parse(src, { withFormatting: true }); +const text = WrappingPrettyPrinter.print(root); +``` + +See `WrappingPrettyPrinterOptions` interface for available formatting options. + diff --git a/packages/kbn-esql-ast/src/visitor/README.md b/packages/kbn-esql-ast/src/visitor/README.md index c952c8a34d8d9..20d55c0967e10 100644 --- a/packages/kbn-esql-ast/src/visitor/README.md +++ b/packages/kbn-esql-ast/src/visitor/README.md @@ -1,4 +1,28 @@ -## High-level AST structure +# `Visitor` Traversal API + +The `Visitor` traversal API provides a feature-rich way to traverse the ES|QL +AST. It is more powerful than the [`Walker` API](../walker/README.md), as it +allows to traverse the AST in a more flexible way. + +The `Visitor` API allows to traverse the AST starting from the root node or a +command statement, or an expression. Unlike in the `Walker` API, the `Visitor` +does not automatically traverse the entire AST. Instead, the developer has to +manually call the necessary *visit* methods to traverse the AST. This allows +to traverse the AST in a more flexible way: only traverse the parts of the AST +that are needed, or maybe traverse the AST in a different order, or multiple +times. + +The `Visitor` API is also more powerful than the `Walker` API, as for each +visitor callback it provides a *context* object, which contains the information +about the current node as well as the parent node, and the whole parent chain +up to the root node. + +In addition, each visitor callback can return a value (*output*), which is then +passed to the parent node, in the place where the visitor was called. Also, when +a child is visited, the parent node can pass in *input* to the child visitor. + + +## About ES|QL AST structure Broadly, there are two AST node types: (1) commands (say `FROM ...`, like *statements* in other languages), and (2) expressions (say `a + b`, or `fn()`). @@ -59,7 +83,8 @@ As of this writing, the following expressions are defined: - Column identifier expression, `{type: "column"}`, like `@timestamp` - Function call expression, `{type: "function"}`, like `fn(123)` - Literal expression, `{type: "literal"}`, like `123`, `"hello"` -- List literal expression, `{type: "list"}`, like `[1, 2, 3]`, `["a", "b", "c"]`, `[true, false]` +- List literal expression, `{type: "list"}`, like `[1, 2, 3]`, + `["a", "b", "c"]`, `[true, false]` - Time interval expression, `{type: "interval"}`, like `1h`, `1d`, `1w` - Inline cast expression, `{type: "cast"}`, like `abc::int`, `def::string` - Unknown node, `{type: "unknown"}` @@ -67,3 +92,176 @@ As of this writing, the following expressions are defined: Each expression has a `visitExpressionX` callback, where `X` is the type of the expression. If a expression-specific callback is not found, the generic `visitExpression` callback is called. + + +## `Visitor` API Usage + +The `Visitor` API is used to traverse the AST. The process is as follows: + +1. Create a new `Visitor` instance. +2. Register callbacks for the nodes you are interested in. +3. Call the `visitQuery`, `visitCommand`, or `visitExpression` method to start + the traversal. + +For example, the below code snippet prints the type of each expression node: + +```typescript +new Visitor() + .on('visitExpression', (ctx) => console.log(ctx.node.type)) + .on('visitCommand', (ctx) => [...ctx.visitArguments()]) + .on('visitQuery', (ctx) => [...ctx.visitCommands()]) + .visitQuery(root); +``` + +In the `visitQuery` callback it visits all commands, using the `visitCommands`. +In the `visitCommand` callback it visits all arguments, using the +`visitArguments`. And finally, in the `visitExpression` callback it prints the +type of the expression node. + +Above we started the traversal from the root node, using the `.visitQuery(root)` +method. However, one can start the traversal from any node, by calling the +following methods: + +- `.visitQuery()` — Start traversal from the root node. +- `.visitCommand()` — Start traversal from a command node. +- `.visitExpression()` — Start traversal from an expression node. + + +### Specifying Callbacks + +The simplest way to traverse the AST is to specify the below three callbacks: + +- `visitQuery` — Called for every query node. (Normally once.) +- `visitCommand` — Called for every command node. +- `visitExpression` — Called for every expression node. + + +However, you can be more specific and specify callbacks for commands and +expression types. This way the context `ctx` provided to the callback will have +helpful methods specific to the node type. + +When a more specific callback is not found, the generic `visitCommand` or +`visitExpression` callbacks are not called for that node. + +You can specify a specific callback for each command, instead of the generic +`visitCommand`: + +- `visitFromCommand` — Called for every `FROM` command node. +- `visitLimitCommand` — Called for every `LIMIT` command node. +- `visitExplainCommand` — Called for every `EXPLAIN` command node. +- `visitRowCommand` — Called for every `ROW` command node. +- `visitMetricsCommand` — Called for every `METRICS` command node. +- `visitShowCommand` — Called for every `SHOW` command node. +- `visitMetaCommand` — Called for every `META` command node. +- `visitEvalCommand` — Called for every `EVAL` command node. +- `visitStatsCommand` — Called for every `STATS` command node. +- `visitInlineStatsCommand` — Called for every `INLINESTATS` command node. +- `visitLookupCommand` — Called for every `LOOKUP` command node. +- `visitKeepCommand` — Called for every `KEEP` command node. +- `visitSortCommand` — Called for every `SORT` command node. +- `visitWhereCommand` — Called for every `WHERE` command node. +- `visitDropCommand` — Called for every `DROP` command node. +- `visitRenameCommand` — Called for every `RENAME` command node. +- `visitDissectCommand` — Called for every `DISSECT` command node. +- `visitGrokCommand` — Called for every `GROK` command node. +- `visitEnrichCommand` — Called for every `ENRICH` command node. +- `visitMvExpandCommand` — Called for every `MV_EXPAND` command node. + +Similarly, you can specify a specific callback for each expression type, instead +of the generic `visitExpression`: + +- `visitColumnExpression` — Called for every column expression node, say + `@timestamp`. +- `visitSourceExpression` — Called for every source expression node, say + `tsdb_index`. +- `visitFunctionCallExpression` — Called for every function call + expression node. Including binary expressions, such as `a + b`. +- `visitLiteralExpression` — Called for every literal expression node, say + `123`, `"hello"`. +- `visitListLiteralExpression` — Called for every list literal expression + node, say `[1, 2, 3]`, `["a", "b", "c"]`. +- `visitTimeIntervalLiteralExpression` — Called for every time interval + literal expression node, say `1h`, `1d`, `1w`. +- `visitInlineCastExpression` — Called for every inline cast expression + node, say `abc::int`, `def::string`. +- `visitRenameExpression` — Called for every rename expression node, say + `a AS b`. +- `visitOrderExpression` — Called for every order expression node, say + `@timestamp ASC`. + + +### Using the Node Context + +Each visitor callback receives a `ctx` object, which contains the reference to +the parent node's context: + +```typescript +new Visitor() + .on('visitExpression', (ctx) => { + ctx.parent + }); +``` + +Each visitor callback also contains various methods to visit the children nodes, +if needed. For example, to visit all arguments of a command node: + +```typescript +const expressions = []; + +new Visitor() + .on('visitExpression', (ctx) => expressions.push(ctx.node)); + .on('visitCommand', (ctx) => { + for (const output of ctx.visitArguments()) { + } + }); +``` + +The node context object may also have node specific methods. For example, the +`LIMIT` command context has the `.numeric()` method, which returns the numeric +value of the `LIMIT` command: + +```typescript +new Visitor() + .on('visitLimitCommand', (ctx) => { + console.log(ctx.numeric()); + }) + .on('visitCommand', () => null) + .on('visitQuery', (ctx) => [...ctx.visitCommands()]) + .visitQuery(root); +``` + + +### Using the Visitor Output + +Each visitor callback can return a *output*, which is then passed to the parent +callback. This allows to pass information from the child node to the parent +node. + +For example, the below code snippet collects all column names in the AST: + +```typescript +const columns = new Visitor() + .on('visitExpression', (ctx) => null) + .on('visitColumnExpression', (ctx) => ctx.node.name) + .on('visitCommand', (ctx) => [...ctx.visitArguments()]) + .on('visitQuery', (ctx) => [...ctx.visitCommands()]) + .visitQuery(root); +``` + + +### Using the Visitor Input + +Analogous to the output, each visitor callback can receive an *input* value. +This allows to pass information from the parent node to the child node. + +For example, the below code snippet prints all column names prefixed with the +text `"prefix"`: + +```typescript +new Visitor() + .on('visitExpression', (ctx) => null) + .on('visitColumnExpression', (ctx, INPUT) => console.log(INPUT + ctx.node.name)) + .on('visitCommand', (ctx) => [...ctx.visitArguments("prefix")]) + .on('visitQuery', (ctx) => [...ctx.visitCommands()]) + .visitQuery(root); +``` diff --git a/packages/kbn-esql-ast/src/walker/README.md b/packages/kbn-esql-ast/src/walker/README.md index 74e834e9095bc..4614350279b0c 100644 --- a/packages/kbn-esql-ast/src/walker/README.md +++ b/packages/kbn-esql-ast/src/walker/README.md @@ -1,41 +1,118 @@ -# ES|QL AST Walker +# `Walker` Traversal API -The ES|QL AST Walker is a utility that traverses the ES|QL AST and provides a -set of callbacks that can be used to perform introspection of the AST. +The ES|QL AST `Walker` is a utility that traverses the ES|QL AST. The developer +can provide a set of callbacks which are called when the walker visits a +specific type of node. + +The `Walker` utility allows to traverse the AST starting from any node, not just +the root node. + + +## Low-level API To start a new *walk* you create a `Walker` instance and call the `walk()` method with the AST node to start the walk from. ```ts - -import { Walker, getAstAndSyntaxErrors } from '@kbn/esql-ast'; +import { Walker } from '@kbn/esql-ast'; const walker = new Walker({ - // Called every time a function node is visited. - visitFunction: (fn) => { + /** + * Visit commands + */ + visitCommand: (node: ESQLCommand) => { + // Called for every command node. + }, + visitCommandOption: (node: ESQLCommandOption) => { + // Called for every command option node. + }, + + /** + * Visit expressions + */ + visitFunction: (fn: ESQLFunction) => { + // Called every time a function expression is visited. console.log('Function:', fn.name); }, - // Called every time a source identifier node is visited. - visitSource: (source) => { + visitSource: (source: ESQLSource) => { + // Called every time a source identifier expression is visited. console.log('Source:', source.name); }, + visitQuery: (node: ESQLAstQueryExpression) => { + // Called for every query node. + }, + visitColumn: (node: ESQLColumn) => { + // Called for every column node. + }, + visitLiteral: (node: ESQLLiteral) => { + // Called for every literal node. + }, + visitListLiteral: (node: ESQLList) => { + // Called for every list literal node. + }, + visitTimeIntervalLiteral: (node: ESQLTimeInterval) => { + // Called for every time interval literal node. + }, + visitInlineCast: (node: ESQLInlineCast) => { + // Called for every inline cast node. + }, }); -const { ast } = getAstAndSyntaxErrors('FROM source | STATS fn()'); walker.walk(ast); ``` -Conceptual structure of an ES|QL AST: - -- A single ES|QL query is composed of one or more source commands and zero or - more transformation commands. -- Each command is represented by a `command` node. -- Each command contains a list expressions named in ES|QL AST as *AST Item*. - - `function` — function call expression. - - `option` — a list of expressions with a specific role in the command. - - `source` — s source identifier expression. - - `column` — a field identifier expression. - - `timeInterval` — a time interval expression. - - `list` — a list literal expression. - - `literal` — a literal expression. - - `inlineCast` — an inline cast expression. +It is also possible to provide a single `visitAny` callback that is called for +any node type that does not have a specific visitor. + +```ts +import { Walker } from '@kbn/esql-ast'; + +const walker = new Walker({ + visitAny?: (node: ESQLProperNode) => { + // Called for any node type that does not have a specific visitor. + }, +}); + +walker.walk(ast); +``` + + +## High-level API + +There are few high-level utility functions that are implemented on top of the +low-level API, for your convenience: + +- `Walker.walk` — Walks the AST and calls the appropriate visitor functions. +- `Walker.commands` — Walks the AST and extracts all command statements. +- `Walker.params` — Walks the AST and extracts all parameter literals. +- `Walker.find` — Finds and returns the first node that matches the search criteria. +- `Walker.findAll` — Finds and returns all nodes that match the search criteria. +- `Walker.match` — Matches a single node against a template object. +- `Walker.matchAll` — Matches all nodes against a template object. +- `Walker.findFunction` — Finds the first function that matches the predicate. +- `Walker.hasFunction` — Searches for at least one occurrence of a function or expression in the AST. +- `Walker.visitComments` — Visits all comments in the AST. + +The `Walker.walk()` method is simply a sugar syntax around the low-level +`new Walker().walk()` method. + +The `Walker.commands()` method returns a list of all commands. This also +includes nested commands, once they become supported in ES|QL. + +The `Walker.params()` method collects all param literals, such as unnamed `?` or +named `?param`, or ordered `?1`. + +The `Walker.find()` and `Walker.findAll()` methods are used to search for nodes +in the AST that match a specific criteria. The criteria is specified using a +predicate function. + +The `Walker.match()` and `Walker.matchAll()` methods are also used to search for +nodes in the AST, but unlike `find` and `findAll`, they use a template object +to match the nodes. + +The `Walker.findFunction()` is a simple utility to find the first function that +matches a predicate. The `Walker.hasFunction()` returns `true` if at least one +function or expression in the AST matches the predicate. + +The `Walker.visitComments()` method is used to visit all comments in the AST. +You specify a callback that is called for each comment node. From 7aa64b6ed59488ab10a5136199b69de0c86668af Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Mon, 30 Sep 2024 18:20:21 +0200 Subject: [PATCH 33/60] [OneDiscover] Add EBT event to track field usage (#193996) - Closes https://github.com/elastic/kibana/issues/186156 - Closes https://github.com/elastic/kibana/issues/189454 ## Summary This PR adds new EBT event type `discover_field_usage` which we use for tracking adding and removing grid columns and adding filters via +/-/exists buttons. Properties of the added events consist of: `eventType`: `dataTableSelection`, `dataTableRemoval`, or `filterAddition` `fieldName`: name of the field if it's from ECS schema `filterOperation`: `+`, `-`, or `_exists_` Screenshot 2024-09-25 at 17 51 27 ## Testing Enable "Usage collection" global setting. Navigate to Discover and observe `kibana-browser` requests in Network tab. ### 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 --- .../discover/public/__mocks__/services.ts | 2 + .../application/context/context_app.test.tsx | 1 + .../application/context/context_app.tsx | 31 +- .../components/layout/discover_documents.tsx | 32 +- .../components/layout/discover_layout.tsx | 40 ++- src/plugins/discover/public/build_services.ts | 10 +- .../context_awareness/__mocks__/index.tsx | 8 +- .../profiles_manager.test.ts | 4 +- .../context_awareness/profiles_manager.ts | 10 +- src/plugins/discover/public/plugin.tsx | 86 +++-- .../discover_ebt_context_manager.test.ts | 95 ----- .../services/discover_ebt_context_manager.ts | 75 ---- .../services/discover_ebt_manager.test.ts | 242 +++++++++++++ .../public/services/discover_ebt_manager.ts | 219 ++++++++++++ .../context_awareness/_data_source_profile.ts | 101 +----- .../discover/context_awareness/_telemetry.ts | 326 ++++++++++++++++++ .../apps/discover/context_awareness/index.ts | 1 + 17 files changed, 946 insertions(+), 337 deletions(-) delete mode 100644 src/plugins/discover/public/services/discover_ebt_context_manager.test.ts delete mode 100644 src/plugins/discover/public/services/discover_ebt_context_manager.ts create mode 100644 src/plugins/discover/public/services/discover_ebt_manager.test.ts create mode 100644 src/plugins/discover/public/services/discover_ebt_manager.ts create mode 100644 test/functional/apps/discover/context_awareness/_telemetry.ts diff --git a/src/plugins/discover/public/__mocks__/services.ts b/src/plugins/discover/public/__mocks__/services.ts index 3d78239558f3e..f00d105444630 100644 --- a/src/plugins/discover/public/__mocks__/services.ts +++ b/src/plugins/discover/public/__mocks__/services.ts @@ -45,6 +45,7 @@ import { SearchResponse } from '@elastic/elasticsearch/lib/api/types'; import { urlTrackerMock } from './url_tracker.mock'; import { createElement } from 'react'; import { createContextAwarenessMocks } from '../context_awareness/__mocks__'; +import { DiscoverEBTManager } from '../services/discover_ebt_manager'; export function createDiscoverServicesMock(): DiscoverServices { const dataPlugin = dataPluginMock.createStartContract(); @@ -245,6 +246,7 @@ export function createDiscoverServicesMock(): DiscoverServices { singleDocLocator: { getRedirectUrl: jest.fn(() => '') }, urlTracker: urlTrackerMock, profilesManager: profilesManagerMock, + ebtManager: new DiscoverEBTManager(), setHeaderActionMenu: jest.fn(), } as unknown as DiscoverServices; } diff --git a/src/plugins/discover/public/application/context/context_app.test.tsx b/src/plugins/discover/public/application/context/context_app.test.tsx index 9c77d1e40bbb2..7a99194cad575 100644 --- a/src/plugins/discover/public/application/context/context_app.test.tsx +++ b/src/plugins/discover/public/application/context/context_app.test.tsx @@ -72,6 +72,7 @@ describe('ContextApp test', () => { contextLocator: { getRedirectUrl: jest.fn(() => '') }, singleDocLocator: { getRedirectUrl: jest.fn(() => '') }, profilesManager: discoverServices.profilesManager, + ebtManager: discoverServices.ebtManager, timefilter: discoverServices.timefilter, uiActions: discoverServices.uiActions, } as unknown as DiscoverServices; diff --git a/src/plugins/discover/public/application/context/context_app.tsx b/src/plugins/discover/public/application/context/context_app.tsx index e0dfa985b594e..b0fc1342a8f72 100644 --- a/src/plugins/discover/public/application/context/context_app.tsx +++ b/src/plugins/discover/public/application/context/context_app.tsx @@ -56,6 +56,8 @@ export const ContextApp = ({ dataView, anchorId, referrer }: ContextAppProps) => navigation, filterManager, core, + ebtManager, + fieldsMetadata, } = services; const isLegacy = useMemo(() => uiSettings.get(DOC_TABLE_LEGACY), [uiSettings]); @@ -199,15 +201,36 @@ export const ContextApp = ({ dataView, anchorId, referrer }: ContextAppProps) => ); const addFilter = useCallback( - async (field: DataViewField | string, values: unknown, operation: string) => { + async (field: DataViewField | string, values: unknown, operation: '+' | '-') => { const newFilters = generateFilters(filterManager, field, values, operation, dataView); filterManager.addFilters(newFilters); if (dataViews) { const fieldName = typeof field === 'string' ? field : field.name; await popularizeField(dataView, fieldName, dataViews, capabilities); + void ebtManager.trackFilterAddition({ + fieldName: fieldName === '_exists_' ? String(values) : fieldName, + filterOperation: fieldName === '_exists_' ? '_exists_' : operation, + fieldsMetadata, + }); } }, - [filterManager, dataViews, dataView, capabilities] + [filterManager, dataViews, dataView, capabilities, ebtManager, fieldsMetadata] + ); + + const onAddColumnWithTracking = useCallback( + (columnName: string) => { + onAddColumn(columnName); + void ebtManager.trackDataTableSelection({ fieldName: columnName, fieldsMetadata }); + }, + [onAddColumn, ebtManager, fieldsMetadata] + ); + + const onRemoveColumnWithTracking = useCallback( + (columnName: string) => { + onRemoveColumn(columnName); + void ebtManager.trackDataTableRemoval({ fieldName: columnName, fieldsMetadata }); + }, + [onRemoveColumn, ebtManager, fieldsMetadata] ); const TopNavMenu = navigation.ui.AggregateQueryTopNavMenu; @@ -271,8 +294,8 @@ export const ContextApp = ({ dataView, anchorId, referrer }: ContextAppProps) => isLegacy={isLegacy} columns={columns} grid={appState.grid} - onAddColumn={onAddColumn} - onRemoveColumn={onRemoveColumn} + onAddColumn={onAddColumnWithTracking} + onRemoveColumn={onRemoveColumnWithTracking} onSetColumns={onSetColumns} predecessorCount={appState.predecessorCount} successorCount={appState.successorCount} diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx index 2fe2a4f5a8f93..77befc4dc334f 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx @@ -117,7 +117,7 @@ function DiscoverDocumentsComponent({ const services = useDiscoverServices(); const documents$ = stateContainer.dataState.data$.documents$; const savedSearch = useSavedSearchInitial(); - const { dataViews, capabilities, uiSettings, uiActions } = services; + const { dataViews, capabilities, uiSettings, uiActions, ebtManager, fieldsMetadata } = services; const [ dataSource, query, @@ -200,6 +200,22 @@ function DiscoverDocumentsComponent({ settings: grid, }); + const onAddColumnWithTracking = useCallback( + (columnName: string) => { + onAddColumn(columnName); + void ebtManager.trackDataTableSelection({ fieldName: columnName, fieldsMetadata }); + }, + [onAddColumn, ebtManager, fieldsMetadata] + ); + + const onRemoveColumnWithTracking = useCallback( + (columnName: string) => { + onRemoveColumn(columnName); + void ebtManager.trackDataTableRemoval({ fieldName: columnName, fieldsMetadata }); + }, + [onRemoveColumn, ebtManager, fieldsMetadata] + ); + const setExpandedDoc = useCallback( (doc: DataTableRecord | undefined) => { stateContainer.internalState.transitions.setExpandedDoc(doc); @@ -299,14 +315,22 @@ function DiscoverDocumentsComponent({ columnsMeta={customColumnsMeta} savedSearchId={savedSearch.id} onFilter={onAddFilter} - onRemoveColumn={onRemoveColumn} - onAddColumn={onAddColumn} + onRemoveColumn={onRemoveColumnWithTracking} + onAddColumn={onAddColumnWithTracking} onClose={() => setExpandedDoc(undefined)} setExpandedDoc={setExpandedDoc} query={query} /> ), - [dataView, onAddColumn, onAddFilter, onRemoveColumn, query, savedSearch.id, setExpandedDoc] + [ + dataView, + onAddColumnWithTracking, + onAddFilter, + onRemoveColumnWithTracking, + query, + savedSearch.id, + setExpandedDoc, + ] ); const configRowHeight = uiSettings.get(ROW_HEIGHT_OPTION); diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx index 49e645e3f2206..bc9cad72a5eb6 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx @@ -78,6 +78,8 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { spaces, observabilityAIAssistant, dataVisualizer: dataVisualizerService, + ebtManager, + fieldsMetadata, } = useDiscoverServices(); const pageBackgroundColor = useEuiBackgroundColor('plain'); const globalQueryState = data.query.getState(); @@ -154,6 +156,22 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { settings: grid, }); + const onAddColumnWithTracking = useCallback( + (columnName: string) => { + onAddColumn(columnName); + void ebtManager.trackDataTableSelection({ fieldName: columnName, fieldsMetadata }); + }, + [onAddColumn, ebtManager, fieldsMetadata] + ); + + const onRemoveColumnWithTracking = useCallback( + (columnName: string) => { + onRemoveColumn(columnName); + void ebtManager.trackDataTableRemoval({ fieldName: columnName, fieldsMetadata }); + }, + [onRemoveColumn, ebtManager, fieldsMetadata] + ); + // The assistant is getting the state from the url correctly // expect from the index pattern where we have only the dataview id useEffect(() => { @@ -175,9 +193,14 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { if (trackUiMetric) { trackUiMetric(METRIC_TYPE.CLICK, 'filter_added'); } + void ebtManager.trackFilterAddition({ + fieldName: fieldName === '_exists_' ? String(values) : fieldName, + filterOperation: fieldName === '_exists_' ? '_exists_' : operation, + fieldsMetadata, + }); return filterManager.addFilters(newFilters); }, - [filterManager, dataView, dataViews, trackUiMetric, capabilities] + [filterManager, dataView, dataViews, trackUiMetric, capabilities, ebtManager, fieldsMetadata] ); const getOperator = (fieldName: string, values: unknown, operation: '+' | '-') => { @@ -222,8 +245,13 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { if (trackUiMetric) { trackUiMetric(METRIC_TYPE.CLICK, 'esql_filter_added'); } + void ebtManager.trackFilterAddition({ + fieldName: fieldName === '_exists_' ? String(values) : fieldName, + filterOperation: fieldName === '_exists_' ? '_exists_' : operation, + fieldsMetadata, + }); }, - [data.query.queryString, query, trackUiMetric] + [data.query.queryString, query, trackUiMetric, ebtManager, fieldsMetadata] ); const onFilter = isEsqlMode ? onPopulateWhereClause : onAddFilter; @@ -274,8 +302,8 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { return undefined; } - return () => onAddColumn(draggingFieldName); - }, [onAddColumn, draggingFieldName, currentColumns]); + return () => onAddColumnWithTracking(draggingFieldName); + }, [onAddColumnWithTracking, draggingFieldName, currentColumns]); const [sidebarToggleState$] = useState>( () => new BehaviorSubject({ isCollapsed: false, toggle: () => {} }) @@ -396,10 +424,10 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { sidebarPanel={ { const { usageCollection } = plugins; @@ -223,7 +223,7 @@ export const buildServices = memoize( noDataPage: plugins.noDataPage, observabilityAIAssistant: plugins.observabilityAIAssistant, profilesManager, - ebtContextManager, + ebtManager, fieldsMetadata: plugins.fieldsMetadata, logsDataAccess: plugins.logsDataAccess, }; diff --git a/src/plugins/discover/public/context_awareness/__mocks__/index.tsx b/src/plugins/discover/public/context_awareness/__mocks__/index.tsx index a15b7aa26a8a0..153d401cc980a 100644 --- a/src/plugins/discover/public/context_awareness/__mocks__/index.tsx +++ b/src/plugins/discover/public/context_awareness/__mocks__/index.tsx @@ -23,7 +23,7 @@ import { } from '../profiles'; import { ProfileProviderServices } from '../profile_providers/profile_provider_services'; import { ProfilesManager } from '../profiles_manager'; -import { DiscoverEBTContextManager } from '../../services/discover_ebt_context_manager'; +import { DiscoverEBTManager } from '../../services/discover_ebt_manager'; import { createLogsContextServiceMock } from '@kbn/discover-utils/src/__mocks__'; export const createContextAwarenessMocks = ({ @@ -152,12 +152,12 @@ export const createContextAwarenessMocks = ({ documentProfileServiceMock.registerProvider(documentProfileProviderMock); } - const ebtContextManagerMock = new DiscoverEBTContextManager(); + const ebtManagerMock = new DiscoverEBTManager(); const profilesManagerMock = new ProfilesManager( rootProfileServiceMock, dataSourceProfileServiceMock, documentProfileServiceMock, - ebtContextManagerMock + ebtManagerMock ); const profileProviderServices = createProfileProviderServicesMock(); @@ -173,7 +173,7 @@ export const createContextAwarenessMocks = ({ contextRecordMock2, profilesManagerMock, profileProviderServices, - ebtContextManagerMock, + ebtManagerMock, }; }; diff --git a/src/plugins/discover/public/context_awareness/profiles_manager.test.ts b/src/plugins/discover/public/context_awareness/profiles_manager.test.ts index 87965edbe7488..da5ad8b56dcf3 100644 --- a/src/plugins/discover/public/context_awareness/profiles_manager.test.ts +++ b/src/plugins/discover/public/context_awareness/profiles_manager.test.ts @@ -21,7 +21,7 @@ describe('ProfilesManager', () => { beforeEach(() => { jest.clearAllMocks(); mocks = createContextAwarenessMocks(); - jest.spyOn(mocks.ebtContextManagerMock, 'updateProfilesContextWith'); + jest.spyOn(mocks.ebtManagerMock, 'updateProfilesContextWith'); }); it('should return default profiles', () => { @@ -62,7 +62,7 @@ describe('ProfilesManager', () => { mocks.documentProfileProviderMock.profile, ]); - expect(mocks.ebtContextManagerMock.updateProfilesContextWith).toHaveBeenCalledWith([ + expect(mocks.ebtManagerMock.updateProfilesContextWith).toHaveBeenCalledWith([ 'root-profile', 'data-source-profile', ]); diff --git a/src/plugins/discover/public/context_awareness/profiles_manager.ts b/src/plugins/discover/public/context_awareness/profiles_manager.ts index 2c8b1c7d16cb0..6b7bef5e02294 100644 --- a/src/plugins/discover/public/context_awareness/profiles_manager.ts +++ b/src/plugins/discover/public/context_awareness/profiles_manager.ts @@ -25,7 +25,7 @@ import type { DocumentContext, } from './profiles'; import type { ContextWithProfileId } from './profile_service'; -import { DiscoverEBTContextManager } from '../services/discover_ebt_context_manager'; +import { DiscoverEBTManager } from '../services/discover_ebt_manager'; interface SerializedRootProfileParams { solutionNavId: RootProfileProviderParams['solutionNavId']; @@ -53,7 +53,7 @@ export interface GetProfilesOptions { export class ProfilesManager { private readonly rootContext$: BehaviorSubject>; private readonly dataSourceContext$: BehaviorSubject>; - private readonly ebtContextManager: DiscoverEBTContextManager; + private readonly ebtManager: DiscoverEBTManager; private prevRootProfileParams?: SerializedRootProfileParams; private prevDataSourceProfileParams?: SerializedDataSourceProfileParams; @@ -64,11 +64,11 @@ export class ProfilesManager { private readonly rootProfileService: RootProfileService, private readonly dataSourceProfileService: DataSourceProfileService, private readonly documentProfileService: DocumentProfileService, - ebtContextManager: DiscoverEBTContextManager + ebtManager: DiscoverEBTManager ) { this.rootContext$ = new BehaviorSubject(rootProfileService.defaultContext); this.dataSourceContext$ = new BehaviorSubject(dataSourceProfileService.defaultContext); - this.ebtContextManager = ebtContextManager; + this.ebtManager = ebtManager; } /** @@ -206,7 +206,7 @@ export class ProfilesManager { private trackActiveProfiles(rootContextProfileId: string, dataSourceContextProfileId: string) { const dscProfiles = [rootContextProfileId, dataSourceContextProfileId]; - this.ebtContextManager.updateProfilesContextWith(dscProfiles); + this.ebtManager.updateProfilesContextWith(dscProfiles); } } diff --git a/src/plugins/discover/public/plugin.tsx b/src/plugins/discover/public/plugin.tsx index e6430f82c62fe..dbbcc90a7d451 100644 --- a/src/plugins/discover/public/plugin.tsx +++ b/src/plugins/discover/public/plugin.tsx @@ -59,7 +59,7 @@ import { RootProfileService } from './context_awareness/profiles/root_profile'; import { DataSourceProfileService } from './context_awareness/profiles/data_source_profile'; import { DocumentProfileService } from './context_awareness/profiles/document_profile'; import { ProfilesManager } from './context_awareness/profiles_manager'; -import { DiscoverEBTContextManager } from './services/discover_ebt_context_manager'; +import { DiscoverEBTManager } from './services/discover_ebt_manager'; /** * Contains Discover, one of the oldest parts of Kibana @@ -149,8 +149,12 @@ export class DiscoverPlugin this.urlTracker = { setTrackedUrl, restorePreviousUrl, setTrackingEnabled }; this.stopUrlTracking = stopUrlTracker; - const ebtContextManager = new DiscoverEBTContextManager(); - ebtContextManager.initialize({ core }); + const ebtManager = new DiscoverEBTManager(); + ebtManager.initialize({ + core, + shouldInitializeCustomContext: true, + shouldInitializeCustomEvents: true, + }); core.application.register({ id: PLUGIN_ID, @@ -176,7 +180,7 @@ export class DiscoverPlugin window.dispatchEvent(new HashChangeEvent('hashchange')); }); - ebtContextManager.enable(); + ebtManager.enableContext(); const services = buildServices({ core: coreStart, @@ -188,12 +192,12 @@ export class DiscoverPlugin history: this.historyService.getHistory(), scopedHistory: this.scopedHistory, urlTracker: this.urlTracker!, - profilesManager: await this.createProfilesManager( - coreStart, - discoverStartPlugins, - ebtContextManager - ), - ebtContextManager, + profilesManager: await this.createProfilesManager({ + core: coreStart, + plugins: discoverStartPlugins, + ebtManager, + }), + ebtManager, setHeaderActionMenu: params.setHeaderActionMenu, }); @@ -226,7 +230,7 @@ export class DiscoverPlugin }); return () => { - ebtContextManager.disableAndReset(); + ebtManager.disableAndResetContext(); unlistenParentHistory(); unmount(); appUnMounted(); @@ -296,11 +300,12 @@ export class DiscoverPlugin } const getDiscoverServicesInternal = () => { + const ebtManager = new DiscoverEBTManager(); // It is not initialized outside of Discover return this.getDiscoverServices( core, plugins, - this.createEmptyProfilesManager(), - new DiscoverEBTContextManager() // it's not enabled outside of Discover + this.createEmptyProfilesManager({ ebtManager }), + ebtManager ); }; @@ -326,11 +331,15 @@ export class DiscoverPlugin return { rootProfileService, dataSourceProfileService, documentProfileService }; } - private createProfilesManager = async ( - core: CoreStart, - plugins: DiscoverStartPlugins, - ebtContextManager: DiscoverEBTContextManager - ) => { + private async createProfilesManager({ + core, + plugins, + ebtManager, + }: { + core: CoreStart; + plugins: DiscoverStartPlugins; + ebtManager: DiscoverEBTManager; + }) { const { registerProfileProviders } = await import('./context_awareness/profile_providers'); const { rootProfileService, dataSourceProfileService, documentProfileService } = this.createProfileServices(); @@ -341,7 +350,7 @@ export class DiscoverPlugin rootProfileService, dataSourceProfileService, documentProfileService, - ebtContextManager + ebtManager ); await registerProfileProviders({ @@ -349,21 +358,18 @@ export class DiscoverPlugin dataSourceProfileService, documentProfileService, enabledExperimentalProfileIds, - services: this.getDiscoverServices(core, plugins, profilesManager, ebtContextManager), + services: this.getDiscoverServices(core, plugins, profilesManager, ebtManager), }); return profilesManager; - }; - - private createEmptyProfilesManager() { - const { rootProfileService, dataSourceProfileService, documentProfileService } = - this.createProfileServices(); + } + private createEmptyProfilesManager({ ebtManager }: { ebtManager: DiscoverEBTManager }) { return new ProfilesManager( - rootProfileService, - dataSourceProfileService, - documentProfileService, - new DiscoverEBTContextManager() // it's not enabled outside of Discover + new RootProfileService(), + new DataSourceProfileService(), + new DocumentProfileService(), + ebtManager ); } @@ -371,7 +377,7 @@ export class DiscoverPlugin core: CoreStart, plugins: DiscoverStartPlugins, profilesManager: ProfilesManager, - ebtContextManager: DiscoverEBTContextManager + ebtManager: DiscoverEBTManager ) => { return buildServices({ core, @@ -383,11 +389,13 @@ export class DiscoverPlugin history: this.historyService.getHistory(), urlTracker: this.urlTracker!, profilesManager, - ebtContextManager, + ebtManager, }); }; private registerEmbeddable(core: CoreSetup, plugins: DiscoverSetupPlugins) { + const ebtManager = new DiscoverEBTManager(); // It is not initialized outside of Discover + const getStartServices = async () => { const [coreStart, deps] = await core.getStartServices(); return { @@ -396,16 +404,20 @@ export class DiscoverPlugin }; }; - const getDiscoverServicesInternal = async () => { + const getDiscoverServicesForEmbeddable = async () => { const [coreStart, deps] = await core.getStartServices(); - const ebtContextManager = new DiscoverEBTContextManager(); // it's not enabled outside of Discover - const profilesManager = await this.createProfilesManager(coreStart, deps, ebtContextManager); - return this.getDiscoverServices(coreStart, deps, profilesManager, ebtContextManager); + + const profilesManager = await this.createProfilesManager({ + core: coreStart, + plugins: deps, + ebtManager, + }); + return this.getDiscoverServices(coreStart, deps, profilesManager, ebtManager); }; plugins.embeddable.registerReactEmbeddableSavedObject({ onAdd: async (container, savedObject) => { - const services = await getDiscoverServicesInternal(); + const services = await getDiscoverServicesForEmbeddable(); const initialState = await deserializeState({ serializedState: { rawState: { savedObjectId: savedObject.id }, @@ -429,7 +441,7 @@ export class DiscoverPlugin plugins.embeddable.registerReactEmbeddableFactory(SEARCH_EMBEDDABLE_TYPE, async () => { const [startServices, discoverServices, { getSearchEmbeddableFactory }] = await Promise.all([ getStartServices(), - getDiscoverServicesInternal(), + getDiscoverServicesForEmbeddable(), import('./embeddable/get_search_embeddable_factory'), ]); diff --git a/src/plugins/discover/public/services/discover_ebt_context_manager.test.ts b/src/plugins/discover/public/services/discover_ebt_context_manager.test.ts deleted file mode 100644 index 3b2836325b671..0000000000000 --- a/src/plugins/discover/public/services/discover_ebt_context_manager.test.ts +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { BehaviorSubject } from 'rxjs'; -import { coreMock } from '@kbn/core/public/mocks'; -import { DiscoverEBTContextManager } from './discover_ebt_context_manager'; - -const coreSetupMock = coreMock.createSetup(); - -describe('DiscoverEBTContextManager', () => { - let discoverEBTContextManager: DiscoverEBTContextManager; - - beforeEach(() => { - discoverEBTContextManager = new DiscoverEBTContextManager(); - }); - - describe('register', () => { - it('should register the context provider', () => { - discoverEBTContextManager.initialize({ core: coreSetupMock }); - - expect(coreSetupMock.analytics.registerContextProvider).toHaveBeenCalledWith({ - name: 'discover_context', - context$: expect.any(BehaviorSubject), - schema: { - discoverProfiles: { - type: 'array', - items: { - type: 'keyword', - _meta: { - description: 'List of active Discover context awareness profiles', - }, - }, - }, - }, - }); - }); - }); - - describe('updateProfilesWith', () => { - it('should update the profiles with the provided props', () => { - const dscProfiles = ['profile1', 'profile2']; - const dscProfiles2 = ['profile21', 'profile22']; - discoverEBTContextManager.initialize({ core: coreSetupMock }); - discoverEBTContextManager.enable(); - - discoverEBTContextManager.updateProfilesContextWith(dscProfiles); - expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); - - discoverEBTContextManager.updateProfilesContextWith(dscProfiles2); - expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles2); - }); - - it('should not update the profiles if profile list did not change', () => { - const dscProfiles = ['profile1', 'profile2']; - const dscProfiles2 = ['profile1', 'profile2']; - discoverEBTContextManager.initialize({ core: coreSetupMock }); - discoverEBTContextManager.enable(); - - discoverEBTContextManager.updateProfilesContextWith(dscProfiles); - expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); - - discoverEBTContextManager.updateProfilesContextWith(dscProfiles2); - expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); - }); - - it('should not update the profiles if not enabled yet', () => { - const dscProfiles = ['profile1', 'profile2']; - discoverEBTContextManager.initialize({ core: coreSetupMock }); - - discoverEBTContextManager.updateProfilesContextWith(dscProfiles); - expect(discoverEBTContextManager.getProfilesContext()).toEqual([]); - }); - - it('should not update the profiles after resetting unless enabled again', () => { - const dscProfiles = ['profile1', 'profile2']; - discoverEBTContextManager.initialize({ core: coreSetupMock }); - discoverEBTContextManager.enable(); - discoverEBTContextManager.updateProfilesContextWith(dscProfiles); - expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); - discoverEBTContextManager.disableAndReset(); - expect(discoverEBTContextManager.getProfilesContext()).toEqual([]); - discoverEBTContextManager.updateProfilesContextWith(dscProfiles); - expect(discoverEBTContextManager.getProfilesContext()).toEqual([]); - discoverEBTContextManager.enable(); - discoverEBTContextManager.updateProfilesContextWith(dscProfiles); - expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); - }); - }); -}); diff --git a/src/plugins/discover/public/services/discover_ebt_context_manager.ts b/src/plugins/discover/public/services/discover_ebt_context_manager.ts deleted file mode 100644 index 12ea918c495d9..0000000000000 --- a/src/plugins/discover/public/services/discover_ebt_context_manager.ts +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { BehaviorSubject } from 'rxjs'; -import { isEqual } from 'lodash'; -import type { CoreSetup } from '@kbn/core-lifecycle-browser'; - -export interface DiscoverEBTContextProps { - discoverProfiles: string[]; // Discover Context Awareness Profiles -} -export type DiscoverEBTContext = BehaviorSubject; - -export class DiscoverEBTContextManager { - private isEnabled: boolean = false; - private ebtContext$: DiscoverEBTContext | undefined; - - constructor() {} - - // https://docs.elastic.dev/telemetry/collection/event-based-telemetry - public initialize({ core }: { core: CoreSetup }) { - const context$ = new BehaviorSubject({ - discoverProfiles: [], - }); - - core.analytics.registerContextProvider({ - name: 'discover_context', - context$, - schema: { - discoverProfiles: { - type: 'array', - items: { - type: 'keyword', - _meta: { - description: 'List of active Discover context awareness profiles', - }, - }, - }, - // If we decide to extend EBT context with more properties, we can do it here - }, - }); - - this.ebtContext$ = context$; - } - - public enable() { - this.isEnabled = true; - } - - public updateProfilesContextWith(discoverProfiles: DiscoverEBTContextProps['discoverProfiles']) { - if ( - this.isEnabled && - this.ebtContext$ && - !isEqual(this.ebtContext$.getValue().discoverProfiles, discoverProfiles) - ) { - this.ebtContext$.next({ - discoverProfiles, - }); - } - } - - public getProfilesContext() { - return this.ebtContext$?.getValue()?.discoverProfiles; - } - - public disableAndReset() { - this.updateProfilesContextWith([]); - this.isEnabled = false; - } -} diff --git a/src/plugins/discover/public/services/discover_ebt_manager.test.ts b/src/plugins/discover/public/services/discover_ebt_manager.test.ts new file mode 100644 index 0000000000000..0ed20dacdb0ce --- /dev/null +++ b/src/plugins/discover/public/services/discover_ebt_manager.test.ts @@ -0,0 +1,242 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { BehaviorSubject } from 'rxjs'; +import { coreMock } from '@kbn/core/public/mocks'; +import { DiscoverEBTManager } from './discover_ebt_manager'; +import { FieldsMetadataPublicStart } from '@kbn/fields-metadata-plugin/public'; + +describe('DiscoverEBTManager', () => { + let discoverEBTContextManager: DiscoverEBTManager; + + const coreSetupMock = coreMock.createSetup(); + + const fieldsMetadata = { + getClient: jest.fn().mockResolvedValue({ + find: jest.fn().mockResolvedValue({ + fields: { + test: { + short: 'test', + }, + }, + }), + }), + } as unknown as FieldsMetadataPublicStart; + + beforeEach(() => { + discoverEBTContextManager = new DiscoverEBTManager(); + }); + + describe('register', () => { + it('should register the context provider and custom events', () => { + discoverEBTContextManager.initialize({ + core: coreSetupMock, + shouldInitializeCustomContext: true, + shouldInitializeCustomEvents: true, + }); + + expect(coreSetupMock.analytics.registerContextProvider).toHaveBeenCalledWith({ + name: 'discover_context', + context$: expect.any(BehaviorSubject), + schema: { + discoverProfiles: { + type: 'array', + items: { + type: 'keyword', + _meta: { + description: 'List of active Discover context awareness profiles', + }, + }, + }, + }, + }); + + expect(coreSetupMock.analytics.registerEventType).toHaveBeenCalledWith({ + eventType: 'discover_field_usage', + schema: { + eventName: { + type: 'keyword', + _meta: { + description: + 'The name of the event that is tracked in the metrics i.e. dataTableSelection, dataTableRemoval', + }, + }, + fieldName: { + type: 'keyword', + _meta: { + description: "Field name if it's a part of ECS schema", + optional: true, + }, + }, + filterOperation: { + type: 'keyword', + _meta: { + description: "Operation type when a filter is added i.e. '+', '-', '_exists_'", + optional: true, + }, + }, + }, + }); + }); + }); + + describe('updateProfilesWith', () => { + it('should update the profiles with the provided props', () => { + const dscProfiles = ['profile1', 'profile2']; + const dscProfiles2 = ['profile21', 'profile22']; + discoverEBTContextManager.initialize({ + core: coreSetupMock, + shouldInitializeCustomContext: true, + shouldInitializeCustomEvents: false, + }); + discoverEBTContextManager.enableContext(); + + discoverEBTContextManager.updateProfilesContextWith(dscProfiles); + expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); + + discoverEBTContextManager.updateProfilesContextWith(dscProfiles2); + expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles2); + }); + + it('should not update the profiles if profile list did not change', () => { + const dscProfiles = ['profile1', 'profile2']; + const dscProfiles2 = ['profile1', 'profile2']; + discoverEBTContextManager.initialize({ + core: coreSetupMock, + shouldInitializeCustomContext: true, + shouldInitializeCustomEvents: false, + }); + discoverEBTContextManager.enableContext(); + + discoverEBTContextManager.updateProfilesContextWith(dscProfiles); + expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); + + discoverEBTContextManager.updateProfilesContextWith(dscProfiles2); + expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); + }); + + it('should not update the profiles if not enabled yet', () => { + const dscProfiles = ['profile1', 'profile2']; + discoverEBTContextManager.initialize({ + core: coreSetupMock, + shouldInitializeCustomContext: true, + shouldInitializeCustomEvents: false, + }); + + discoverEBTContextManager.updateProfilesContextWith(dscProfiles); + expect(discoverEBTContextManager.getProfilesContext()).toEqual([]); + }); + + it('should not update the profiles after resetting unless enabled again', () => { + const dscProfiles = ['profile1', 'profile2']; + discoverEBTContextManager.initialize({ + core: coreSetupMock, + shouldInitializeCustomContext: true, + shouldInitializeCustomEvents: false, + }); + discoverEBTContextManager.enableContext(); + discoverEBTContextManager.updateProfilesContextWith(dscProfiles); + expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); + discoverEBTContextManager.disableAndResetContext(); + expect(discoverEBTContextManager.getProfilesContext()).toEqual([]); + discoverEBTContextManager.updateProfilesContextWith(dscProfiles); + expect(discoverEBTContextManager.getProfilesContext()).toEqual([]); + discoverEBTContextManager.enableContext(); + discoverEBTContextManager.updateProfilesContextWith(dscProfiles); + expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); + }); + }); + + describe('trackFieldUsageEvent', () => { + it('should track the field usage when a field is added to the table', async () => { + discoverEBTContextManager.initialize({ + core: coreSetupMock, + shouldInitializeCustomContext: false, + shouldInitializeCustomEvents: true, + }); + + await discoverEBTContextManager.trackDataTableSelection({ + fieldName: 'test', + fieldsMetadata, + }); + + expect(coreSetupMock.analytics.reportEvent).toHaveBeenCalledWith('discover_field_usage', { + eventName: 'dataTableSelection', + fieldName: 'test', + }); + + await discoverEBTContextManager.trackDataTableSelection({ + fieldName: 'test2', + fieldsMetadata, + }); + + expect(coreSetupMock.analytics.reportEvent).toHaveBeenLastCalledWith('discover_field_usage', { + eventName: 'dataTableSelection', // non-ECS fields would not be included in properties + }); + }); + + it('should track the field usage when a field is removed from the table', async () => { + discoverEBTContextManager.initialize({ + core: coreSetupMock, + shouldInitializeCustomContext: false, + shouldInitializeCustomEvents: true, + }); + + await discoverEBTContextManager.trackDataTableRemoval({ + fieldName: 'test', + fieldsMetadata, + }); + + expect(coreSetupMock.analytics.reportEvent).toHaveBeenCalledWith('discover_field_usage', { + eventName: 'dataTableRemoval', + fieldName: 'test', + }); + + await discoverEBTContextManager.trackDataTableRemoval({ + fieldName: 'test2', + fieldsMetadata, + }); + + expect(coreSetupMock.analytics.reportEvent).toHaveBeenLastCalledWith('discover_field_usage', { + eventName: 'dataTableRemoval', // non-ECS fields would not be included in properties + }); + }); + + it('should track the field usage when a filter is created', async () => { + discoverEBTContextManager.initialize({ + core: coreSetupMock, + shouldInitializeCustomContext: false, + shouldInitializeCustomEvents: true, + }); + + await discoverEBTContextManager.trackFilterAddition({ + fieldName: 'test', + fieldsMetadata, + filterOperation: '+', + }); + + expect(coreSetupMock.analytics.reportEvent).toHaveBeenCalledWith('discover_field_usage', { + eventName: 'filterAddition', + fieldName: 'test', + filterOperation: '+', + }); + + await discoverEBTContextManager.trackFilterAddition({ + fieldName: 'test2', + fieldsMetadata, + filterOperation: '_exists_', + }); + + expect(coreSetupMock.analytics.reportEvent).toHaveBeenLastCalledWith('discover_field_usage', { + eventName: 'filterAddition', // non-ECS fields would not be included in properties + filterOperation: '_exists_', + }); + }); + }); +}); diff --git a/src/plugins/discover/public/services/discover_ebt_manager.ts b/src/plugins/discover/public/services/discover_ebt_manager.ts new file mode 100644 index 0000000000000..420eb6c244444 --- /dev/null +++ b/src/plugins/discover/public/services/discover_ebt_manager.ts @@ -0,0 +1,219 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { BehaviorSubject } from 'rxjs'; +import { isEqual } from 'lodash'; +import type { CoreSetup } from '@kbn/core-lifecycle-browser'; +import type { FieldsMetadataPublicStart } from '@kbn/fields-metadata-plugin/public'; + +const FIELD_USAGE_EVENT_TYPE = 'discover_field_usage'; +const FIELD_USAGE_EVENT_NAME = 'eventName'; +const FIELD_USAGE_FIELD_NAME = 'fieldName'; +const FIELD_USAGE_FILTER_OPERATION = 'filterOperation'; + +type FilterOperation = '+' | '-' | '_exists_'; + +export enum FieldUsageEventName { + dataTableSelection = 'dataTableSelection', + dataTableRemoval = 'dataTableRemoval', + filterAddition = 'filterAddition', +} +interface FieldUsageEventData { + [FIELD_USAGE_EVENT_NAME]: FieldUsageEventName; + [FIELD_USAGE_FIELD_NAME]?: string; + [FIELD_USAGE_FILTER_OPERATION]?: FilterOperation; +} + +export interface DiscoverEBTContextProps { + discoverProfiles: string[]; // Discover Context Awareness Profiles +} +export type DiscoverEBTContext = BehaviorSubject; + +export class DiscoverEBTManager { + private isCustomContextEnabled: boolean = false; + private customContext$: DiscoverEBTContext | undefined; + private reportEvent: CoreSetup['analytics']['reportEvent'] | undefined; + + constructor() {} + + // https://docs.elastic.dev/telemetry/collection/event-based-telemetry + public initialize({ + core, + shouldInitializeCustomContext, + shouldInitializeCustomEvents, + }: { + core: CoreSetup; + shouldInitializeCustomContext: boolean; + shouldInitializeCustomEvents: boolean; + }) { + if (shouldInitializeCustomContext) { + // Register Discover specific context to be used in EBT + const context$ = new BehaviorSubject({ + discoverProfiles: [], + }); + core.analytics.registerContextProvider({ + name: 'discover_context', + context$, + schema: { + discoverProfiles: { + type: 'array', + items: { + type: 'keyword', + _meta: { + description: 'List of active Discover context awareness profiles', + }, + }, + }, + // If we decide to extend EBT context with more properties, we can do it here + }, + }); + this.customContext$ = context$; + } + + if (shouldInitializeCustomEvents) { + // Register Discover events to be used with EBT + core.analytics.registerEventType({ + eventType: FIELD_USAGE_EVENT_TYPE, + schema: { + [FIELD_USAGE_EVENT_NAME]: { + type: 'keyword', + _meta: { + description: + 'The name of the event that is tracked in the metrics i.e. dataTableSelection, dataTableRemoval', + }, + }, + [FIELD_USAGE_FIELD_NAME]: { + type: 'keyword', + _meta: { + description: "Field name if it's a part of ECS schema", + optional: true, + }, + }, + [FIELD_USAGE_FILTER_OPERATION]: { + type: 'keyword', + _meta: { + description: "Operation type when a filter is added i.e. '+', '-', '_exists_'", + optional: true, + }, + }, + }, + }); + this.reportEvent = core.analytics.reportEvent; + } + } + + public enableContext() { + this.isCustomContextEnabled = true; + } + + public disableAndResetContext() { + this.updateProfilesContextWith([]); + this.isCustomContextEnabled = false; + } + + public updateProfilesContextWith(discoverProfiles: DiscoverEBTContextProps['discoverProfiles']) { + if ( + this.isCustomContextEnabled && + this.customContext$ && + !isEqual(this.customContext$.getValue().discoverProfiles, discoverProfiles) + ) { + this.customContext$.next({ + discoverProfiles, + }); + } + } + + public getProfilesContext() { + return this.customContext$?.getValue()?.discoverProfiles; + } + + private async trackFieldUsageEvent({ + eventName, + fieldName, + filterOperation, + fieldsMetadata, + }: { + eventName: FieldUsageEventName; + fieldName: string; + filterOperation?: FilterOperation; + fieldsMetadata: FieldsMetadataPublicStart | undefined; + }) { + if (!this.reportEvent) { + return; + } + + const eventData: FieldUsageEventData = { + [FIELD_USAGE_EVENT_NAME]: eventName, + }; + + if (fieldsMetadata) { + const client = await fieldsMetadata.getClient(); + const { fields } = await client.find({ + attributes: ['short'], + fieldNames: [fieldName], + }); + + // excludes non ECS fields + if (fields[fieldName]?.short) { + eventData[FIELD_USAGE_FIELD_NAME] = fieldName; + } + } + + if (filterOperation) { + eventData[FIELD_USAGE_FILTER_OPERATION] = filterOperation; + } + + this.reportEvent(FIELD_USAGE_EVENT_TYPE, eventData); + } + + public async trackDataTableSelection({ + fieldName, + fieldsMetadata, + }: { + fieldName: string; + fieldsMetadata: FieldsMetadataPublicStart | undefined; + }) { + await this.trackFieldUsageEvent({ + eventName: FieldUsageEventName.dataTableSelection, + fieldName, + fieldsMetadata, + }); + } + + public async trackDataTableRemoval({ + fieldName, + fieldsMetadata, + }: { + fieldName: string; + fieldsMetadata: FieldsMetadataPublicStart | undefined; + }) { + await this.trackFieldUsageEvent({ + eventName: FieldUsageEventName.dataTableRemoval, + fieldName, + fieldsMetadata, + }); + } + + public async trackFilterAddition({ + fieldName, + fieldsMetadata, + filterOperation, + }: { + fieldName: string; + fieldsMetadata: FieldsMetadataPublicStart | undefined; + filterOperation: FilterOperation; + }) { + await this.trackFieldUsageEvent({ + eventName: FieldUsageEventName.filterAddition, + fieldName, + fieldsMetadata, + filterOperation, + }); + } +} diff --git a/test/functional/apps/discover/context_awareness/_data_source_profile.ts b/test/functional/apps/discover/context_awareness/_data_source_profile.ts index ecf4b2fb29c4c..35e3552afa655 100644 --- a/test/functional/apps/discover/context_awareness/_data_source_profile.ts +++ b/test/functional/apps/discover/context_awareness/_data_source_profile.ts @@ -12,115 +12,16 @@ import expect from '@kbn/expect'; import type { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const { common, discover, unifiedFieldList, dashboard, header, timePicker } = getPageObjects([ + const { common, discover, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'unifiedFieldList', - 'dashboard', - 'header', - 'timePicker', ]); const testSubjects = getService('testSubjects'); const dataViews = getService('dataViews'); const dataGrid = getService('dataGrid'); - const monacoEditor = getService('monacoEditor'); - const ebtUIHelper = getService('kibana_ebt_ui'); - const retry = getService('retry'); - const esArchiver = getService('esArchiver'); - const kibanaServer = getService('kibanaServer'); - const dashboardAddPanel = getService('dashboardAddPanel'); describe('data source profile', () => { - describe('telemetry', () => { - before(async () => { - await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); - await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); - }); - - after(async () => { - await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); - }); - - it('should set EBT context for telemetry events with default profile', async () => { - await common.navigateToApp('discover'); - await discover.selectTextBaseLang(); - await discover.waitUntilSearchingHasFinished(); - await monacoEditor.setCodeEditorValue('from my-example-* | sort @timestamp desc'); - await ebtUIHelper.setOptIn(true); - await testSubjects.click('querySubmitButton'); - await discover.waitUntilSearchingHasFinished(); - - const events = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { - eventTypes: ['performance_metric'], - withTimeoutMs: 500, - }); - - expect(events[events.length - 1].context.discoverProfiles).to.eql([ - 'example-root-profile', - 'default-data-source-profile', - ]); - }); - - it('should set EBT context for telemetry events when example profile and reset', async () => { - await common.navigateToApp('discover'); - await discover.selectTextBaseLang(); - await discover.waitUntilSearchingHasFinished(); - await monacoEditor.setCodeEditorValue('from my-example-logs | sort @timestamp desc'); - await ebtUIHelper.setOptIn(true); - await testSubjects.click('querySubmitButton'); - await discover.waitUntilSearchingHasFinished(); - - const events = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { - eventTypes: ['performance_metric'], - withTimeoutMs: 500, - }); - - expect(events[events.length - 1].context.discoverProfiles).to.eql([ - 'example-root-profile', - 'example-data-source-profile', - ]); - - // should reset the profiles when navigating away from Discover - await testSubjects.click('logo'); - await retry.waitFor('home page to open', async () => { - return (await testSubjects.getVisibleText('euiBreadcrumb')) === 'Home'; - }); - await testSubjects.click('addSampleData'); - - await retry.try(async () => { - const eventsAfter = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { - eventTypes: ['click'], - withTimeoutMs: 500, - }); - - expect(eventsAfter[eventsAfter.length - 1].context.discoverProfiles).to.eql([]); - }); - }); - - it('should not set EBT context for embeddables', async () => { - await dashboard.navigateToApp(); - await dashboard.gotoDashboardLandingPage(); - await dashboard.clickNewDashboard(); - await timePicker.setDefaultAbsoluteRange(); - await ebtUIHelper.setOptIn(true); - await dashboardAddPanel.addSavedSearch('A Saved Search'); - await header.waitUntilLoadingHasFinished(); - await dashboard.waitForRenderComplete(); - const rows = await dataGrid.getDocTableRows(); - expect(rows.length).to.be.above(0); - await testSubjects.click('dashboardEditorMenuButton'); - - const events = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { - eventTypes: ['click'], - withTimeoutMs: 500, - }); - - expect( - events.every((event) => !(event.context.discoverProfiles as string[])?.length) - ).to.be(true); - }); - }); - describe('ES|QL mode', () => { describe('cell renderers', () => { it('should render custom @timestamp but not custom log.level', async () => { diff --git a/test/functional/apps/discover/context_awareness/_telemetry.ts b/test/functional/apps/discover/context_awareness/_telemetry.ts new file mode 100644 index 0000000000000..587de698f9336 --- /dev/null +++ b/test/functional/apps/discover/context_awareness/_telemetry.ts @@ -0,0 +1,326 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import expect from '@kbn/expect'; +import type { FtrProviderContext } from '../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const { common, discover, unifiedFieldList, dashboard, header, timePicker } = getPageObjects([ + 'common', + 'discover', + 'unifiedFieldList', + 'dashboard', + 'header', + 'timePicker', + ]); + const testSubjects = getService('testSubjects'); + const dataGrid = getService('dataGrid'); + const dataViews = getService('dataViews'); + const monacoEditor = getService('monacoEditor'); + const ebtUIHelper = getService('kibana_ebt_ui'); + const retry = getService('retry'); + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); + const dashboardAddPanel = getService('dashboardAddPanel'); + + describe('telemetry', () => { + describe('context', () => { + before(async () => { + await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); + }); + + after(async () => { + await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); + }); + + it('should set EBT context for telemetry events with default profile', async () => { + await common.navigateToApp('discover'); + await discover.selectTextBaseLang(); + await discover.waitUntilSearchingHasFinished(); + await monacoEditor.setCodeEditorValue('from my-example-* | sort @timestamp desc'); + await ebtUIHelper.setOptIn(true); + await testSubjects.click('querySubmitButton'); + await discover.waitUntilSearchingHasFinished(); + + const events = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['performance_metric'], + withTimeoutMs: 500, + }); + + expect(events[events.length - 1].context.discoverProfiles).to.eql([ + 'example-root-profile', + 'default-data-source-profile', + ]); + }); + + it('should set EBT context for telemetry events when example profile and reset', async () => { + await common.navigateToApp('discover'); + await discover.selectTextBaseLang(); + await discover.waitUntilSearchingHasFinished(); + await monacoEditor.setCodeEditorValue('from my-example-logs | sort @timestamp desc'); + await ebtUIHelper.setOptIn(true); + await testSubjects.click('querySubmitButton'); + await discover.waitUntilSearchingHasFinished(); + + const events = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['performance_metric'], + withTimeoutMs: 500, + }); + + expect(events[events.length - 1].context.discoverProfiles).to.eql([ + 'example-root-profile', + 'example-data-source-profile', + ]); + + // should reset the profiles when navigating away from Discover + await testSubjects.click('logo'); + await retry.waitFor('home page to open', async () => { + return (await testSubjects.getVisibleText('euiBreadcrumb')) === 'Home'; + }); + await testSubjects.click('addSampleData'); + + await retry.try(async () => { + const eventsAfter = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['click'], + withTimeoutMs: 500, + }); + + expect(eventsAfter[eventsAfter.length - 1].context.discoverProfiles).to.eql([]); + }); + }); + + it('should not set EBT context for embeddables', async () => { + await dashboard.navigateToApp(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultAbsoluteRange(); + await ebtUIHelper.setOptIn(true); + await dashboardAddPanel.addSavedSearch('A Saved Search'); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + const rows = await dataGrid.getDocTableRows(); + expect(rows.length).to.be.above(0); + await testSubjects.click('dashboardEditorMenuButton'); + + const events = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['click'], + withTimeoutMs: 500, + }); + + expect( + events.length > 0 && + events.every((event) => !(event.context.discoverProfiles as string[])?.length) + ).to.be(true); + }); + }); + + describe('events', () => { + beforeEach(async () => { + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + }); + + it('should track field usage when a field is added to the table', async () => { + await dataViews.switchToAndValidate('my-example-*'); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + await ebtUIHelper.setOptIn(true); + await unifiedFieldList.clickFieldListItemAdd('service.name'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + + const [event] = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['discover_field_usage'], + withTimeoutMs: 500, + }); + + expect(event.properties).to.eql({ + eventName: 'dataTableSelection', + fieldName: 'service.name', + }); + + await unifiedFieldList.clickFieldListItemAdd('_score'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + + const [_, event2] = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['discover_field_usage'], + withTimeoutMs: 500, + }); + + expect(event2.properties).to.eql({ + eventName: 'dataTableSelection', + }); + }); + + it('should track field usage when a field is removed from the table', async () => { + await dataViews.switchToAndValidate('my-example-logs'); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + await ebtUIHelper.setOptIn(true); + await unifiedFieldList.clickFieldListItemRemove('log.level'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + + const [event] = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['discover_field_usage'], + withTimeoutMs: 500, + }); + + expect(event.properties).to.eql({ + eventName: 'dataTableRemoval', + fieldName: 'log.level', + }); + }); + + it('should track field usage when a filter is added', async () => { + await dataViews.switchToAndValidate('my-example-logs'); + await discover.waitUntilSearchingHasFinished(); + await ebtUIHelper.setOptIn(true); + await dataGrid.clickCellFilterForButtonExcludingControlColumns(0, 0); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + + const [event] = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['discover_field_usage'], + withTimeoutMs: 500, + }); + + expect(event.properties).to.eql({ + eventName: 'filterAddition', + fieldName: '@timestamp', + filterOperation: '+', + }); + + await unifiedFieldList.clickFieldListExistsFilter('log.level'); + + const [_, event2] = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['discover_field_usage'], + withTimeoutMs: 500, + }); + + expect(event2.properties).to.eql({ + eventName: 'filterAddition', + fieldName: 'log.level', + filterOperation: '_exists_', + }); + }); + + it('should track field usage for doc viewer too', async () => { + await dataViews.switchToAndValidate('my-example-logs'); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + await ebtUIHelper.setOptIn(true); + + await dataGrid.clickRowToggle(); + await discover.isShowingDocViewer(); + + // event 1 + await dataGrid.clickFieldActionInFlyout('service.name', 'toggleColumnButton'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + + // event 2 + await dataGrid.clickFieldActionInFlyout('log.level', 'toggleColumnButton'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + + // event 3 + await dataGrid.clickFieldActionInFlyout('log.level', 'addFilterOutValueButton'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + + const [event1, event2, event3] = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['discover_field_usage'], + withTimeoutMs: 500, + }); + + expect(event1.properties).to.eql({ + eventName: 'dataTableSelection', + fieldName: 'service.name', + }); + + expect(event2.properties).to.eql({ + eventName: 'dataTableRemoval', + fieldName: 'log.level', + }); + + expect(event3.properties).to.eql({ + eventName: 'filterAddition', + fieldName: 'log.level', + filterOperation: '-', + }); + }); + + it('should track field usage on surrounding documents page', async () => { + await dataViews.switchToAndValidate('my-example-logs'); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + + await dataGrid.clickRowToggle({ rowIndex: 1 }); + await discover.isShowingDocViewer(); + + const [, surroundingActionEl] = await dataGrid.getRowActions(); + await surroundingActionEl.click(); + await header.waitUntilLoadingHasFinished(); + await ebtUIHelper.setOptIn(true); + + await dataGrid.clickRowToggle({ rowIndex: 0 }); + await discover.isShowingDocViewer(); + + // event 1 + await dataGrid.clickFieldActionInFlyout('service.name', 'toggleColumnButton'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + + // event 2 + await dataGrid.clickFieldActionInFlyout('log.level', 'toggleColumnButton'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + + // event 3 + await dataGrid.clickFieldActionInFlyout('log.level', 'addFilterOutValueButton'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + + const [event1, event2, event3] = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['discover_field_usage'], + withTimeoutMs: 500, + }); + + expect(event1.properties).to.eql({ + eventName: 'dataTableSelection', + fieldName: 'service.name', + }); + + expect(event2.properties).to.eql({ + eventName: 'dataTableRemoval', + fieldName: 'log.level', + }); + + expect(event3.properties).to.eql({ + eventName: 'filterAddition', + fieldName: 'log.level', + filterOperation: '-', + }); + + expect(event3.context.discoverProfiles).to.eql([ + 'example-root-profile', + 'example-data-source-profile', + ]); + }); + }); + }); +} diff --git a/test/functional/apps/discover/context_awareness/index.ts b/test/functional/apps/discover/context_awareness/index.ts index 655f4460883d1..f937f38c741f9 100644 --- a/test/functional/apps/discover/context_awareness/index.ts +++ b/test/functional/apps/discover/context_awareness/index.ts @@ -38,6 +38,7 @@ export default function ({ getService, getPageObjects, loadTestFile }: FtrProvid loadTestFile(require.resolve('./_root_profile')); loadTestFile(require.resolve('./_data_source_profile')); + loadTestFile(require.resolve('./_telemetry')); loadTestFile(require.resolve('./extensions/_get_row_indicator_provider')); loadTestFile(require.resolve('./extensions/_get_row_additional_leading_controls')); loadTestFile(require.resolve('./extensions/_get_doc_viewer')); From f207c2c176ec6d96768f4fefec546596cce57463 Mon Sep 17 00:00:00 2001 From: Kurt Date: Mon, 30 Sep 2024 12:34:04 -0400 Subject: [PATCH 34/60] ESLint Rule to discourage hashes being created with unsafe algorithms (#190973) Closes https://github.com/elastic/kibana/issues/185601 ## Summary Using non-compliant algorithms with Node Cryptos createHash function will cause failures when running Kibana in FIPS mode. We want to discourage usages of such algorithms. --------- Co-authored-by: Sid Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine --- .../src/bundle_routes/utils.ts | 2 +- .../src/bootstrap/bootstrap_renderer.ts | 2 +- .../src/get_migration_hash.ts | 2 +- packages/kbn-es/src/install/install_source.ts | 4 +- packages/kbn-eslint-config/.eslintrc.js | 1 + packages/kbn-eslint-plugin-eslint/index.js | 1 + .../rules/no_unsafe_hash.js | 166 ++++++++++++++++++ .../rules/no_unsafe_hash.test.js | 142 +++++++++++++++ .../report_failures_to_file.ts | 2 +- .../kbn-optimizer/src/common/dll_manifest.ts | 2 +- .../server/rest_api_routes/internal/fields.ts | 2 +- .../server/routes/fullstory.ts | 2 +- .../common/plugins/cases/server/routes.ts | 2 +- 13 files changed, 320 insertions(+), 10 deletions(-) create mode 100644 packages/kbn-eslint-plugin-eslint/rules/no_unsafe_hash.js create mode 100644 packages/kbn-eslint-plugin-eslint/rules/no_unsafe_hash.test.js diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/utils.ts b/packages/core/apps/core-apps-server-internal/src/bundle_routes/utils.ts index 05a31f85a51cc..ee115cda6e5b8 100644 --- a/packages/core/apps/core-apps-server-internal/src/bundle_routes/utils.ts +++ b/packages/core/apps/core-apps-server-internal/src/bundle_routes/utils.ts @@ -13,7 +13,7 @@ import * as Rx from 'rxjs'; import { map, takeUntil } from 'rxjs'; export const generateFileHash = (fd: number): Promise => { - const hash = createHash('sha1'); + const hash = createHash('sha1'); // eslint-disable-line @kbn/eslint/no_unsafe_hash const read = createReadStream(null as any, { fd, start: 0, diff --git a/packages/core/rendering/core-rendering-server-internal/src/bootstrap/bootstrap_renderer.ts b/packages/core/rendering/core-rendering-server-internal/src/bootstrap/bootstrap_renderer.ts index 757862d1d3c6c..8aa0d2a6c0387 100644 --- a/packages/core/rendering/core-rendering-server-internal/src/bootstrap/bootstrap_renderer.ts +++ b/packages/core/rendering/core-rendering-server-internal/src/bootstrap/bootstrap_renderer.ts @@ -114,7 +114,7 @@ export const bootstrapRendererFactory: BootstrapRendererFactory = ({ publicPathMap, }); - const hash = createHash('sha1'); + const hash = createHash('sha1'); // eslint-disable-line @kbn/eslint/no_unsafe_hash hash.update(body); const etag = hash.digest('hex'); diff --git a/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.ts b/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.ts index 461188703b3aa..c65f6330e176b 100644 --- a/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.ts +++ b/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.ts @@ -16,7 +16,7 @@ type SavedObjectTypeMigrationHash = string; export const getMigrationHash = (soType: SavedObjectsType): SavedObjectTypeMigrationHash => { const migInfo = extractMigrationInfo(soType); - const hash = createHash('sha1'); + const hash = createHash('sha1'); // eslint-disable-line @kbn/eslint/no_unsafe_hash const hashParts = [ migInfo.name, diff --git a/packages/kbn-es/src/install/install_source.ts b/packages/kbn-es/src/install/install_source.ts index 7dfbe8d7bd5b3..244b349002829 100644 --- a/packages/kbn-es/src/install/install_source.ts +++ b/packages/kbn-es/src/install/install_source.ts @@ -84,7 +84,7 @@ async function sourceInfo(cwd: string, license: string, log: ToolingLog = defaul log.info('on %s at %s', chalk.bold(branch), chalk.bold(sha)); log.info('%s locally modified file(s)', chalk.bold(status.modified.length)); - const etag = crypto.createHash('md5').update(branch); + const etag = crypto.createHash('md5').update(branch); // eslint-disable-line @kbn/eslint/no_unsafe_hash etag.update(sha); // for changed files, use last modified times in hash calculation @@ -92,7 +92,7 @@ async function sourceInfo(cwd: string, license: string, log: ToolingLog = defaul etag.update(fs.statSync(path.join(cwd, file.path)).mtime.toString()); }); - const cwdHash = crypto.createHash('md5').update(cwd).digest('hex').substr(0, 8); + const cwdHash = crypto.createHash('md5').update(cwd).digest('hex').substr(0, 8); // eslint-disable-line @kbn/eslint/no_unsafe_hash const basename = `${branch}-${task}-${cwdHash}`; const filename = `${basename}.${ext}`; diff --git a/packages/kbn-eslint-config/.eslintrc.js b/packages/kbn-eslint-config/.eslintrc.js index a68dc6ecd949e..205e5b182e215 100644 --- a/packages/kbn-eslint-config/.eslintrc.js +++ b/packages/kbn-eslint-config/.eslintrc.js @@ -314,6 +314,7 @@ module.exports = { '@kbn/eslint/no_constructor_args_in_property_initializers': 'error', '@kbn/eslint/no_this_in_property_initializers': 'error', '@kbn/eslint/no_unsafe_console': 'error', + '@kbn/eslint/no_unsafe_hash': 'error', '@kbn/imports/no_unresolvable_imports': 'error', '@kbn/imports/uniform_imports': 'error', '@kbn/imports/no_unused_imports': 'error', diff --git a/packages/kbn-eslint-plugin-eslint/index.js b/packages/kbn-eslint-plugin-eslint/index.js index 1b9c04a2b7918..5ff3d70ae8a32 100644 --- a/packages/kbn-eslint-plugin-eslint/index.js +++ b/packages/kbn-eslint-plugin-eslint/index.js @@ -19,5 +19,6 @@ module.exports = { no_constructor_args_in_property_initializers: require('./rules/no_constructor_args_in_property_initializers'), no_this_in_property_initializers: require('./rules/no_this_in_property_initializers'), no_unsafe_console: require('./rules/no_unsafe_console'), + no_unsafe_hash: require('./rules/no_unsafe_hash'), }, }; diff --git a/packages/kbn-eslint-plugin-eslint/rules/no_unsafe_hash.js b/packages/kbn-eslint-plugin-eslint/rules/no_unsafe_hash.js new file mode 100644 index 0000000000000..2088c196ddd60 --- /dev/null +++ b/packages/kbn-eslint-plugin-eslint/rules/no_unsafe_hash.js @@ -0,0 +1,166 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +const allowedAlgorithms = ['sha256', 'sha3-256', 'sha512']; + +module.exports = { + allowedAlgorithms, + meta: { + type: 'problem', + docs: { + description: 'Allow usage of createHash only with allowed algorithms.', + category: 'FIPS', + recommended: false, + }, + messages: { + noDisallowedHash: + 'Usage of {{functionName}} with "{{algorithm}}" is not allowed. Only the following algorithms are allowed: [{{allowedAlgorithms}}]. If you need to use a different algorithm, please contact the Kibana security team.', + }, + schema: [], + }, + create(context) { + let isCreateHashImported = false; + let createHashName = 'createHash'; + let cryptoLocalName = 'crypto'; + let usedFunctionName = ''; + const sourceCode = context.getSourceCode(); + + const disallowedAlgorithmNodes = new Set(); + + function isAllowedAlgorithm(algorithm) { + return allowedAlgorithms.includes(algorithm); + } + + function isHashOrCreateHash(value) { + if (value === 'hash' || value === 'createHash') { + usedFunctionName = value; + return true; + } + return false; + } + + function getIdentifierValue(node) { + const scope = sourceCode.getScope(node); + if (!scope) { + return; + } + const variable = scope.variables.find((variable) => variable.name === node.name); + if (variable && variable.defs.length > 0) { + const def = variable.defs[0]; + if ( + def.node.init && + def.node.init.type === 'Literal' && + !isAllowedAlgorithm(def.node.init.value) + ) { + disallowedAlgorithmNodes.add(node.name); + return def.node.init.value; + } + } + } + + return { + ImportDeclaration(node) { + if (node.source.value === 'crypto' || node.source.value === 'node:crypto') { + node.specifiers.forEach((specifier) => { + if ( + specifier.type === 'ImportSpecifier' && + isHashOrCreateHash(specifier.imported.name) + ) { + isCreateHashImported = true; + createHashName = specifier.local.name; // Capture local name (renamed or not) + } else if (specifier.type === 'ImportDefaultSpecifier') { + cryptoLocalName = specifier.local.name; + } + }); + } + }, + VariableDeclarator(node) { + if (node.init && node.init.type === 'Literal' && !isAllowedAlgorithm(node.init.value)) { + disallowedAlgorithmNodes.add(node.id.name); + } + }, + AssignmentExpression(node) { + if ( + node.right.type === 'Literal' && + node.right.value === 'md5' && + node.left.type === 'Identifier' + ) { + disallowedAlgorithmNodes.add(node.left.name); + } + }, + CallExpression(node) { + const callee = node.callee; + + if ( + callee.type === 'MemberExpression' && + callee.object.name === cryptoLocalName && + isHashOrCreateHash(callee.property.name) + ) { + const arg = node.arguments[0]; + if (arg) { + if (arg.type === 'Literal' && !isAllowedAlgorithm(arg.value)) { + context.report({ + node, + messageId: 'noDisallowedHash', + data: { + algorithm: arg.value, + allowedAlgorithms: allowedAlgorithms.join(', '), + functionName: usedFunctionName, + }, + }); + } else if (arg.type === 'Identifier') { + const identifierValue = getIdentifierValue(arg); + if (disallowedAlgorithmNodes.has(arg.name) && identifierValue) { + context.report({ + node, + messageId: 'noDisallowedHash', + data: { + algorithm: identifierValue, + allowedAlgorithms: allowedAlgorithms.join(', '), + functionName: usedFunctionName, + }, + }); + } + } + } + } + + if (isCreateHashImported && callee.name === createHashName) { + const arg = node.arguments[0]; + if (arg) { + if (arg.type === 'Literal' && !isAllowedAlgorithm(arg.value)) { + context.report({ + node, + messageId: 'noDisallowedHash', + data: { + algorithm: arg.value, + allowedAlgorithms: allowedAlgorithms.join(', '), + functionName: usedFunctionName, + }, + }); + } else if (arg.type === 'Identifier') { + const identifierValue = getIdentifierValue(arg); + if (disallowedAlgorithmNodes.has(arg.name) && identifierValue) { + context.report({ + node, + messageId: 'noDisallowedHash', + data: { + algorithm: identifierValue, + allowedAlgorithms: allowedAlgorithms.join(', '), + functionName: usedFunctionName, + }, + }); + } + } + } + } + }, + }; + }, +}; diff --git a/packages/kbn-eslint-plugin-eslint/rules/no_unsafe_hash.test.js b/packages/kbn-eslint-plugin-eslint/rules/no_unsafe_hash.test.js new file mode 100644 index 0000000000000..d384ea40819eb --- /dev/null +++ b/packages/kbn-eslint-plugin-eslint/rules/no_unsafe_hash.test.js @@ -0,0 +1,142 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +const { RuleTester } = require('eslint'); +const { allowedAlgorithms, ...rule } = require('./no_unsafe_hash'); + +const dedent = require('dedent'); + +const joinedAllowedAlgorithms = `[${allowedAlgorithms.join(', ')}]`; + +const ruleTester = new RuleTester({ + parser: require.resolve('@typescript-eslint/parser'), + parserOptions: { + sourceType: 'module', + ecmaVersion: 2018, + ecmaFeatures: { + jsx: true, + }, + }, +}); + +ruleTester.run('@kbn/eslint/no_unsafe_hash', rule, { + valid: [ + // valid import of crypto and call of createHash + { + code: dedent` + import crypto from 'crypto'; + crypto.createHash('sha256'); + `, + }, + // valid import and call of createHash + { + code: dedent` + import { createHash } from 'crypto'; + createHash('sha256'); + `, + }, + // valid import and call of createHash with a variable containing a compliant aglorithm + { + code: dedent` + import { createHash } from 'crypto'; + const myHash = 'sha256'; + createHash(myHash); + `, + }, + // valid import and call of hash with a variable containing a compliant aglorithm + { + code: dedent` + import { hash } from 'crypto'; + const myHash = 'sha256'; + hash(myHash); + `, + }, + ], + + invalid: [ + // invalid call of createHash when calling from crypto + { + code: dedent` + import crypto from 'crypto'; + crypto.createHash('md5'); + `, + errors: [ + { + line: 2, + message: `Usage of createHash with "md5" is not allowed. Only the following algorithms are allowed: ${joinedAllowedAlgorithms}. If you need to use a different algorithm, please contact the Kibana security team.`, + }, + ], + }, + // invalid call of createHash when importing directly + { + code: dedent` + import { createHash } from 'crypto'; + createHash('md5'); + `, + errors: [ + { + line: 2, + message: `Usage of createHash with "md5" is not allowed. Only the following algorithms are allowed: ${joinedAllowedAlgorithms}. If you need to use a different algorithm, please contact the Kibana security team.`, + }, + ], + }, + // invalid call of createHash when calling with a variable containing md5 + { + code: dedent` + import { createHash } from 'crypto'; + const myHash = 'md5'; + createHash(myHash); + `, + errors: [ + { + line: 3, + message: `Usage of createHash with "md5" is not allowed. Only the following algorithms are allowed: ${joinedAllowedAlgorithms}. If you need to use a different algorithm, please contact the Kibana security team.`, + }, + ], + }, + // invalid import and call of hash when importing directly + { + code: dedent` + import { hash } from 'crypto'; + hash('md5'); + `, + errors: [ + { + line: 2, + message: `Usage of hash with "md5" is not allowed. Only the following algorithms are allowed: ${joinedAllowedAlgorithms}. If you need to use a different algorithm, please contact the Kibana security team.`, + }, + ], + }, + { + code: dedent` + import _crypto from 'crypto'; + _crypto.hash('md5'); + `, + errors: [ + { + line: 2, + message: `Usage of hash with "md5" is not allowed. Only the following algorithms are allowed: ${joinedAllowedAlgorithms}. If you need to use a different algorithm, please contact the Kibana security team.`, + }, + ], + }, + + { + code: dedent` + import { hash as _hash } from 'crypto'; + _hash('md5'); + `, + errors: [ + { + line: 2, + message: `Usage of hash with "md5" is not allowed. Only the following algorithms are allowed: ${joinedAllowedAlgorithms}. If you need to use a different algorithm, please contact the Kibana security team.`, + }, + ], + }, + ], +}); diff --git a/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/report_failures_to_file.ts b/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/report_failures_to_file.ts index 7876efb8502a5..b1e3997ebf030 100644 --- a/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/report_failures_to_file.ts +++ b/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/report_failures_to_file.ts @@ -127,7 +127,7 @@ export async function reportFailuresToFile( // Jest could, in theory, fail 1000s of tests and write 1000s of failures // So let's just write files for the first 20 for (const failure of failures.slice(0, 20)) { - const hash = createHash('md5').update(failure.name).digest('hex'); + const hash = createHash('md5').update(failure.name).digest('hex'); // eslint-disable-line @kbn/eslint/no_unsafe_hash const filenameBase = `${ process.env.BUILDKITE_JOB_ID ? process.env.BUILDKITE_JOB_ID + '_' : '' }${hash}`; diff --git a/packages/kbn-optimizer/src/common/dll_manifest.ts b/packages/kbn-optimizer/src/common/dll_manifest.ts index 0a5bebefdeca5..fc8c597110156 100644 --- a/packages/kbn-optimizer/src/common/dll_manifest.ts +++ b/packages/kbn-optimizer/src/common/dll_manifest.ts @@ -20,7 +20,7 @@ export interface ParsedDllManifest { } const hash = (s: string) => { - return Crypto.createHash('sha1').update(s).digest('base64').replace(/=+$/, ''); + return Crypto.createHash('sha1').update(s).digest('base64').replace(/=+$/, ''); // eslint-disable-line @kbn/eslint/no_unsafe_hash }; export function parseDllManifest(manifest: DllManifest): ParsedDllManifest { diff --git a/src/plugins/data_views/server/rest_api_routes/internal/fields.ts b/src/plugins/data_views/server/rest_api_routes/internal/fields.ts index 7b13704f3c50a..0d8f8b4dd67b5 100644 --- a/src/plugins/data_views/server/rest_api_routes/internal/fields.ts +++ b/src/plugins/data_views/server/rest_api_routes/internal/fields.ts @@ -21,7 +21,7 @@ import { parseFields, IBody, IQuery, querySchema, validate } from './fields_for' import { DEFAULT_FIELD_CACHE_FRESHNESS } from '../../constants'; export function calculateHash(srcBuffer: Buffer) { - const hash = createHash('sha1'); + const hash = createHash('sha1'); // eslint-disable-line @kbn/eslint/no_unsafe_hash hash.update(srcBuffer); return hash.digest('hex'); } diff --git a/x-pack/plugins/cloud_integrations/cloud_full_story/server/routes/fullstory.ts b/x-pack/plugins/cloud_integrations/cloud_full_story/server/routes/fullstory.ts index 03e38baee4e91..d983191c726df 100644 --- a/x-pack/plugins/cloud_integrations/cloud_full_story/server/routes/fullstory.ts +++ b/x-pack/plugins/cloud_integrations/cloud_full_story/server/routes/fullstory.ts @@ -26,7 +26,7 @@ export const renderFullStoryLibraryFactory = (dist = true) => headers: HttpResponseOptions['headers']; }> => { const srcBuffer = await fs.readFile(FULLSTORY_LIBRARY_PATH); - const hash = createHash('sha1'); + const hash = createHash('sha1'); // eslint-disable-line @kbn/eslint/no_unsafe_hash hash.update(srcBuffer); const hashDigest = hash.digest('hex'); diff --git a/x-pack/test/cases_api_integration/common/plugins/cases/server/routes.ts b/x-pack/test/cases_api_integration/common/plugins/cases/server/routes.ts index 10139f636c809..3269f9f059446 100644 --- a/x-pack/test/cases_api_integration/common/plugins/cases/server/routes.ts +++ b/x-pack/test/cases_api_integration/common/plugins/cases/server/routes.ts @@ -19,7 +19,7 @@ import { CASES_TELEMETRY_TASK_NAME } from '@kbn/cases-plugin/common/constants'; import type { FixtureStartDeps } from './plugin'; const hashParts = (parts: string[]): string => { - const hash = createHash('sha1'); + const hash = createHash('sha1'); // eslint-disable-line @kbn/eslint/no_unsafe_hash const hashFeed = parts.join('-'); return hash.update(hashFeed).digest('hex'); }; From fefa59f41206c534297813af2cb6f732c2c59aeb Mon Sep 17 00:00:00 2001 From: Davis Plumlee <56367316+dplumlee@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:37:29 -0400 Subject: [PATCH 35/60] [Security Solution] Test plan for rule `type` field diff algorithm (#193372) ## Summary Related ticket: https://github.com/elastic/kibana/issues/190482 Adds test plan for diff algorithm for `type` field diff algorithm implemented here: https://github.com/elastic/kibana/pull/193369 ### 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) --- .../upgrade_review_algorithms.md | 117 ++++++++++++++++-- 1 file changed, 109 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/upgrade_review_algorithms.md b/x-pack/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/upgrade_review_algorithms.md index e65d366e0f44c..c4a39a994144f 100644 --- a/x-pack/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/upgrade_review_algorithms.md +++ b/x-pack/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/upgrade_review_algorithms.md @@ -17,12 +17,16 @@ Status: `in progress`. - [Rule field doesn't have an update and has no custom value - `AAA`](#rule-field-doesnt-have-an-update-and-has-no-custom-value---aaa) - [**Scenario: `AAA` - Rule field is any type**](#scenario-aaa---rule-field-is-any-type) - [Rule field doesn't have an update but has a custom value - `ABA`](#rule-field-doesnt-have-an-update-but-has-a-custom-value---aba) - - [**Scenario: `ABA` - Rule field is any type**](#scenario-aba---rule-field-is-any-type) + - [**Scenario: `ABA` - Rule field is any type except rule `type`**](#scenario-aba---rule-field-is-any-type-except-rule-type) + - [**Scenario: `ABA` - Rule field is rule `type`**](#scenario-aba---rule-field-is-rule-type) - [Rule field has an update and doesn't have a custom value - `AAB`](#rule-field-has-an-update-and-doesnt-have-a-custom-value---aab) - - [**Scenario: `AAB` - Rule field is any type**](#scenario-aab---rule-field-is-any-type) + - [**Scenario: `AAB` - Rule field is any type except rule `type`**](#scenario-aab---rule-field-is-any-type-except-rule-type) + - [**Scenario: `AAB` - Rule field is rule `type`**](#scenario-aab---rule-field-is-rule-type) - [Rule field has an update and a custom value that are the same - `ABB`](#rule-field-has-an-update-and-a-custom-value-that-are-the-same---abb) - - [**Scenario: `ABB` - Rule field is any type**](#scenario-abb---rule-field-is-any-type) + - [**Scenario: `ABB` - Rule field is any type except rule `type`**](#scenario-abb---rule-field-is-any-type-except-rule-type) + - [**Scenario: `ABB` - Rule field is rule `type`**](#scenario-abb---rule-field-is-rule-type) - [Rule field has an update and a custom value that are NOT the same - `ABC`](#rule-field-has-an-update-and-a-custom-value-that-are-not-the-same---abc) + - [**Scenario: `ABC` - Rule field is rule `type`**](#scenario-abc---rule-field-is-rule-type) - [**Scenario: `ABC` - Rule field is a number or single line string**](#scenario-abc---rule-field-is-a-number-or-single-line-string) - [**Scenario: `ABC` - Rule field is a mergeable multi line string**](#scenario-abc---rule-field-is-a-mergeable-multi-line-string) - [**Scenario: `ABC` - Rule field is a non-mergeable multi line string**](#scenario-abc---rule-field-is-a-non-mergeable-multi-line-string) @@ -37,6 +41,7 @@ Status: `in progress`. - [**Scenario: `-AB` - Rule field is an array of scalar values**](#scenario--ab---rule-field-is-an-array-of-scalar-values) - [**Scenario: `-AB` - Rule field is a solvable `data_source` object**](#scenario--ab---rule-field-is-a-solvable-data_source-object) - [**Scenario: `-AB` - Rule field is a non-solvable `data_source` object**](#scenario--ab---rule-field-is-a-non-solvable-data_source-object) + - [**Scenario: `-AB` - Rule field is rule `type`**](#scenario--ab---rule-field-is-rule-type) ## Useful information @@ -74,7 +79,7 @@ Status: `in progress`. #### **Scenario: `AAA` - Rule field is any type** -**Automation**: 10 integration tests with mock rules + a set of unit tests for each algorithm +**Automation**: 11 integration tests with mock rules + a set of unit tests for each algorithm ```Gherkin Given field is not customized by the user (current version == base version) @@ -85,6 +90,7 @@ And field should not be shown in the upgrade preview UI Examples: | algorithm | field_name | base_version | current_version | target_version | merged_version | +| rule type | type | "query" | "query" | "query" | "query" | | single line string | name | "A" | "A" | "A" | "A" | | multi line string | description | "My description.\nThis is a second line." | "My description.\nThis is a second line." | "My description.\nThis is a second line." | "My description.\nThis is a second line." | | number | risk_score | 1 | 1 | 1 | 1 | @@ -99,7 +105,7 @@ Examples: ### Rule field doesn't have an update but has a custom value - `ABA` -#### **Scenario: `ABA` - Rule field is any type** +#### **Scenario: `ABA` - Rule field is any type except rule `type`** **Automation**: 10 integration tests with mock rules + a set of unit tests for each algorithm @@ -124,9 +130,27 @@ Examples: | esql_query | esql_query | {query: "FROM query WHERE true", language: "esql"} | {query: "FROM query WHERE false", language: "esql"} | {query: "FROM query WHERE true", language: "esql"} | {query: "FROM query WHERE false", language: "esql"} | ``` +#### **Scenario: `ABA` - Rule field is rule `type`** + +**Automation**: 1 integration test with mock rules + a set of unit tests for each algorithm + +```Gherkin +Given field is customized by the user (current version != base version) +And field is not updated by Elastic in this upgrade (target version == base version) +Then for field the diff algorithm should output the target version as the merged one with a non-solvable conflict +And field should be returned from the `upgrade/_review` API endpoint +And field should be shown in the upgrade preview UI + +Examples: +| algorithm | field_name | base_version | current_version | target_version | merged_version | +| rule type | type | "query" | "saved_query" | "query" | "query" | +``` + +Notes: `type` field can only be changed between `query` and `saved_query` rule types in the UI and API via normal conventions, but the logic for others is still covered + ### Rule field has an update and doesn't have a custom value - `AAB` -#### **Scenario: `AAB` - Rule field is any type** +#### **Scenario: `AAB` - Rule field is any type except rule `type`** **Automation**: 10 integration tests with mock rules + a set of unit tests for each algorithm @@ -151,9 +175,27 @@ Examples: | esql_query | esql_query | {query: "FROM query WHERE true", language: "esql"} | {query: "FROM query WHERE true", language: "esql"} | {query: "FROM query WHERE false", language: "esql"} | {query: "FROM query WHERE false", language: "esql"} | ``` +#### **Scenario: `AAB` - Rule field is rule `type`** + +**Automation**: 1 integration test with mock rules + a set of unit tests for each algorithm + +```Gherkin +Given field is not customized by the user (current version == base version) +And field is updated by Elastic in this upgrade (target version != base version) +Then for field the diff algorithm should output the target version as the merged one with a non-solvable conflict +And field should be returned from the `upgrade/_review` API endpoint +And field should be shown in the upgrade preview UI + +Examples: +| algorithm | field_name | base_version | current_version | target_version | merged_version | +| rule type | type | "query" | "query" | "saved_query" | "saved_query" | +``` + +Notes: `type` field can only be changed between `query` and `saved_query` rule types in the UI and API via normal conventions, but the logic for others is still covered + ### Rule field has an update and a custom value that are the same - `ABB` -#### **Scenario: `ABB` - Rule field is any type** +#### **Scenario: `ABB` - Rule field is any type except rule `type`** **Automation**: 10 integration tests with mock rules + a set of unit tests for each algorithm @@ -179,8 +221,46 @@ Examples: | esql_query | esql_query | {query: "FROM query WHERE true", language: "esql"} | {query: "FROM query WHERE false", language: "esql"} | {query: "FROM query WHERE false", language: "esql"} | {query: "FROM query WHERE false", language: "esql"} | ``` +#### **Scenario: `ABB` - Rule field is rule `type`** + +**Automation**: 1 integration test with mock rules + a set of unit tests for each algorithm + +```Gherkin +Given field is customized by the user (current version != base version) +And field is updated by Elastic in this upgrade (target version != base version) +And customized field is the same as the Elastic update in this upgrade (current version == target version) +Then for field the diff algorithm should output the target version as the merged one with a non-solvable conflict +And field should be returned from the `upgrade/_review` API endpoint +And field should be shown in the upgrade preview UI + +Examples: +| algorithm | field_name | base_version | current_version | target_version | merged_version | +| rule type | type | "query" | "saved_query" | "saved_query" | "saved_query" | +``` + +Notes: `type` field can only be changed between `query` and `saved_query` rule types in the UI and API via normal conventions, but the logic for others is still covered + ### Rule field has an update and a custom value that are NOT the same - `ABC` +#### **Scenario: `ABC` - Rule field is rule `type`** + +**Automation**: 1 integration test with mock rules + a set of unit tests for the algorithms + +```Gherkin +Given field is customized by the user (current version != base version) +And field is updated by Elastic in this upgrade (target version != base version) +And customized field is different than the Elastic update in this upgrade (current version != target version) +Then for field the diff algorithm should output the target version as the merged one with a non-solvable conflict +And field should be returned from the `upgrade/_review` API endpoint +And field should be shown in the upgrade preview UI + +Examples: +| algorithm | field_name | base_version | current_version | target_version | merged_version | +| rule type | type | "query" | "saved_query" | "threshold" | "threshold" | +``` + +Notes: `type` field can only be changed between `query` and `saved_query` rule types in the UI and API via normal conventions, but the logic for others is still covered. This test case scenario cannot currently be reached. + #### **Scenario: `ABC` - Rule field is a number or single line string** **Automation**: 2 integration tests with mock rules + a set of unit tests for the algorithms @@ -328,7 +408,7 @@ Examples: #### **Scenario: `-AA` - Rule field is any type** -**Automation**: 9 integration tests with mock rules + a set of unit tests for each algorithm +**Automation**: 11 integration tests with mock rules + a set of unit tests for each algorithm ```Gherkin Given at least 1 installed prebuilt rule has a new version available @@ -340,6 +420,7 @@ And field should not be shown in the upgrade preview UI Examples: | algorithm | field_name | base_version | current_version | target_version | merged_version | +| rule type | type | N/A | "query" | "query" | "query" | | single line string | name | N/A | "A" | "A" | "A" | | multi line string | description | N/A | "My description.\nThis is a second line." | "My description.\nThis is a second line." | "My description.\nThis is a second line." | | number | risk_score | N/A | 1 | 1 | 1 | @@ -438,3 +519,23 @@ Examples: | algorithm | base_version | current_version | target_version | merged_version | | data_source | N/A | {type: "index_patterns", "index_patterns": ["one", "two", "three"]} | {type: "data_view", "data_view_id": "A"} | {type: "data_view", "data_view_id": "A"} | ``` + +#### **Scenario: `-AB` - Rule field is rule `type`** + +**Automation**: 1 integration test with mock rules + a set of unit tests for the algorithm + +```Gherkin +Given at least 1 installed prebuilt rule has a new version available +And the base version of the rule cannot be determined +And customized data_source field is different than the Elastic update in this upgrade (current version != target version) +And current version and target version are not both array fields in data_source +Then for data_source field the diff algorithm should output the target version as the merged version with a non-solvable conflict +And data_source field should be returned from the `upgrade/_review` API endpoint +And data_source field should be shown in the upgrade preview UI + +Examples: +| algorithm | base_version | current_version | target_version | merged_version | +| rule type | N/A | "query" | "saved_query" | "saved_query" | +``` + +Notes: `type` field can only be changed between `query` and `saved_query` rule types in the UI and API via normal conventions, but the logic for others is still covered From c1f72d71cade7423ab5ab5d3ed68f4aa086f5faf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Mon, 30 Sep 2024 18:19:19 +0100 Subject: [PATCH 36/60] [Inventory] Typing entities (#194431) Adds typescript to the Entity type. It correctly infers the type based on the entity.type field. Screenshot 2024-09-30 at 14 03 27 Screenshot 2024-09-30 at 14 03 37 Screenshot 2024-09-30 at 14 03 49 --- .../inventory/common/entities.ts | 42 +++++++++++++++++++ .../entities_grid/entities_grid.stories.tsx | 2 +- .../entities_grid/mock/entities_mock.ts | 4 +- .../routes/entities/get_latest_entities.ts | 19 ++------- .../common/field_names/elasticsearch.ts | 1 + .../observability_shared/common/index.ts | 1 + 6 files changed, 50 insertions(+), 19 deletions(-) diff --git a/x-pack/plugins/observability_solution/inventory/common/entities.ts b/x-pack/plugins/observability_solution/inventory/common/entities.ts index 2135688d75467..5dec3420ee005 100644 --- a/x-pack/plugins/observability_solution/inventory/common/entities.ts +++ b/x-pack/plugins/observability_solution/inventory/common/entities.ts @@ -7,6 +7,19 @@ import * as t from 'io-ts'; import { ENTITY_LATEST, entitiesAliasPattern } from '@kbn/entities-schema'; import { isRight } from 'fp-ts/lib/Either'; +import { + SERVICE_ENVIRONMENT, + SERVICE_NAME, + CONTAINER_ID, + HOST_NAME, +} from '@kbn/observability-shared-plugin/common'; +import { + ENTITY_DEFINITION_ID, + ENTITY_DISPLAY_NAME, + ENTITY_ID, + ENTITY_LAST_SEEN, + ENTITY_TYPE, +} from './es_fields/entities'; export const entityTypeRt = t.union([ t.literal('service'), @@ -57,3 +70,32 @@ export const entityTypesRt = new t.Type( }, (arr) => arr.join() ); + +interface BaseEntity { + [ENTITY_LAST_SEEN]: string; + [ENTITY_ID]: string; + [ENTITY_TYPE]: EntityType; + [ENTITY_DISPLAY_NAME]: string; + [ENTITY_DEFINITION_ID]: string; +} + +/** + * These types are based on service, host and container from the built in definition. + */ +interface ServiceEntity extends BaseEntity { + [ENTITY_TYPE]: 'service'; + [SERVICE_NAME]: string; + [SERVICE_ENVIRONMENT]?: string | null; +} + +interface HostEntity extends BaseEntity { + [ENTITY_TYPE]: 'host'; + [HOST_NAME]: string; +} + +interface ContainerEntity extends BaseEntity { + [ENTITY_TYPE]: 'container'; + [CONTAINER_ID]: string; +} + +export type Entity = ServiceEntity | HostEntity | ContainerEntity; diff --git a/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entities_grid.stories.tsx b/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entities_grid.stories.tsx index 996f0ec951581..f05bf920a1845 100644 --- a/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entities_grid.stories.tsx +++ b/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entities_grid.stories.tsx @@ -40,7 +40,7 @@ export const Example: Story<{}> = () => { ); return ( - + {`Entity filter: ${selectedEntityType || 'N/A'}`} ; -export const entitiesMock: InventoryEntitiesAPIReturnType['entities'] = [ +export const entitiesMock = [ { 'entity.lastSeenTimestamp': '2023-08-20T10:50:06.384Z', 'entity.type': 'host', @@ -3011,4 +3011,4 @@ export const entitiesMock: InventoryEntitiesAPIReturnType['entities'] = [ 'entity.displayName': 'Troy McClure', 'entity.id': '499', }, -]; +] as unknown as InventoryEntitiesAPIReturnType['entities']; diff --git a/x-pack/plugins/observability_solution/inventory/server/routes/entities/get_latest_entities.ts b/x-pack/plugins/observability_solution/inventory/server/routes/entities/get_latest_entities.ts index be909308e49c3..853d52d8401a9 100644 --- a/x-pack/plugins/observability_solution/inventory/server/routes/entities/get_latest_entities.ts +++ b/x-pack/plugins/observability_solution/inventory/server/routes/entities/get_latest_entities.ts @@ -12,22 +12,10 @@ import { ENTITIES_LATEST_ALIAS, MAX_NUMBER_OF_ENTITIES, type EntityType, + Entity, } from '../../../common/entities'; -import { - ENTITY_DISPLAY_NAME, - ENTITY_ID, - ENTITY_LAST_SEEN, - ENTITY_TYPE, -} from '../../../common/es_fields/entities'; import { getEntityDefinitionIdWhereClause, getEntityTypesWhereClause } from './query_helper'; -export interface LatestEntity { - [ENTITY_LAST_SEEN]: string; - [ENTITY_TYPE]: string; - [ENTITY_DISPLAY_NAME]: string; - [ENTITY_ID]: string; -} - export async function getLatestEntities({ inventoryEsClient, sortDirection, @@ -47,8 +35,7 @@ export async function getLatestEntities({ | ${getEntityDefinitionIdWhereClause()} | SORT ${sortField} ${sortDirection} | LIMIT ${MAX_NUMBER_OF_ENTITIES} - | KEEP ${ENTITY_LAST_SEEN}, ${ENTITY_TYPE}, ${ENTITY_DISPLAY_NAME}, ${ENTITY_ID} - `, + `, filter: { bool: { filter: [...kqlQuery(kuery)], @@ -56,5 +43,5 @@ export async function getLatestEntities({ }, }); - return esqlResultToPlainObjects(latestEntitiesEsqlResponse); + return esqlResultToPlainObjects(latestEntitiesEsqlResponse); } diff --git a/x-pack/plugins/observability_solution/observability_shared/common/field_names/elasticsearch.ts b/x-pack/plugins/observability_solution/observability_shared/common/field_names/elasticsearch.ts index 35873a31150ac..afaf78ef1aa9b 100644 --- a/x-pack/plugins/observability_solution/observability_shared/common/field_names/elasticsearch.ts +++ b/x-pack/plugins/observability_solution/observability_shared/common/field_names/elasticsearch.ts @@ -107,6 +107,7 @@ export const LABEL_NAME = 'labels.name'; export const HOST = 'host'; export const HOST_HOSTNAME = 'host.hostname'; +export const HOST_NAME = 'host.name'; export const HOST_OS_PLATFORM = 'host.os.platform'; export const CONTAINER_ID = 'container.id'; export const KUBERNETES = 'kubernetes'; diff --git a/x-pack/plugins/observability_solution/observability_shared/common/index.ts b/x-pack/plugins/observability_solution/observability_shared/common/index.ts index d13e2b32839d6..e14bbb4139176 100644 --- a/x-pack/plugins/observability_solution/observability_shared/common/index.ts +++ b/x-pack/plugins/observability_solution/observability_shared/common/index.ts @@ -98,6 +98,7 @@ export { LABEL_NAME, HOST, HOST_HOSTNAME, + HOST_NAME, HOST_OS_PLATFORM, CONTAINER_ID, KUBERNETES, From 18465e7f7e5d9912e61da68873045f0db984fa2b Mon Sep 17 00:00:00 2001 From: Davis Plumlee <56367316+dplumlee@users.noreply.github.com> Date: Mon, 30 Sep 2024 13:27:29 -0400 Subject: [PATCH 37/60] [Security Solution] Rule `type` field diff algorithm (#193369) ## Summary Addresses https://github.com/elastic/kibana/issues/190482 Adds the diff algorithm implementation for the prebuilt rule `type` field. Returns `target_version` and a `NON_SOLVABLE` conflict for every outcome that changes the field. ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios ### 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) --- .../diff/calculation/algorithms/index.ts | 1 + .../rule_type_diff_algorithm.test.ts | 165 ++++++++++++++++++ .../algorithms/rule_type_diff_algorithm.ts | 98 +++++++++++ 3 files changed, 264 insertions(+) create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/rule_type_diff_algorithm.test.ts create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/rule_type_diff_algorithm.ts diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/index.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/index.ts index 629f329c72b9b..c8b55a49edc00 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/index.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/index.ts @@ -14,3 +14,4 @@ export { dataSourceDiffAlgorithm } from './data_source_diff_algorithm'; export { kqlQueryDiffAlgorithm } from './kql_query_diff_algorithm'; export { eqlQueryDiffAlgorithm } from './eql_query_diff_algorithm'; export { esqlQueryDiffAlgorithm } from './esql_query_diff_algorithm'; +export { ruleTypeDiffAlgorithm } from './rule_type_diff_algorithm'; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/rule_type_diff_algorithm.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/rule_type_diff_algorithm.test.ts new file mode 100644 index 0000000000000..accf133ac71b3 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/rule_type_diff_algorithm.test.ts @@ -0,0 +1,165 @@ +/* + * Copyright 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 { + DiffableRuleTypes, + ThreeVersionsOf, +} from '../../../../../../../../common/api/detection_engine'; +import { + ThreeWayDiffOutcome, + ThreeWayMergeOutcome, + MissingVersion, + ThreeWayDiffConflict, +} from '../../../../../../../../common/api/detection_engine'; +import { ruleTypeDiffAlgorithm } from './rule_type_diff_algorithm'; + +describe('ruleTypeDiffAlgorithm', () => { + it('returns current_version as merged output if there is no update - scenario AAA', () => { + const mockVersions: ThreeVersionsOf = { + base_version: 'query', + current_version: 'query', + target_version: 'query', + }; + + const result = ruleTypeDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.StockValueNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('returns current_version as merged output if current_version is different and there is no update - scenario ABA', () => { + // User can change rule type field between `query` and `saved_query` in the UI, no other rule types + const mockVersions: ThreeVersionsOf = { + base_version: 'query', + current_version: 'saved_query', + target_version: 'query', + }; + + const result = ruleTypeDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.NON_SOLVABLE, + }) + ); + }); + + it('returns target_version as merged output if current_version is the same and there is an update - scenario AAB', () => { + // User can change rule type field between `query` and `saved_query` in the UI, no other rule types + const mockVersions: ThreeVersionsOf = { + base_version: 'query', + current_version: 'query', + target_version: 'saved_query', + }; + + const result = ruleTypeDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.StockValueCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.NON_SOLVABLE, + }) + ); + }); + + it('returns current_version as merged output if current version is different but it matches the update - scenario ABB', () => { + // User can change rule type field between `query` and `saved_query` in the UI, no other rule types + const mockVersions: ThreeVersionsOf = { + base_version: 'query', + current_version: 'saved_query', + target_version: 'saved_query', + }; + + const result = ruleTypeDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueSameUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.NON_SOLVABLE, + }) + ); + }); + + it('returns current_version as merged output if all three versions are different - scenario ABC', () => { + // User can change rule type field between `query` and `saved_query` in the UI, no other rule types + // NOTE: This test case scenario is currently inaccessible via normal UI or API workflows, but the logic is covered just in case + const mockVersions: ThreeVersionsOf = { + base_version: 'query', + current_version: 'eql', + target_version: 'saved_query', + }; + + const result = ruleTypeDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.NON_SOLVABLE, + }) + ); + }); + + describe('if base_version is missing', () => { + it('returns current_version as merged output if current_version and target_version are the same - scenario -AA', () => { + const mockVersions: ThreeVersionsOf = { + base_version: MissingVersion, + current_version: 'query', + target_version: 'query', + }; + + const result = ruleTypeDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + has_base_version: false, + base_version: undefined, + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.MissingBaseNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('returns target_version as merged output if current_version and target_version are different - scenario -AB', () => { + // User can change rule type field between `query` and `saved_query` in the UI, no other rule types + const mockVersions: ThreeVersionsOf = { + base_version: MissingVersion, + current_version: 'query', + target_version: 'saved_query', + }; + + const result = ruleTypeDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + has_base_version: false, + base_version: undefined, + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.MissingBaseCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.NON_SOLVABLE, + }) + ); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/rule_type_diff_algorithm.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/rule_type_diff_algorithm.ts new file mode 100644 index 0000000000000..0701d1e46d251 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/rule_type_diff_algorithm.ts @@ -0,0 +1,98 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { assertUnreachable } from '../../../../../../../../common/utility_types'; +import type { + DiffableRuleTypes, + ThreeVersionsOf, + ThreeWayDiff, +} from '../../../../../../../../common/api/detection_engine/prebuilt_rules'; +import { + determineDiffOutcome, + determineIfValueCanUpdate, + MissingVersion, + ThreeWayDiffConflict, + ThreeWayDiffOutcome, + ThreeWayMergeOutcome, +} from '../../../../../../../../common/api/detection_engine/prebuilt_rules'; + +export const ruleTypeDiffAlgorithm = ( + versions: ThreeVersionsOf +): ThreeWayDiff => { + const { + base_version: baseVersion, + current_version: currentVersion, + target_version: targetVersion, + } = versions; + + const diffOutcome = determineDiffOutcome(baseVersion, currentVersion, targetVersion); + const valueCanUpdate = determineIfValueCanUpdate(diffOutcome); + + const hasBaseVersion = baseVersion !== MissingVersion; + + const { mergeOutcome, conflict, mergedVersion } = mergeVersions({ + targetVersion, + diffOutcome, + }); + + return { + has_base_version: hasBaseVersion, + base_version: hasBaseVersion ? baseVersion : undefined, + current_version: currentVersion, + target_version: targetVersion, + merged_version: mergedVersion, + merge_outcome: mergeOutcome, + + diff_outcome: diffOutcome, + has_update: valueCanUpdate, + conflict, + }; +}; + +interface MergeResult { + mergeOutcome: ThreeWayMergeOutcome; + mergedVersion: TValue; + conflict: ThreeWayDiffConflict; +} + +interface MergeArgs { + targetVersion: TValue; + diffOutcome: ThreeWayDiffOutcome; +} + +const mergeVersions = ({ + targetVersion, + diffOutcome, +}: MergeArgs): MergeResult => { + switch (diffOutcome) { + // Scenario -AA is treated as scenario AAA: + // https://github.com/elastic/kibana/pull/184889#discussion_r1636421293 + case ThreeWayDiffOutcome.MissingBaseNoUpdate: + case ThreeWayDiffOutcome.StockValueNoUpdate: + return { + conflict: ThreeWayDiffConflict.NONE, + mergedVersion: targetVersion, + mergeOutcome: ThreeWayMergeOutcome.Target, + }; + case ThreeWayDiffOutcome.CustomizedValueNoUpdate: + case ThreeWayDiffOutcome.CustomizedValueSameUpdate: + case ThreeWayDiffOutcome.StockValueCanUpdate: + // NOTE: This scenario is currently inaccessible via normal UI or API workflows, but the logic is covered just in case + case ThreeWayDiffOutcome.CustomizedValueCanUpdate: + // Scenario -AB is treated as scenario ABC: + // https://github.com/elastic/kibana/pull/184889#discussion_r1636421293 + case ThreeWayDiffOutcome.MissingBaseCanUpdate: { + return { + mergedVersion: targetVersion, + mergeOutcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.NON_SOLVABLE, + }; + } + default: + return assertUnreachable(diffOutcome); + } +}; From 7730eaba8d631c56df92e206aafd82084e4351cc Mon Sep 17 00:00:00 2001 From: Alexi Doak <109488926+doakalexi@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:43:02 -0700 Subject: [PATCH 38/60] [ResponseOps][Connectors] add the "service message" to the message generated for errors (#194213) Resolves https://github.com/elastic/kibana/issues/187288 ## Summary When a connector fails we log the error message. In this PR I updated the log message to include the error message followed by the serviceMessage if it's populated. This change will help provide more detailed info in the log messages when a connector fails. ### Checklist - [ ] [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 ### To verify - Create a connector and update the executor code to make it fail - Create rule with your connector - Verify that the log message includes more details about the error instead of something like the following example for email connectors: `Action '[email connector name]' failed: error sending email"` --- .../server/lib/task_runner_factory.test.ts | 48 +++++++++++++++++++ .../actions/server/lib/task_runner_factory.ts | 8 +++- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts index 3dd86bdcf148d..6c4cdd31ccf6c 100644 --- a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts +++ b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts @@ -890,6 +890,54 @@ describe('Task Runner Factory', () => { expect(getErrorSource(err)).toBe(TaskErrorSource.FRAMEWORK); }); + test(`will throw an error and log the error message with the serviceMessage`, async () => { + const taskRunner = taskRunnerFactory.create({ + taskInstance: { + ...mockedTaskInstance, + attempts: 0, + }, + }); + + mockedEncryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce({ + id: '3', + type: 'action_task_params', + attributes: { + actionId: '2', + params: { baz: true }, + executionId: '123abc', + apiKey: Buffer.from('123:abc').toString('base64'), + }, + references: [ + { + id: '2', + name: 'actionRef', + type: 'action', + }, + ], + }); + mockedActionExecutor.execute.mockResolvedValueOnce({ + status: 'error', + actionId: '2', + message: 'Error message', + serviceMessage: 'Service message', + data: { foo: true }, + retry: false, + errorSource: TaskErrorSource.FRAMEWORK, + }); + + let err; + try { + await taskRunner.run(); + } catch (e) { + err = e; + } + + expect(err).toBeDefined(); + expect(taskRunnerFactoryInitializerParams.logger.error as jest.Mock).toHaveBeenCalledWith( + `Action '2' failed: Error message: Service message` + ); + }); + test(`fallbacks to FRAMEWORK error if ActionExecutor does not return any type of source'`, async () => { const taskRunner = taskRunnerFactory.create({ taskInstance: { diff --git a/x-pack/plugins/actions/server/lib/task_runner_factory.ts b/x-pack/plugins/actions/server/lib/task_runner_factory.ts index 2c28c61cad3de..d6b418c481ea5 100644 --- a/x-pack/plugins/actions/server/lib/task_runner_factory.ts +++ b/x-pack/plugins/actions/server/lib/task_runner_factory.ts @@ -150,7 +150,13 @@ export class TaskRunnerFactory { inMemoryMetrics.increment(IN_MEMORY_METRICS.ACTION_EXECUTIONS); if (executorResult.status === 'error') { inMemoryMetrics.increment(IN_MEMORY_METRICS.ACTION_FAILURES); - logger.error(`Action '${actionId}' failed: ${executorResult.message}`); + + let message = executorResult.message; + if (executorResult.serviceMessage) { + message = `${message}: ${executorResult.serviceMessage}`; + } + logger.error(`Action '${actionId}' failed: ${message}`); + // Task manager error handler only kicks in when an error thrown (at this time) // So what we have to do is throw when the return status is `error`. throw throwRetryableError( From f7d1dd4bf35648b7a3db8fc7d16666f93949b43c Mon Sep 17 00:00:00 2001 From: Rodney Norris Date: Mon, 30 Sep 2024 12:49:59 -0500 Subject: [PATCH 39/60] [Search][Onboarding] Start Page File Upload & O11y links (#194231) ## Summary - Clean-up for start page - enabled submitting create index form w/ enter in index name input - extracted start page example to hook to make it easier to update later - Moved start page language up so changes are saved when switching between UI & Code views - Added File Upload link to the ML file uploader - Added callouts for O11y ### Screenshots image ### 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) - [ ] [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 --------- Co-authored-by: Michael DeFazio --- .../search_indices/common/doc_links.ts | 2 + .../public/analytics/constants.ts | 1 + .../public/code_examples/create_index.ts | 2 + .../public/components/start/create_index.tsx | 197 ++++++++----- .../components/start/create_index_code.tsx | 32 +-- .../components/start/elasticsearch_start.tsx | 260 ++++++++++++------ .../start/hooks/use_coding_examples.tsx | 15 + .../public/components/start/types.ts | 3 + .../plugins/search_indices/public/plugin.ts | 3 + x-pack/plugins/search_indices/public/types.ts | 1 + .../svl_search_elasticsearch_start_page.ts | 23 ++ .../search/config.feature_flags.ts | 9 +- .../functional/test_suites/search/config.ts | 6 +- .../test_suites/search/elasticsearch_start.ts | 12 + 14 files changed, 389 insertions(+), 177 deletions(-) create mode 100644 x-pack/plugins/search_indices/public/components/start/hooks/use_coding_examples.tsx diff --git a/x-pack/plugins/search_indices/common/doc_links.ts b/x-pack/plugins/search_indices/common/doc_links.ts index 8cceb45041ab9..d7e7119dd7004 100644 --- a/x-pack/plugins/search_indices/common/doc_links.ts +++ b/x-pack/plugins/search_indices/common/doc_links.ts @@ -10,12 +10,14 @@ import { DocLinks } from '@kbn/doc-links'; class SearchIndicesDocLinks { public apiReference: string = ''; public setupSemanticSearch: string = ''; + public analyzeLogs: string = ''; constructor() {} setDocLinks(newDocLinks: DocLinks) { this.apiReference = newDocLinks.apiReference; this.setupSemanticSearch = newDocLinks.enterpriseSearch.semanticSearch; + this.analyzeLogs = newDocLinks.serverlessSearch.integrations; } } export const docLinks = new SearchIndicesDocLinks(); diff --git a/x-pack/plugins/search_indices/public/analytics/constants.ts b/x-pack/plugins/search_indices/public/analytics/constants.ts index 563e5b62382c0..2a8c6d0d0ea0d 100644 --- a/x-pack/plugins/search_indices/public/analytics/constants.ts +++ b/x-pack/plugins/search_indices/public/analytics/constants.ts @@ -13,6 +13,7 @@ export enum AnalyticsEvents { startCreateIndexLanguageSelect = 'start_code_lang_select', startCreateIndexCodeCopyInstall = 'start_code_copy_install', startCreateIndexCodeCopy = 'start_code_copy', + startFileUploadClick = 'start_file_upload', indexDetailsInstallCodeCopy = 'index_details_code_copy_install', indexDetailsAddMappingsCodeCopy = 'index_details_add_mappings_code_copy', indexDetailsIngestDocumentsCodeCopy = 'index_details_ingest_documents_code_copy', diff --git a/x-pack/plugins/search_indices/public/code_examples/create_index.ts b/x-pack/plugins/search_indices/public/code_examples/create_index.ts index 627329b37d0be..01d969df3d70d 100644 --- a/x-pack/plugins/search_indices/public/code_examples/create_index.ts +++ b/x-pack/plugins/search_indices/public/code_examples/create_index.ts @@ -13,6 +13,7 @@ import { PythonServerlessCreateIndexExamples } from './python'; import { ConsoleCreateIndexExamples } from './sense'; export const DefaultServerlessCodeExamples: CreateIndexCodeExamples = { + exampleType: 'search', sense: ConsoleCreateIndexExamples.default, curl: CurlCreateIndexExamples.default, python: PythonServerlessCreateIndexExamples.default, @@ -20,6 +21,7 @@ export const DefaultServerlessCodeExamples: CreateIndexCodeExamples = { }; export const DenseVectorSeverlessCodeExamples: CreateIndexCodeExamples = { + exampleType: 'vector', sense: ConsoleCreateIndexExamples.dense_vector, curl: CurlCreateIndexExamples.dense_vector, python: PythonServerlessCreateIndexExamples.dense_vector, diff --git a/x-pack/plugins/search_indices/public/components/start/create_index.tsx b/x-pack/plugins/search_indices/public/components/start/create_index.tsx index ae191481e5da4..bd80922d79689 100644 --- a/x-pack/plugins/search_indices/public/components/start/create_index.tsx +++ b/x-pack/plugins/search_indices/public/components/start/create_index.tsx @@ -13,12 +13,16 @@ import { EuiFlexItem, EuiForm, EuiFormRow, + EuiHorizontalRule, EuiIcon, + EuiLink, + EuiPanel, EuiSpacer, EuiText, EuiToolTip, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; import type { UserStartPrivilegesResponse } from '../../../common'; import { AnalyticsEvents } from '../../analytics/constants'; @@ -28,6 +32,7 @@ import { isValidIndexName } from '../../utils/indices'; import { useCreateIndex } from './hooks/use_create_index'; import { CreateIndexFormState } from './types'; +import { useKibana } from '../../hooks/use_kibana'; const CREATE_INDEX_CONTENT = i18n.translate( 'xpack.searchIndices.startPage.createIndex.action.text', @@ -47,6 +52,7 @@ export const CreateIndexForm = ({ formState, setFormState, }: CreateIndexFormProps) => { + const { application } = useKibana().services; const [indexNameHasError, setIndexNameHasError] = useState(false); const usageTracker = useUsageTracker(); const { createIndex, isLoading } = useCreateIndex(); @@ -65,93 +71,136 @@ export const CreateIndexForm = ({ setIndexNameHasError(invalidIndexName); } }; + const onFileUpload = useCallback(() => { + usageTracker.click(AnalyticsEvents.startFileUploadClick); + application.navigateToApp('ml', { path: 'filedatavisualizer' }); + }, [usageTracker, application]); return ( - - - + + - - - - - {userPrivileges?.privileges?.canCreateIndex === false ? ( - - {i18n.translate('xpack.searchIndices.startPage.createIndex.permissionTooltip', { - defaultMessage: 'You do not have permission to create an index.', - })} -

+ > + + )} + /> +
+ + + + {userPrivileges?.privileges?.canCreateIndex === false ? ( + + {i18n.translate('xpack.searchIndices.startPage.createIndex.permissionTooltip', { + defaultMessage: 'You do not have permission to create an index.', + })} +

+ } + > + + {CREATE_INDEX_CONTENT} + +
+ ) : ( {CREATE_INDEX_CONTENT} - - ) : ( - - {CREATE_INDEX_CONTENT} - - )} -
- - {userPrivileges?.privileges?.canCreateApiKeys && ( - - - -

- {i18n.translate( - 'xpack.searchIndices.startPage.createIndex.apiKeyCreation.description', - { - defaultMessage: "We'll create an API key for this index", - } - )} -

-
-
- )} -
-
-
+ )} +
+ + {userPrivileges?.privileges?.canCreateApiKeys && ( + + + +

+ {i18n.translate( + 'xpack.searchIndices.startPage.createIndex.apiKeyCreation.description', + { + defaultMessage: "We'll create an API key for this index", + } + )} +

+
+
+ )} +
+
+ + + + + + + + + +

+ + {i18n.translate( + 'xpack.searchIndices.startPage.createIndex.fileUpload.link', + { + defaultMessage: 'Upload a file', + } + )} + + ), + }} + /> +

+
+
+
+
+ ); }; diff --git a/x-pack/plugins/search_indices/public/components/start/create_index_code.tsx b/x-pack/plugins/search_indices/public/components/start/create_index_code.tsx index 6fc2fb3b50e2f..e8efe1c3b7e66 100644 --- a/x-pack/plugins/search_indices/public/components/start/create_index_code.tsx +++ b/x-pack/plugins/search_indices/public/components/start/create_index_code.tsx @@ -4,46 +4,47 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useCallback, useMemo, useState } from 'react'; +import React, { useCallback, useMemo } from 'react'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { TryInConsoleButton } from '@kbn/try-in-console'; import { AnalyticsEvents } from '../../analytics/constants'; import { Languages, AvailableLanguages, LanguageOptions } from '../../code_examples'; -import { DenseVectorSeverlessCodeExamples } from '../../code_examples/create_index'; + import { useUsageTracker } from '../../hooks/use_usage_tracker'; import { useKibana } from '../../hooks/use_kibana'; import { useElasticsearchUrl } from '../../hooks/use_elasticsearch_url'; -import { getDefaultCodingLanguage } from '../../utils/language'; import { CodeSample } from '../shared/code_sample'; import { LanguageSelector } from '../shared/language_selector'; import { CreateIndexFormState } from './types'; +import { useStartPageCodingExamples } from './hooks/use_coding_examples'; export interface CreateIndexCodeViewProps { createIndexForm: CreateIndexFormState; + changeCodingLanguage: (language: AvailableLanguages) => void; } -// TODO: this will be dynamic based on stack / es3 & onboarding token -const SelectedCodeExamples = DenseVectorSeverlessCodeExamples; - -export const CreateIndexCodeView = ({ createIndexForm }: CreateIndexCodeViewProps) => { +export const CreateIndexCodeView = ({ + createIndexForm, + changeCodingLanguage, +}: CreateIndexCodeViewProps) => { const { application, share, console: consolePlugin } = useKibana().services; const usageTracker = useUsageTracker(); + const selectedCodeExamples = useStartPageCodingExamples(); - const [selectedLanguage, setSelectedLanguage] = - useState(getDefaultCodingLanguage); + const { codingLanguage: selectedLanguage } = createIndexForm; const onSelectLanguage = useCallback( (value: AvailableLanguages) => { - setSelectedLanguage(value); + changeCodingLanguage(value); usageTracker.count([ AnalyticsEvents.startCreateIndexLanguageSelect, `${AnalyticsEvents.startCreateIndexLanguageSelect}_${value}`, ]); }, - [usageTracker] + [usageTracker, changeCodingLanguage] ); const elasticsearchUrl = useElasticsearchUrl(); const codeParams = useMemo(() => { @@ -53,8 +54,8 @@ export const CreateIndexCodeView = ({ createIndexForm }: CreateIndexCodeViewProp }; }, [createIndexForm.indexName, elasticsearchUrl]); const selectedCodeExample = useMemo(() => { - return SelectedCodeExamples[selectedLanguage]; - }, [selectedLanguage]); + return selectedCodeExamples[selectedLanguage]; + }, [selectedLanguage, selectedCodeExamples]); return ( @@ -69,7 +70,7 @@ export const CreateIndexCodeView = ({ createIndexForm }: CreateIndexCodeViewProp {selectedLanguage === 'curl' && ( diff --git a/x-pack/plugins/search_indices/public/components/start/elasticsearch_start.tsx b/x-pack/plugins/search_indices/public/components/start/elasticsearch_start.tsx index 131948d1a0377..8d6e85bfc900a 100644 --- a/x-pack/plugins/search_indices/public/components/start/elasticsearch_start.tsx +++ b/x-pack/plugins/search_indices/public/components/start/elasticsearch_start.tsx @@ -5,33 +5,39 @@ * 2.0. */ -import React, { useCallback, useEffect, useState } from 'react'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { + EuiButtonEmpty, EuiButtonGroup, EuiFlexGroup, EuiFlexItem, - EuiForm, EuiIcon, EuiPanel, EuiSpacer, EuiText, + EuiTextAlign, EuiTitle, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import type { IndicesStatusResponse, UserStartPrivilegesResponse } from '../../../common'; +import { docLinks } from '../../../common/doc_links'; import { AnalyticsEvents } from '../../analytics/constants'; +import { AvailableLanguages } from '../../code_examples'; import { useUsageTracker } from '../../hooks/use_usage_tracker'; - import { generateRandomIndexName } from '../../utils/indices'; +import { getDefaultCodingLanguage } from '../../utils/language'; + import { CreateIndexForm } from './create_index'; import { CreateIndexCodeView } from './create_index_code'; import { CreateIndexFormState } from './types'; +import { useKibana } from '../../hooks/use_kibana'; function initCreateIndexState(): CreateIndexFormState { return { indexName: generateRandomIndexName(), + codingLanguage: getDefaultCodingLanguage(), }; } @@ -47,11 +53,13 @@ export interface ElasticsearchStartProps { } export const ElasticsearchStart = ({ userPrivileges }: ElasticsearchStartProps) => { + const { cloud, http } = useKibana().services; const [createIndexView, setCreateIndexView] = useState( userPrivileges?.privileges.canCreateIndex === false ? CreateIndexView.Code : CreateIndexView.UI ); - const [formState, setFormState] = useState(initCreateIndexState()); + const [formState, setFormState] = useState(initCreateIndexState); const usageTracker = useUsageTracker(); + useEffect(() => { usageTracker.load(AnalyticsEvents.startPageOpened); }, [usageTracker]); @@ -61,6 +69,15 @@ export const ElasticsearchStart = ({ userPrivileges }: ElasticsearchStartProps) setCreateIndexView(CreateIndexView.Code); } }, [userPrivileges]); + + const o11yTrialLink = useMemo(() => { + if (cloud && cloud.isServerlessEnabled) { + const baseUrl = cloud?.projectsUrl ?? 'https://cloud.elastic.co/projects/'; + return `${baseUrl}create/observability/start`; + } + return http.basePath.prepend('/app/observability/onboarding'); + }, [cloud, http]); + const onChangeView = useCallback( (id) => { switch (id) { @@ -76,6 +93,15 @@ export const ElasticsearchStart = ({ userPrivileges }: ElasticsearchStartProps) }, [usageTracker] ); + const onChangeCodingLanguage = useCallback( + (language: AvailableLanguages) => { + setFormState({ + ...formState, + codingLanguage: language, + }); + }, + [formState, setFormState] + ); return ( - - - - - - + + + + + +

{i18n.translate('xpack.searchIndices.startPage.pageTitle', { @@ -98,81 +124,153 @@ export const ElasticsearchStart = ({ userPrivileges }: ElasticsearchStartProps) })}

- - -

- {i18n.translate('xpack.searchIndices.startPage.pageDescription', { - defaultMessage: 'Vectorize, search, and visualize your data', - })} -

-
-
-
-
+
+
+ + +

+ {i18n.translate('xpack.searchIndices.startPage.pageDescription', { + defaultMessage: 'Vectorize, search, and visualize your data', + })} +

+
+
- - - - - -

- {i18n.translate('xpack.searchIndices.startPage.createIndex.title', { - defaultMessage: 'Create your first index', - })} -

-
-
- - - -
- -

- {i18n.translate('xpack.searchIndices.startPage.createIndex.description', { - defaultMessage: - 'An index stores your data and defines the schema, or field mappings, for your searches', - })} -

-
- {createIndexView === CreateIndexView.UI && ( - + + + +

+ {i18n.translate('xpack.searchIndices.startPage.createIndex.title', { + defaultMessage: 'Create your first index', + })} +

+
+
+ + - )} - {createIndexView === CreateIndexView.Code && ( - - )} +
-
+ +

+ {i18n.translate('xpack.searchIndices.startPage.createIndex.description', { + defaultMessage: + 'An index stores your data and defines the schema, or field mappings, for your searches', + })} +

+
+ {createIndexView === CreateIndexView.UI && ( + + )} + {createIndexView === CreateIndexView.Code && ( + + )} + +
+ + + + +
+ {i18n.translate('xpack.searchIndices.startPage.observabilityCallout.title', { + defaultMessage: 'Looking to store your logs or metrics data?', + })} +
+
+
+ + + + + {i18n.translate('xpack.searchIndices.startPage.observabilityCallout.logs.button', { + defaultMessage: 'Collect and analyze logs', + })} + + + + {i18n.translate( + 'xpack.searchIndices.startPage.observabilityCallout.logs.subTitle', + { + defaultMessage: 'Explore Logstash and Beats', + } + )} + + + + + or + + + + {i18n.translate( + 'xpack.searchIndices.startPage.observabilityCallout.o11yTrial.button', + { + defaultMessage: 'Start an Observability trial', + } + )} + + + + {i18n.translate( + 'xpack.searchIndices.startPage.observabilityCallout.o11yTrial.subTitle', + { + defaultMessage: 'Powerful performance monitoring', + } + )} + + + +
); diff --git a/x-pack/plugins/search_indices/public/components/start/hooks/use_coding_examples.tsx b/x-pack/plugins/search_indices/public/components/start/hooks/use_coding_examples.tsx new file mode 100644 index 0000000000000..1a351d10943f2 --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/start/hooks/use_coding_examples.tsx @@ -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 { CreateIndexCodeExamples } from '../../../types'; +import { DenseVectorSeverlessCodeExamples } from '../../../code_examples/create_index'; + +export const useStartPageCodingExamples = (): CreateIndexCodeExamples => { + // TODO: in the future this will be dynamic based on the onboarding token + // or project sub-type + return DenseVectorSeverlessCodeExamples; +}; diff --git a/x-pack/plugins/search_indices/public/components/start/types.ts b/x-pack/plugins/search_indices/public/components/start/types.ts index 6b6c1c8e38f61..c0dbbeca88883 100644 --- a/x-pack/plugins/search_indices/public/components/start/types.ts +++ b/x-pack/plugins/search_indices/public/components/start/types.ts @@ -5,6 +5,9 @@ * 2.0. */ +import type { AvailableLanguages } from '../../code_examples'; + export interface CreateIndexFormState { indexName: string; + codingLanguage: AvailableLanguages; } diff --git a/x-pack/plugins/search_indices/public/plugin.ts b/x-pack/plugins/search_indices/public/plugin.ts index 5ebfb84e1cd39..bec4f7cb7bfe6 100644 --- a/x-pack/plugins/search_indices/public/plugin.ts +++ b/x-pack/plugins/search_indices/public/plugin.ts @@ -7,6 +7,8 @@ import type { CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; + +import { docLinks } from '../common/doc_links'; import type { SearchIndicesAppPluginStartDependencies, SearchIndicesPluginSetup, @@ -64,6 +66,7 @@ export class SearchIndicesPlugin } public start(core: CoreStart): SearchIndicesPluginStart { + docLinks.setDocLinks(core.docLinks.links); return {}; } diff --git a/x-pack/plugins/search_indices/public/types.ts b/x-pack/plugins/search_indices/public/types.ts index 95f5eb2883d2e..a3e63df2642b3 100644 --- a/x-pack/plugins/search_indices/public/types.ts +++ b/x-pack/plugins/search_indices/public/types.ts @@ -77,6 +77,7 @@ export interface CreateIndexCodeDefinition { } export interface CreateIndexCodeExamples { + exampleType: string; sense: CreateIndexCodeDefinition; curl: CreateIndexCodeDefinition; python: CreateIndexCodeDefinition; diff --git a/x-pack/test_serverless/functional/page_objects/svl_search_elasticsearch_start_page.ts b/x-pack/test_serverless/functional/page_objects/svl_search_elasticsearch_start_page.ts index 33dbc6f693ea8..798d396258e75 100644 --- a/x-pack/test_serverless/functional/page_objects/svl_search_elasticsearch_start_page.ts +++ b/x-pack/test_serverless/functional/page_objects/svl_search_elasticsearch_start_page.ts @@ -30,6 +30,11 @@ export function SvlSearchElasticsearchStartPageProvider({ getService }: FtrProvi ); }); }, + async expectToBeOnMLFileUploadPage() { + await retry.tryForTime(60 * 1000, async () => { + expect(await browser.getCurrentUrl()).contain('/app/ml/filedatavisualizer'); + }); + }, async expectIndexNameToExist() { await testSubjects.existOrFail('indexNameField'); }, @@ -67,5 +72,23 @@ export function SvlSearchElasticsearchStartPageProvider({ getService }: FtrProvi await testSubjects.existOrFail('createIndexCodeViewBtn'); await testSubjects.click('createIndexCodeViewBtn'); }, + async clickFileUploadLink() { + await testSubjects.existOrFail('uploadFileLink'); + await testSubjects.click('uploadFileLink'); + }, + async expectAnalyzeLogsLink() { + await testSubjects.existOrFail('analyzeLogsBtn'); + expect(await testSubjects.getAttribute('analyzeLogsBtn', 'href')).equal( + 'https://docs.elastic.co/serverless/elasticsearch/ingest-your-data' + ); + expect(await testSubjects.getAttribute('analyzeLogsBtn', 'target')).equal('_blank'); + }, + async expectO11yTrialLink() { + await testSubjects.existOrFail('startO11yTrialBtn'); + expect(await testSubjects.getAttribute('startO11yTrialBtn', 'href')).equal( + 'https://fake-cloud.elastic.co/projects/create/observability/start' + ); + expect(await testSubjects.getAttribute('startO11yTrialBtn', 'target')).equal('_blank'); + }, }; } diff --git a/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts b/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts index 05eb6136bf008..824d145282257 100644 --- a/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts +++ b/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts @@ -19,10 +19,11 @@ export default createTestConfig({ suiteTags: { exclude: ['skipSvlSearch'] }, // add feature flags kbnServerArgs: [ - `--xpack.cloud.id='ES3_FTR_TESTS:ZmFrZS1kb21haW4uY2xkLmVsc3RjLmNvJGZha2Vwcm9qZWN0aWQuZXMkZmFrZXByb2plY3RpZC5rYg=='`, - `--xpack.cloud.serverless.project_id='fakeprojectid'`, - `--xpack.cloud.base_url='https://cloud.elastic.co'`, - `--xpack.cloud.organization_url='/account/members'`, + `--xpack.cloud.id=ES3_FTR_TESTS:ZmFrZS1kb21haW4uY2xkLmVsc3RjLmNvJGZha2Vwcm9qZWN0aWQuZXMkZmFrZXByb2plY3RpZC5rYg==`, + `--xpack.cloud.serverless.project_id=fakeprojectid`, + `--xpack.cloud.base_url=https://fake-cloud.elastic.co`, + `--xpack.cloud.projects_url=/projects/`, + `--xpack.cloud.organization_url=/account/members`, `--xpack.security.roleManagementEnabled=true`, `--xpack.spaces.maxSpaces=100`, // enables spaces UI capabilities `--xpack.searchIndices.enabled=true`, // global empty state FF diff --git a/x-pack/test_serverless/functional/test_suites/search/config.ts b/x-pack/test_serverless/functional/test_suites/search/config.ts index 6853e75d987b8..4739cde53bf86 100644 --- a/x-pack/test_serverless/functional/test_suites/search/config.ts +++ b/x-pack/test_serverless/functional/test_suites/search/config.ts @@ -19,7 +19,9 @@ export default createTestConfig({ // https://github.com/elastic/project-controller/blob/main/internal/project/esproject/config/elasticsearch.yml esServerArgs: [], kbnServerArgs: [ - `--xpack.cloud.id='ES3_FTR_TESTS:ZmFrZS1kb21haW4uY2xkLmVsc3RjLmNvJGZha2Vwcm9qZWN0aWQuZXMkZmFrZXByb2plY3RpZC5rYg=='`, - `--xpack.cloud.serverless.project_id='fakeprojectid'`, + `--xpack.cloud.id=ES3_FTR_TESTS:ZmFrZS1kb21haW4uY2xkLmVsc3RjLmNvJGZha2Vwcm9qZWN0aWQuZXMkZmFrZXByb2plY3RpZC5rYg==`, + `--xpack.cloud.serverless.project_id=fakeprojectid`, + `--xpack.cloud.base_url=https://fake-cloud.elastic.co`, + `--xpack.cloud.projects_url=/projects/`, ], }); diff --git a/x-pack/test_serverless/functional/test_suites/search/elasticsearch_start.ts b/x-pack/test_serverless/functional/test_suites/search/elasticsearch_start.ts index 55f1551141e47..f6362a409658e 100644 --- a/x-pack/test_serverless/functional/test_suites/search/elasticsearch_start.ts +++ b/x-pack/test_serverless/functional/test_suites/search/elasticsearch_start.ts @@ -81,6 +81,18 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await pageObjects.svlSearchElasticsearchStartPage.clickUIViewButton(); await pageObjects.svlSearchElasticsearchStartPage.expectCreateIndexUIView(); }); + + it('should have file upload link', async () => { + await pageObjects.svlSearchElasticsearchStartPage.expectToBeOnStartPage(); + await pageObjects.svlSearchElasticsearchStartPage.clickFileUploadLink(); + await pageObjects.svlSearchElasticsearchStartPage.expectToBeOnMLFileUploadPage(); + }); + + it('should have o11y links', async () => { + await pageObjects.svlSearchElasticsearchStartPage.expectToBeOnStartPage(); + await pageObjects.svlSearchElasticsearchStartPage.expectAnalyzeLogsLink(); + await pageObjects.svlSearchElasticsearchStartPage.expectO11yTrialLink(); + }); }); describe('viewer', function () { before(async () => { From c362ab8b920a0c34582ab046e8a3925e7a2d42fb Mon Sep 17 00:00:00 2001 From: Steph Milovic Date: Mon, 30 Sep 2024 11:59:14 -0600 Subject: [PATCH 40/60] [Security solution] Update ebt fields script to new Vault policy (#194458) --- x-pack/plugins/security_solution/scripts/telemetry/README.md | 2 +- .../security_solution/scripts/telemetry/build_ebt_data_view.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/security_solution/scripts/telemetry/README.md b/x-pack/plugins/security_solution/scripts/telemetry/README.md index ea17f9b4a140c..f1cfa92dd731c 100644 --- a/x-pack/plugins/security_solution/scripts/telemetry/README.md +++ b/x-pack/plugins/security_solution/scripts/telemetry/README.md @@ -13,7 +13,7 @@ If you have further events to be included in the data views, please update the s ### Usage -1. Login with Vault (`vault login -method github`), ensure you have siem-team access. If you have never accessed Vault before, follow [these instructions](https://github.com/elastic/infra/blob/master/docs/vault/README.md) +1. Login with Vault (`vault login -method oidc`), ensure you have siem-team access. If you have never accessed Vault before, follow [these instructions](https://github.com/elastic/infra/blob/master/docs/vault/README.md) 2. cd into this directory 3. Run the script with the appropriate arguments. By default, the script will run for the `security-solution-ebt-kibana-browser` data view in the `securitysolution` space. If you want to run the script for the server data view, pass the `--telemetry_type` argument with the value `server`. diff --git a/x-pack/plugins/security_solution/scripts/telemetry/build_ebt_data_view.ts b/x-pack/plugins/security_solution/scripts/telemetry/build_ebt_data_view.ts index e17b72d195c6c..9cf8fe842a9e9 100755 --- a/x-pack/plugins/security_solution/scripts/telemetry/build_ebt_data_view.ts +++ b/x-pack/plugins/security_solution/scripts/telemetry/build_ebt_data_view.ts @@ -11,7 +11,7 @@ import { events as genAiEvents } from '@kbn/elastic-assistant-plugin/server/lib/ import { events as securityEvents } from '../../server/lib/telemetry/event_based/events'; import { telemetryEvents } from '../../public/common/lib/telemetry/events/telemetry_events'; -// uncomment and add to run script, but do not commit as creates cirular dependency +// uncomment and add to run script, but do not commit as creates circular dependency // import { telemetryEvents as serverlessEvents } from '@kbn/security-solution-serverless/server/telemetry/event_based_telemetry'; const logger = new ToolingLog({ From 5f83ac05991cd980ef5b205acd19c997b60045a3 Mon Sep 17 00:00:00 2001 From: Marshall Main <55718608+marshallmain@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:07:39 -0700 Subject: [PATCH 41/60] [Security Solution][Detection Engine] Avoid creating list items for empty lines in import list API (#192681) ## Summary The quickstart tooling introduced in https://github.com/elastic/kibana/pull/190634 uses axios under the hood to make requests to Kibana. When attaching file data to the axios request with `FormData`, axios adds an extra empty line after the end content boundary. The logic in `buffer_lines.ts` assumes that there are no more lines after the end content boundary line, so importing a list with the quickstart tooling would create a list with an extra empty item. This empty item fails validation when retrieved through other APIs. This PR prevents lines after the end content boundary from being turned into list items in the import list API. --- .../services/items/buffer_lines.test.ts | 92 +++++++------------ .../server/services/items/buffer_lines.ts | 2 +- .../write_lines_to_bulk_list_items.test.ts | 12 +++ 3 files changed, 45 insertions(+), 61 deletions(-) diff --git a/x-pack/plugins/lists/server/services/items/buffer_lines.test.ts b/x-pack/plugins/lists/server/services/items/buffer_lines.test.ts index 509233d006b73..7faef72c38907 100644 --- a/x-pack/plugins/lists/server/services/items/buffer_lines.test.ts +++ b/x-pack/plugins/lists/server/services/items/buffer_lines.test.ts @@ -23,9 +23,15 @@ describe('buffer_lines', () => { }).toThrow('bufferSize must be greater than zero'); }); - test('it can read a single line', (done) => { + test('two identical lines are collapsed into just one line without duplicates', (done) => { const input = new TestReadable(); + input.push('--boundary\n'); + input.push('Content-type: text/plain\n'); + input.push('Content-Disposition: form-data; name="fieldName"; filename="filename.text"\n'); + input.push('\n'); + input.push('line one\n'); input.push('line one\n'); + input.push('--boundary--\n'); input.push(null); const bufferedLine = new BufferLines({ bufferSize: IMPORT_BUFFER_SIZE, input }); let linesToTest: string[] = []; @@ -38,25 +44,8 @@ describe('buffer_lines', () => { }); }); - test('it can read a single line using a buffer size of 1', (done) => { + test('it can close out without writing any lines', (done) => { const input = new TestReadable(); - input.push('line one\n'); - input.push(null); - const bufferedLine = new BufferLines({ bufferSize: 1, input }); - let linesToTest: string[] = []; - bufferedLine.on('lines', (lines: string[]) => { - linesToTest = [...linesToTest, ...lines]; - }); - bufferedLine.on('close', () => { - expect(linesToTest).toEqual(['line one']); - done(); - }); - }); - - test('it can read two lines', (done) => { - const input = new TestReadable(); - input.push('line one\n'); - input.push('line two\n'); input.push(null); const bufferedLine = new BufferLines({ bufferSize: IMPORT_BUFFER_SIZE, input }); let linesToTest: string[] = []; @@ -64,74 +53,56 @@ describe('buffer_lines', () => { linesToTest = [...linesToTest, ...lines]; }); bufferedLine.on('close', () => { - expect(linesToTest).toEqual(['line one', 'line two']); - done(); - }); - }); - - test('it can read two lines using a buffer size of 1', (done) => { - const input = new TestReadable(); - input.push('line one\n'); - input.push('line two\n'); - input.push(null); - const bufferedLine = new BufferLines({ bufferSize: 1, input }); - let linesToTest: string[] = []; - bufferedLine.on('lines', (lines: string[]) => { - linesToTest = [...linesToTest, ...lines]; - }); - bufferedLine.on('close', () => { - expect(linesToTest).toEqual(['line one', 'line two']); + expect(linesToTest).toEqual([]); done(); }); }); - test('two identical lines are collapsed into just one line without duplicates', (done) => { + test('it can read 200 lines', (done) => { const input = new TestReadable(); - input.push('line one\n'); - input.push('line one\n'); - input.push(null); const bufferedLine = new BufferLines({ bufferSize: IMPORT_BUFFER_SIZE, input }); + input.push('--boundary\n'); + input.push('Content-type: text/plain\n'); + input.push('Content-Disposition: form-data; name="fieldName"; filename="filename.text"\n'); + input.push('\n'); let linesToTest: string[] = []; - bufferedLine.on('lines', (lines: string[]) => { - linesToTest = [...linesToTest, ...lines]; - }); - bufferedLine.on('close', () => { - expect(linesToTest).toEqual(['line one']); - done(); - }); - }); - - test('it can close out without writing any lines', (done) => { - const input = new TestReadable(); + const size200: string[] = new Array(200).fill(null).map((_, index) => `${index}\n`); + size200.forEach((element) => input.push(element)); + input.push('--boundary--\n'); input.push(null); - const bufferedLine = new BufferLines({ bufferSize: IMPORT_BUFFER_SIZE, input }); - let linesToTest: string[] = []; bufferedLine.on('lines', (lines: string[]) => { linesToTest = [...linesToTest, ...lines]; }); bufferedLine.on('close', () => { - expect(linesToTest).toEqual([]); + expect(linesToTest.length).toEqual(200); done(); }); }); - test('it can read 200 lines', (done) => { + test('it can read an example multi-part message', (done) => { const input = new TestReadable(); + input.push('--boundary\n'); + input.push('Content-type: text/plain\n'); + input.push('Content-Disposition: form-data; name="fieldName"; filename="filename.text"\n'); + input.push('\n'); + input.push('127.0.0.1\n'); + input.push('127.0.0.2\n'); + input.push('127.0.0.3\n'); + input.push('\n'); + input.push('--boundary--\n'); + input.push(null); const bufferedLine = new BufferLines({ bufferSize: IMPORT_BUFFER_SIZE, input }); let linesToTest: string[] = []; - const size200: string[] = new Array(200).fill(null).map((_, index) => `${index}\n`); - size200.forEach((element) => input.push(element)); - input.push(null); bufferedLine.on('lines', (lines: string[]) => { linesToTest = [...linesToTest, ...lines]; }); bufferedLine.on('close', () => { - expect(linesToTest.length).toEqual(200); + expect(linesToTest).toEqual(['127.0.0.1', '127.0.0.2', '127.0.0.3']); done(); }); }); - test('it can read an example multi-part message', (done) => { + test('it does not create empty values for lines after the end boundary', (done) => { const input = new TestReadable(); input.push('--boundary\n'); input.push('Content-type: text/plain\n'); @@ -142,6 +113,7 @@ describe('buffer_lines', () => { input.push('127.0.0.3\n'); input.push('\n'); input.push('--boundary--\n'); + input.push('\n'); input.push(null); const bufferedLine = new BufferLines({ bufferSize: IMPORT_BUFFER_SIZE, input }); let linesToTest: string[] = []; diff --git a/x-pack/plugins/lists/server/services/items/buffer_lines.ts b/x-pack/plugins/lists/server/services/items/buffer_lines.ts index cb6d073010127..e179fc4358468 100644 --- a/x-pack/plugins/lists/server/services/items/buffer_lines.ts +++ b/x-pack/plugins/lists/server/services/items/buffer_lines.ts @@ -48,7 +48,7 @@ export class BufferLines extends Readable { // we are at the end of the stream this.boundary = null; this.readableText = false; - } else { + } else if (this.readableText) { // we have actual content to push this.push(line); } diff --git a/x-pack/plugins/lists/server/services/items/write_lines_to_bulk_list_items.test.ts b/x-pack/plugins/lists/server/services/items/write_lines_to_bulk_list_items.test.ts index 78098fde59827..89c3d89fe631e 100644 --- a/x-pack/plugins/lists/server/services/items/write_lines_to_bulk_list_items.test.ts +++ b/x-pack/plugins/lists/server/services/items/write_lines_to_bulk_list_items.test.ts @@ -49,6 +49,12 @@ describe('write_lines_to_bulk_list_items', () => { test('It imports a set of items to a write buffer by calling "getListItemByValues" with a single value given', async () => { const options = getImportListItemsToStreamOptionsMock(); const promise = importListItemsToStream(options); + options.stream.push('--boundary\n'); + options.stream.push('Content-type: text/plain\n'); + options.stream.push( + 'Content-Disposition: form-data; name="fieldName"; filename="filename.text"\n' + ); + options.stream.push('\n'); options.stream.push('127.0.0.1\n'); options.stream.push(null); await promise; @@ -58,6 +64,12 @@ describe('write_lines_to_bulk_list_items', () => { test('It imports a set of items to a write buffer by calling "getListItemByValues" with two values given', async () => { const options = getImportListItemsToStreamOptionsMock(); const promise = importListItemsToStream(options); + options.stream.push('--boundary\n'); + options.stream.push('Content-type: text/plain\n'); + options.stream.push( + 'Content-Disposition: form-data; name="fieldName"; filename="filename.text"\n' + ); + options.stream.push('\n'); options.stream.push('127.0.0.1\n'); options.stream.push('127.0.0.2\n'); options.stream.push(null); From d922ee1f8c1051633d58b34b5f272619687786de Mon Sep 17 00:00:00 2001 From: Toby Brain Date: Tue, 1 Oct 2024 04:14:11 +1000 Subject: [PATCH 42/60] Support global_data_tags in the policy update request (#194421) ## Summary https://github.com/elastic/kibana/pull/183563 adds support for `global_data_tags` however the field is not added to the update request definition in the OpenAPI spec. This PR defines the field within the API spec. Related to https://github.com/elastic/terraform-provider-elasticstack/pull/730 ### 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] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [x] 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] 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) ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../output/kibana.serverless.staging.yaml | 11 +++++++++++ oas_docs/output/kibana.serverless.yaml | 11 +++++++++++ oas_docs/output/kibana.staging.yaml | 11 +++++++++++ oas_docs/output/kibana.yaml | 11 +++++++++++ .../plugins/fleet/common/openapi/bundled.json | 19 ++++++++++++++++++- .../plugins/fleet/common/openapi/bundled.yaml | 11 +++++++++++ .../schemas/agent_policy_update_request.yaml | 9 +++++++++ 7 files changed, 82 insertions(+), 1 deletion(-) diff --git a/oas_docs/output/kibana.serverless.staging.yaml b/oas_docs/output/kibana.serverless.staging.yaml index a5d53bd71cc83..f4ed7a9767924 100644 --- a/oas_docs/output/kibana.serverless.staging.yaml +++ b/oas_docs/output/kibana.serverless.staging.yaml @@ -19977,6 +19977,17 @@ components: force: description: Force agent policy creation even if packages are not verified. type: boolean + global_data_tags: + items: + additionalProperties: + oneOf: + - type: string + - type: number + description: >- + User defined data tags that are added to all of the inputs. The + values can be strings or numbers. + type: object + type: array inactivity_timeout: type: integer is_protected: diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index 93c3a5533c8a0..1b4209e9eec0a 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -12821,6 +12821,17 @@ components: force: description: Force agent policy creation even if packages are not verified. type: boolean + global_data_tags: + items: + additionalProperties: + oneOf: + - type: string + - type: number + description: >- + User defined data tags that are added to all of the inputs. The + values can be strings or numbers. + type: object + type: array inactivity_timeout: type: integer is_protected: diff --git a/oas_docs/output/kibana.staging.yaml b/oas_docs/output/kibana.staging.yaml index 96352fc0cd962..618bd42ab1f72 100644 --- a/oas_docs/output/kibana.staging.yaml +++ b/oas_docs/output/kibana.staging.yaml @@ -27753,6 +27753,17 @@ components: force: description: Force agent policy creation even if packages are not verified. type: boolean + global_data_tags: + items: + additionalProperties: + oneOf: + - type: string + - type: number + description: >- + User defined data tags that are added to all of the inputs. The + values can be strings or numbers. + type: object + type: array inactivity_timeout: type: integer is_protected: diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index 6d53cb1a38bdd..35a446f538a6a 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -19780,6 +19780,17 @@ components: force: description: Force agent policy creation even if packages are not verified. type: boolean + global_data_tags: + items: + additionalProperties: + oneOf: + - type: string + - type: number + description: >- + User defined data tags that are added to all of the inputs. The + values can be strings or numbers. + type: object + type: array inactivity_timeout: type: integer is_protected: diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json index 2d74305ad3bd5..7ddd44baacf2d 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.json +++ b/x-pack/plugins/fleet/common/openapi/bundled.json @@ -7812,6 +7812,23 @@ "force": { "type": "boolean", "description": "Force agent policy creation even if packages are not verified." + }, + "global_data_tags": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "description": "User defined data tags that are added to all of the inputs. The values can be strings or numbers." + } } }, "required": [ @@ -9563,4 +9580,4 @@ "basicAuth": [] } ] -} +} \ No newline at end of file diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml index c36758e8a4432..d60963068b8e5 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.yaml +++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml @@ -5011,6 +5011,17 @@ components: force: type: boolean description: Force agent policy creation even if packages are not verified. + global_data_tags: + type: array + items: + type: object + additionalProperties: + oneOf: + - type: string + - type: number + description: >- + User defined data tags that are added to all of the inputs. The + values can be strings or numbers. required: - name - namespace diff --git a/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy_update_request.yaml b/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy_update_request.yaml index 7fb5581aa79e4..1d1dbd45037ae 100644 --- a/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy_update_request.yaml +++ b/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy_update_request.yaml @@ -47,6 +47,15 @@ properties: force: type: boolean description: Force agent policy creation even if packages are not verified. + global_data_tags: + type: array + items: + type: object + additionalProperties: + oneOf: + - type: string + - type: number + description: User defined data tags that are added to all of the inputs. The values can be strings or numbers. required: - name - namespace From 866adf37f13c79c06fe426fa822231940132de03 Mon Sep 17 00:00:00 2001 From: Cee Chen <549407+cee-chen@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:37:47 -0700 Subject: [PATCH 43/60] Delete imports/references to EUI's distributed `.css` files (#194237) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Trying #194082 again, this time wholly deleting `kbn-ui-shared-deps-npm.v8.light/dark.css` as well 🤞 Original PR description: > These files no longer contain any meaningful CSS used within Kibana as of EUI's completed Emotion migration, and can be safely removed. EUI will shortly no longer distribute these static `.css` files (although `.scss` src files will still remain exported for the near future). --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../src/render_utils.test.ts | 36 ++++++++----------- .../src/render_utils.ts | 18 ++-------- .../src/rendering_service.test.ts | 9 ----- .../src/rendering_service.tsx | 1 - packages/kbn-storybook/templates/index.ejs | 1 - packages/kbn-ui-shared-deps-npm/index.js | 24 ------------- .../kbn-ui-shared-deps-npm/webpack.config.js | 2 -- .../plugins/canvas/shareable_runtime/index.ts | 1 - .../plugins/canvas/storybook/addon/panel.tsx | 1 - .../__snapshots__/prompt_page.test.tsx.snap | 4 +-- .../unauthenticated_page.test.tsx.snap | 4 +-- .../reset_session_page.test.tsx.snap | 4 +-- .../plugins/security/server/prompt_page.tsx | 2 -- x-pack/plugins/security/tsconfig.json | 1 - 14 files changed, 22 insertions(+), 86 deletions(-) diff --git a/packages/core/rendering/core-rendering-server-internal/src/render_utils.test.ts b/packages/core/rendering/core-rendering-server-internal/src/render_utils.test.ts index 85b3186a57c80..5cdf7ceb4ba39 100644 --- a/packages/core/rendering/core-rendering-server-internal/src/render_utils.test.ts +++ b/packages/core/rendering/core-rendering-server-internal/src/render_utils.test.ts @@ -55,39 +55,31 @@ describe('getCommonStylesheetPaths', () => { describe('getStylesheetPaths', () => { describe('when darkMode is `true`', () => { - describe('when themeVersion is `v8`', () => { - it('returns the correct list', () => { - expect( - getThemeStylesheetPaths({ - darkMode: true, - themeVersion: 'v8', - baseHref: '/base-path/buildShaShort', - }) - ).toMatchInlineSnapshot(` + it('returns the correct list', () => { + expect( + getThemeStylesheetPaths({ + darkMode: true, + baseHref: '/base-path/buildShaShort', + }) + ).toMatchInlineSnapshot(` Array [ - "/base-path/buildShaShort/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.v8.dark.css", "/base-path/buildShaShort/ui/legacy_dark_theme.min.css", ] `); - }); }); }); describe('when darkMode is `false`', () => { - describe('when themeVersion is `v8`', () => { - it('returns the correct list', () => { - expect( - getThemeStylesheetPaths({ - darkMode: false, - themeVersion: 'v8', - baseHref: '/base-path/buildShaShort', - }) - ).toMatchInlineSnapshot(` + it('returns the correct list', () => { + expect( + getThemeStylesheetPaths({ + darkMode: false, + baseHref: '/base-path/buildShaShort', + }) + ).toMatchInlineSnapshot(` Array [ - "/base-path/buildShaShort/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.v8.light.css", "/base-path/buildShaShort/ui/legacy_light_theme.min.css", ] `); - }); }); }); }); diff --git a/packages/core/rendering/core-rendering-server-internal/src/render_utils.ts b/packages/core/rendering/core-rendering-server-internal/src/render_utils.ts index dd8782e67edff..776e385906d7f 100644 --- a/packages/core/rendering/core-rendering-server-internal/src/render_utils.ts +++ b/packages/core/rendering/core-rendering-server-internal/src/render_utils.ts @@ -8,7 +8,6 @@ */ import { firstValueFrom } from 'rxjs'; -import UiSharedDepsNpm from '@kbn/ui-shared-deps-npm'; import * as UiSharedDepsSrc from '@kbn/ui-shared-deps-src'; import type { IConfigService } from '@kbn/config'; import type { BrowserLoggingConfig } from '@kbn/core-logging-common-internal'; @@ -57,28 +56,15 @@ export const getCommonStylesheetPaths = ({ baseHref }: { baseHref: string }) => export const getThemeStylesheetPaths = ({ darkMode, - themeVersion, baseHref, }: { darkMode: boolean; - themeVersion: UiSharedDepsNpm.ThemeVersion; baseHref: string; }) => { - const bundlesHref = getBundlesHref(baseHref); return [ ...(darkMode - ? [ - `${bundlesHref}/kbn-ui-shared-deps-npm/${UiSharedDepsNpm.darkCssDistFilename( - themeVersion - )}`, - `${baseHref}/ui/legacy_dark_theme.min.css`, - ] - : [ - `${bundlesHref}/kbn-ui-shared-deps-npm/${UiSharedDepsNpm.lightCssDistFilename( - themeVersion - )}`, - `${baseHref}/ui/legacy_light_theme.min.css`, - ]), + ? [`${baseHref}/ui/legacy_dark_theme.min.css`] + : [`${baseHref}/ui/legacy_light_theme.min.css`]), ]; }; diff --git a/packages/core/rendering/core-rendering-server-internal/src/rendering_service.test.ts b/packages/core/rendering/core-rendering-server-internal/src/rendering_service.test.ts index b22697a494788..7f7f2f504411d 100644 --- a/packages/core/rendering/core-rendering-server-internal/src/rendering_service.test.ts +++ b/packages/core/rendering/core-rendering-server-internal/src/rendering_service.test.ts @@ -224,12 +224,10 @@ function renderTestCases( expect(getThemeStylesheetPathsMock).toHaveBeenCalledTimes(2); expect(getThemeStylesheetPathsMock).toHaveBeenCalledWith({ darkMode: true, - themeVersion: 'v8', baseHref: '/mock-server-basepath', }); expect(getThemeStylesheetPathsMock).toHaveBeenCalledWith({ darkMode: false, - themeVersion: 'v8', baseHref: '/mock-server-basepath', }); }); @@ -380,7 +378,6 @@ function renderDarkModeTestCases( expect(getThemeStylesheetPathsMock).toHaveBeenCalledWith({ darkMode: true, - themeVersion: 'v8', baseHref: '/mock-server-basepath', }); }); @@ -405,7 +402,6 @@ function renderDarkModeTestCases( expect(getThemeStylesheetPathsMock).toHaveBeenCalledWith({ darkMode: false, - themeVersion: 'v8', baseHref: '/mock-server-basepath', }); }); @@ -428,7 +424,6 @@ function renderDarkModeTestCases( expect(getThemeStylesheetPathsMock).toHaveBeenCalledWith({ darkMode: false, - themeVersion: 'v8', baseHref: '/mock-server-basepath', }); }); @@ -451,7 +446,6 @@ function renderDarkModeTestCases( expect(getThemeStylesheetPathsMock).toHaveBeenCalledWith({ darkMode: true, - themeVersion: 'v8', baseHref: '/mock-server-basepath', }); }); @@ -474,7 +468,6 @@ function renderDarkModeTestCases( expect(getThemeStylesheetPathsMock).toHaveBeenCalledWith({ darkMode: false, - themeVersion: 'v8', baseHref: '/mock-server-basepath', }); }); @@ -497,7 +490,6 @@ function renderDarkModeTestCases( expect(getThemeStylesheetPathsMock).toHaveBeenCalledWith({ darkMode: false, - themeVersion: 'v8', baseHref: '/mock-server-basepath', }); }); @@ -520,7 +512,6 @@ function renderDarkModeTestCases( expect(getThemeStylesheetPathsMock).toHaveBeenCalledWith({ darkMode: true, - themeVersion: 'v8', baseHref: '/mock-server-basepath', }); }); diff --git a/packages/core/rendering/core-rendering-server-internal/src/rendering_service.tsx b/packages/core/rendering/core-rendering-server-internal/src/rendering_service.tsx index a696328475853..44841ec0fbe3f 100644 --- a/packages/core/rendering/core-rendering-server-internal/src/rendering_service.tsx +++ b/packages/core/rendering/core-rendering-server-internal/src/rendering_service.tsx @@ -212,7 +212,6 @@ export class RenderingService { const themeStylesheetPaths = (mode: boolean) => getThemeStylesheetPaths({ darkMode: mode, - themeVersion, baseHref: staticAssetsHrefBase, }); const commonStylesheetPaths = getCommonStylesheetPaths({ diff --git a/packages/kbn-storybook/templates/index.ejs b/packages/kbn-storybook/templates/index.ejs index bf40dfb9fd3ca..776b495447cec 100644 --- a/packages/kbn-storybook/templates/index.ejs +++ b/packages/kbn-storybook/templates/index.ejs @@ -27,7 +27,6 @@ - <% if (typeof headHtmlSnippet !=='undefined' ) { %> diff --git a/packages/kbn-ui-shared-deps-npm/index.js b/packages/kbn-ui-shared-deps-npm/index.js index b8be150acc311..73aaf151e8f0f 100644 --- a/packages/kbn-ui-shared-deps-npm/index.js +++ b/packages/kbn-ui-shared-deps-npm/index.js @@ -44,28 +44,4 @@ module.exports = { * Webpack loader for configuring the public path lookup from `window.__kbnPublicPath__`. */ publicPathLoader, - - /** - * Filename of the light-theme css file in the distributable directory - * @param {ThemeVersion} themeVersion - */ - lightCssDistFilename(themeVersion) { - if (themeVersion !== 'v8') { - throw new Error(`unsupported theme version [${themeVersion}]`); - } - - return 'kbn-ui-shared-deps-npm.v8.light.css'; - }, - - /** - * Filename of the dark-theme css file in the distributable directory - * @param {ThemeVersion} themeVersion - */ - darkCssDistFilename(themeVersion) { - if (themeVersion !== 'v8') { - throw new Error(`unsupported theme version [${themeVersion}]`); - } - - return 'kbn-ui-shared-deps-npm.v8.dark.css'; - }, }; diff --git a/packages/kbn-ui-shared-deps-npm/webpack.config.js b/packages/kbn-ui-shared-deps-npm/webpack.config.js index 4f3971d293489..3b16430aeb724 100644 --- a/packages/kbn-ui-shared-deps-npm/webpack.config.js +++ b/packages/kbn-ui-shared-deps-npm/webpack.config.js @@ -101,8 +101,6 @@ module.exports = (_, argv) => { 'tslib', 'uuid', ], - 'kbn-ui-shared-deps-npm.v8.dark': ['@elastic/eui/dist/eui_theme_dark.css'], - 'kbn-ui-shared-deps-npm.v8.light': ['@elastic/eui/dist/eui_theme_light.css'], }, context: __dirname, devtool: 'cheap-source-map', diff --git a/x-pack/plugins/canvas/shareable_runtime/index.ts b/x-pack/plugins/canvas/shareable_runtime/index.ts index 475989494c574..ca7b1441d7bb1 100644 --- a/x-pack/plugins/canvas/shareable_runtime/index.ts +++ b/x-pack/plugins/canvas/shareable_runtime/index.ts @@ -8,4 +8,3 @@ export * from './api'; import '@kbn/core-apps-server-internal/assets/legacy_light_theme.css'; import '../public/style/index.scss'; -import '@elastic/eui/dist/eui_theme_light.css'; diff --git a/x-pack/plugins/canvas/storybook/addon/panel.tsx b/x-pack/plugins/canvas/storybook/addon/panel.tsx index c799df73bd8ae..d9883ab7ed086 100644 --- a/x-pack/plugins/canvas/storybook/addon/panel.tsx +++ b/x-pack/plugins/canvas/storybook/addon/panel.tsx @@ -9,7 +9,6 @@ import React, { useState } from 'react'; import { EuiResizableContainer } from '@elastic/eui'; import { StateChange } from './components/state_change'; -import '@elastic/eui/dist/eui_theme_light.css'; import './panel.css'; import { RecordedAction } from './types'; diff --git a/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap b/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap index 0556a61dbf47b..df1140ea44828 100644 --- a/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap +++ b/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`PromptPage renders as expected with additional scripts 1`] = `"ElasticMockedFonts

Some Title

Some Body
Action#1
Action#2
"`; +exports[`PromptPage renders as expected with additional scripts 1`] = `"ElasticMockedFonts

Some Title

Some Body
Action#1
Action#2
"`; -exports[`PromptPage renders as expected without additional scripts 1`] = `"ElasticMockedFonts

Some Title

Some Body
Action#1
Action#2
"`; +exports[`PromptPage renders as expected without additional scripts 1`] = `"ElasticMockedFonts

Some Title

Some Body
Action#1
Action#2
"`; diff --git a/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap b/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap index 127d02f38b08e..2466a01112102 100644 --- a/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap +++ b/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`UnauthenticatedPage renders as expected 1`] = `"ElasticMockedFonts

We hit an authentication error

Try logging in again, and if the problem persists, contact your system administrator.

"`; +exports[`UnauthenticatedPage renders as expected 1`] = `"ElasticMockedFonts

We hit an authentication error

Try logging in again, and if the problem persists, contact your system administrator.

"`; -exports[`UnauthenticatedPage renders as expected with custom title 1`] = `"My Company NameMockedFonts

We hit an authentication error

Try logging in again, and if the problem persists, contact your system administrator.

"`; +exports[`UnauthenticatedPage renders as expected with custom title 1`] = `"My Company NameMockedFonts

We hit an authentication error

Try logging in again, and if the problem persists, contact your system administrator.

"`; diff --git a/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap b/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap index 394b0014e7cae..f851cb9139ebd 100644 --- a/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap +++ b/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`ResetSessionPage renders as expected 1`] = `"ElasticMockedFonts

You do not have permission to access the requested page

Either go back to the previous page or log in as a different user.

"`; +exports[`ResetSessionPage renders as expected 1`] = `"ElasticMockedFonts

You do not have permission to access the requested page

Either go back to the previous page or log in as a different user.

"`; -exports[`ResetSessionPage renders as expected with custom page title 1`] = `"My Company NameMockedFonts

You do not have permission to access the requested page

Either go back to the previous page or log in as a different user.

"`; +exports[`ResetSessionPage renders as expected with custom page title 1`] = `"My Company NameMockedFonts

You do not have permission to access the requested page

Either go back to the previous page or log in as a different user.

"`; diff --git a/x-pack/plugins/security/server/prompt_page.tsx b/x-pack/plugins/security/server/prompt_page.tsx index f33910024c737..1161585baeb37 100644 --- a/x-pack/plugins/security/server/prompt_page.tsx +++ b/x-pack/plugins/security/server/prompt_page.tsx @@ -23,7 +23,6 @@ import type { IStaticAssets } from '@kbn/core-http-server'; import { Fonts } from '@kbn/core-rendering-server-internal'; import { i18n } from '@kbn/i18n'; import { I18nProvider } from '@kbn/i18n-react'; -import UiSharedDepsNpm from '@kbn/ui-shared-deps-npm'; import * as UiSharedDepsSrc from '@kbn/ui-shared-deps-src'; // Preload the warning icon used by `EuiEmptyPrompt` to ensure that it's loaded @@ -79,7 +78,6 @@ export function PromptPage({ const regularBundlePath = staticAssets.prependPublicUrl('/bundles'); const styleSheetPaths = [ `${regularBundlePath}/kbn-ui-shared-deps-src/${UiSharedDepsSrc.cssDistFilename}`, - `${regularBundlePath}/kbn-ui-shared-deps-npm/${UiSharedDepsNpm.lightCssDistFilename('v8')}`, ]; return ( diff --git a/x-pack/plugins/security/tsconfig.json b/x-pack/plugins/security/tsconfig.json index c3df5dda29481..21a32edcec212 100644 --- a/x-pack/plugins/security/tsconfig.json +++ b/x-pack/plugins/security/tsconfig.json @@ -43,7 +43,6 @@ "@kbn/utils", "@kbn/core-logging-server-mocks", "@kbn/core-rendering-server-internal", - "@kbn/ui-shared-deps-npm", "@kbn/ui-shared-deps-src", "@kbn/core-saved-objects-server", "@kbn/utility-types-jest", From 7fd33174235bfc12d29a4fc18afabf9e028cea5b Mon Sep 17 00:00:00 2001 From: Marco Vettorello Date: Mon, 30 Sep 2024 20:43:47 +0200 Subject: [PATCH 44/60] [Lens] Fix all deprecated `mixed-decls` warnings (#193864) --- .../expression_gauge/public/components/index.scss | 2 +- .../expression_heatmap/public/components/index.scss | 2 +- .../public/components/metric.scss | 2 +- .../public/components/tooltip/tooltip.scss | 11 ++++++----- .../public/filter_bar/filter_item/filter_item.scss | 4 +++- .../saved_query_management_list.scss | 2 +- src/plugins/vis_default_editor/public/_sidebar.scss | 2 +- .../components/vis_types/markdown/_markdown.scss | 3 +-- .../vis_types/vega/public/components/vega_vis.scss | 6 ++---- .../public/vislib/components/legend/_legend.scss | 2 +- .../vislib/public/vislib/lib/layout/_layout.scss | 3 +-- .../visualize_app/components/visualize_editor.scss | 6 ++---- src/plugins/visualizations/public/wizard/dialog.scss | 12 +++++------- .../wizard/group_selection/group_selection.scss | 5 ++--- .../public/datasources/form_based/help_popover.scss | 2 +- .../editor_frame/config_panel/layer_panel.scss | 2 +- .../editor_frame/frame_layout.scss | 10 +++------- .../editor_frame/suggestion_panel.scss | 4 ++-- .../editor_frame/workspace_panel/message_list.scss | 2 +- .../workspace_panel/workspace_panel_wrapper.scss | 3 +-- .../public/embeddable/embeddable_info_badges.scss | 3 +-- .../dataview_picker/toolbar_button.scss | 10 +++++----- .../public/shared_components/flyout_container.scss | 2 +- .../setting_with_sibling_flyout.scss | 2 +- .../trigger_actions/open_lens_config/helpers.scss | 6 +++--- .../plugins/lens/public/visualization_container.scss | 5 ++--- 26 files changed, 50 insertions(+), 63 deletions(-) diff --git a/src/plugins/chart_expressions/expression_gauge/public/components/index.scss b/src/plugins/chart_expressions/expression_gauge/public/components/index.scss index fb7addf29ae55..ea2b35fba9718 100644 --- a/src/plugins/chart_expressions/expression_gauge/public/components/index.scss +++ b/src/plugins/chart_expressions/expression_gauge/public/components/index.scss @@ -1,9 +1,9 @@ .gauge-container { - @include euiScrollBar; height: 100%; width: 100%; // the FocusTrap is adding extra divs which are making the visualization redraw twice // with a visible glitch. This make the chart library resilient to this extra reflow overflow: hidden; user-select: text; + @include euiScrollBar; } diff --git a/src/plugins/chart_expressions/expression_heatmap/public/components/index.scss b/src/plugins/chart_expressions/expression_heatmap/public/components/index.scss index 65134907719eb..66f45c113cc64 100644 --- a/src/plugins/chart_expressions/expression_heatmap/public/components/index.scss +++ b/src/plugins/chart_expressions/expression_heatmap/public/components/index.scss @@ -1,5 +1,4 @@ .heatmap-container { - @include euiScrollBar; height: 100%; width: 100%; // the FocusTrap is adding extra divs which are making the visualization redraw twice @@ -7,4 +6,5 @@ overflow: auto hidden; user-select: text; padding: $euiSizeS; + @include euiScrollBar; } diff --git a/src/plugins/chart_expressions/expression_legacy_metric/public/components/metric.scss b/src/plugins/chart_expressions/expression_legacy_metric/public/components/metric.scss index 7adcb109bc931..59d06546da494 100644 --- a/src/plugins/chart_expressions/expression_legacy_metric/public/components/metric.scss +++ b/src/plugins/chart_expressions/expression_legacy_metric/public/components/metric.scss @@ -6,7 +6,6 @@ // mtrChart__legend-isLoading .legacyMtrVis { - @include euiScrollBar; height: 100%; width: 100%; display: flex; @@ -15,6 +14,7 @@ align-items: center; flex-wrap: wrap; overflow: auto; + @include euiScrollBar; } .legacyMtrVis__value { diff --git a/src/plugins/chart_expressions/expression_xy/public/components/tooltip/tooltip.scss b/src/plugins/chart_expressions/expression_xy/public/components/tooltip/tooltip.scss index 1e705724fbedc..95eb4bae87c1d 100644 --- a/src/plugins/chart_expressions/expression_xy/public/components/tooltip/tooltip.scss +++ b/src/plugins/chart_expressions/expression_xy/public/components/tooltip/tooltip.scss @@ -1,10 +1,11 @@ .detailedTooltip { - @include euiToolTipStyle('s'); pointer-events: none; - max-width: $euiSizeXL * 10; - overflow: hidden; - padding: $euiSizeS; - + @include euiToolTipStyle('s'); + & { // stylelint-disable-line no-duplicate-selectors + max-width: $euiSizeXL * 10; + overflow: hidden; + padding: $euiSizeS; + } table { table-layout: fixed; width: 100%; diff --git a/src/plugins/unified_search/public/filter_bar/filter_item/filter_item.scss b/src/plugins/unified_search/public/filter_bar/filter_item/filter_item.scss index 362aec7264983..45618a623aad3 100644 --- a/src/plugins/unified_search/public/filter_bar/filter_item/filter_item.scss +++ b/src/plugins/unified_search/public/filter_bar/filter_item/filter_item.scss @@ -14,7 +14,9 @@ &:not(.globalFilterItem-isDisabled) { @include euiFormControlDefaultShadow; - box-shadow: #{$euiFormControlBoxShadow}, inset 0 0 0 1px $kbnGlobalFilterItemBorderColor; // Make the actual border more visible + & { // stylelint-disable-line no-duplicate-selectors + box-shadow: #{$euiFormControlBoxShadow}, inset 0 0 0 1px $kbnGlobalFilterItemBorderColor; // Make the actual border more visible + } } } diff --git a/src/plugins/unified_search/public/saved_query_management/saved_query_management_list.scss b/src/plugins/unified_search/public/saved_query_management/saved_query_management_list.scss index ad78b43fb1963..0309f919d6986 100644 --- a/src/plugins/unified_search/public/saved_query_management/saved_query_management_list.scss +++ b/src/plugins/unified_search/public/saved_query_management/saved_query_management_list.scss @@ -5,9 +5,9 @@ } .kbnSavedQueryManagement__list { - @include euiYScrollWithShadows; max-height: inherit; // Fixes overflow for applied max-height // Left/Right padding is calculated to match the left alignment of the // popover text and buttons padding: calc($euiSizeM / 2) $euiSizeXS !important; // Override flush + @include euiYScrollWithShadows; } diff --git a/src/plugins/vis_default_editor/public/_sidebar.scss b/src/plugins/vis_default_editor/public/_sidebar.scss index 0586b6809bcc0..1fe20c85422c2 100644 --- a/src/plugins/vis_default_editor/public/_sidebar.scss +++ b/src/plugins/vis_default_editor/public/_sidebar.scss @@ -24,9 +24,9 @@ } @include euiBreakpoint('l', 'xl') { + overflow: auto; @include flexParent(1, 1, 1px); @include euiScrollBar; - overflow: auto; } } diff --git a/src/plugins/vis_types/timeseries/public/application/components/vis_types/markdown/_markdown.scss b/src/plugins/vis_types/timeseries/public/application/components/vis_types/markdown/_markdown.scss index ec16404df8e7f..661667288ad93 100644 --- a/src/plugins/vis_types/timeseries/public/application/components/vis_types/markdown/_markdown.scss +++ b/src/plugins/vis_types/timeseries/public/application/components/vis_types/markdown/_markdown.scss @@ -6,7 +6,6 @@ } .tvbMarkdown__content { - @include euiScrollBar; display: flex; flex-direction: column; flex: 1 0 auto; @@ -16,7 +15,7 @@ right: 0; bottom: 0; overflow: hidden; - + @include euiScrollBar; &--middle { justify-content: center; } diff --git a/src/plugins/vis_types/vega/public/components/vega_vis.scss b/src/plugins/vis_types/vega/public/components/vega_vis.scss index 830f4f7b1fd95..f21a1223ed951 100644 --- a/src/plugins/vis_types/vega/public/components/vega_vis.scss +++ b/src/plugins/vis_types/vega/public/components/vega_vis.scss @@ -1,10 +1,9 @@ // stylelint-disable selector-no-qualifying-type .vgaVis__wrapper { - @include euiScrollBar; - display: flex; flex: 1 1 0; overflow: auto; + @include euiScrollBar; } .vgaVis { @@ -21,12 +20,11 @@ } .vgaVis__view { - @include euiScrollBar; overflow: auto; z-index: 0; flex: 1 1 100%; - display: block; + @include euiScrollBar; canvas { display: block; diff --git a/src/plugins/vis_types/vislib/public/vislib/components/legend/_legend.scss b/src/plugins/vis_types/vislib/public/vislib/components/legend/_legend.scss index cb63811800c2d..a6b029674dcaf 100644 --- a/src/plugins/vis_types/vislib/public/vislib/components/legend/_legend.scss +++ b/src/plugins/vis_types/vislib/public/vislib/components/legend/_legend.scss @@ -45,7 +45,6 @@ $visLegendWidth: 150px; } .visLegend__list { - @include euiScrollBar; display: flex; width: $visLegendWidth; // Must be a hard-coded width for the chart to get its correct dimensions flex: 1 1 auto; @@ -53,6 +52,7 @@ $visLegendWidth: 150px; overflow-x: hidden; overflow-y: auto; + @include euiScrollBar; .visLegend__button { font-size: $euiFontSizeXS; text-align: left; diff --git a/src/plugins/vis_types/vislib/public/vislib/lib/layout/_layout.scss b/src/plugins/vis_types/vislib/public/vislib/lib/layout/_layout.scss index 8b92af5a4fdcf..b470b528d5b22 100644 --- a/src/plugins/vis_types/vislib/public/vislib/lib/layout/_layout.scss +++ b/src/plugins/vis_types/vislib/public/vislib/lib/layout/_layout.scss @@ -134,12 +134,11 @@ } .chart { - @include euiScrollBar; flex: 1 1 100%; min-height: 0; min-width: 0; overflow: visible; - + @include euiScrollBar; > svg { display: block; } diff --git a/src/plugins/visualizations/public/visualize_app/components/visualize_editor.scss b/src/plugins/visualizations/public/visualize_app/components/visualize_editor.scss index 6ddf3c1264bff..6ab251c7ee37e 100644 --- a/src/plugins/visualizations/public/visualize_app/components/visualize_editor.scss +++ b/src/plugins/visualizations/public/visualize_app/components/visualize_editor.scss @@ -1,8 +1,6 @@ .visEditor { - @include flexParent(); - height: 100%; - + @include flexParent(); @include euiBreakpoint('xs', 's', 'm') { .visualization { // While we are on a small screen the visualization is below the @@ -23,7 +21,7 @@ a tilemap in an iframe: https://github.com/elastic/kibana/issues/16457 */ } .visEditor__content { - @include flexParent(); width: 100%; z-index: 0; + @include flexParent(); } diff --git a/src/plugins/visualizations/public/wizard/dialog.scss b/src/plugins/visualizations/public/wizard/dialog.scss index a3dcef1b82b33..96862073b89cf 100644 --- a/src/plugins/visualizations/public/wizard/dialog.scss +++ b/src/plugins/visualizations/public/wizard/dialog.scss @@ -2,20 +2,15 @@ $modalWidth: $euiSizeL * 34; $modalHeight: $euiSizeL * 30; .visNewVisDialog { - @include euiBreakpoint('xs', 's') { - max-height: 100%; - } - max-width: $modalWidth; max-height: $modalHeight; background: $euiColorEmptyShade; -} - -.visNewVisDialog--aggbased { @include euiBreakpoint('xs', 's') { max-height: 100%; } +} +.visNewVisDialog--aggbased { max-width: $modalWidth; max-height: $modalHeight; background-repeat: no-repeat; @@ -23,6 +18,9 @@ $modalHeight: $euiSizeL * 30; background-size: 30%; // sass-lint:disable-block quotes space-after-comma background-image: url(lightOrDarkTheme("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='313' height='461' viewBox='0 0 313 461'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='%23F5F7FA' d='M294.009,184.137 C456.386,184.137 588.018,315.77 588.018,478.146 C588.018,640.523 456.386,772.156 294.009,772.156 C131.632,772.156 0,640.523 0,478.146 C0,315.77 131.632,184.137 294.009,184.137 Z M294.009,384.552 C242.318,384.552 200.415,426.456 200.415,478.146 C200.415,529.837 242.318,571.741 294.009,571.741 C345.7,571.741 387.604,529.837 387.604,478.146 C387.604,426.456 345.7,384.552 294.009,384.552 Z'/%3E%3Cpath fill='%23E6EBF2' d='M202.958,365.731 L202.958,380.991 L187.698,380.991 L187.698,365.731 L202.958,365.731 Z M202.958,327.073 L202.958,342.333 L187.698,342.333 L187.698,327.073 L202.958,327.073 Z M243.651,325.038 L243.651,340.298 L228.391,340.298 L228.391,325.038 L243.651,325.038 Z M243.651,286.379 L243.651,301.639 L228.391,301.639 L228.391,286.379 L243.651,286.379 Z M202.958,285.362 L202.958,300.622 L187.698,300.622 L187.698,285.362 L202.958,285.362 Z M284.345,284.345 L284.345,299.605 L269.085,299.605 L269.085,284.345 L284.345,284.345 Z M284.345,245.686 L284.345,260.946 L269.085,260.946 L269.085,245.686 L284.345,245.686 Z M243.651,244.669 L243.651,259.929 L228.391,259.929 L228.391,244.669 L243.651,244.669 Z M202.958,243.651 L202.958,258.911 L187.698,258.911 L187.698,243.651 L202.958,243.651 Z M284.345,203.975 L284.345,219.235 L269.085,219.235 L269.085,203.975 L284.345,203.975 Z M202.958,203.975 L202.958,219.235 L187.698,219.235 L187.698,203.975 L202.958,203.975 Z M243.651,202.958 L243.651,218.218 L228.391,218.218 L228.391,202.958 L243.651,202.958 Z M243.651,163.282 L243.651,178.542 L228.391,178.542 L228.391,163.282 L243.651,163.282 Z M202.958,163.282 L202.958,178.542 L187.698,178.542 L187.698,163.282 L202.958,163.282 Z M284.345,162.265 L284.345,177.525 L269.085,177.525 L269.085,162.265 L284.345,162.265 Z M284.345,122.589 L284.345,137.849 L269.085,137.849 L269.085,122.589 L284.345,122.589 Z M243.651,122.589 L243.651,137.849 L228.391,137.849 L228.391,122.589 L243.651,122.589 Z M202.958,122.589 L202.958,137.849 L187.698,137.849 L187.698,122.589 L202.958,122.589 Z M284.345,81.8954 L284.345,97.1554 L269.085,97.1554 L269.085,81.8954 L284.345,81.8954 Z M243.651,81.8954 L243.651,97.1554 L228.391,97.1554 L228.391,81.8954 L243.651,81.8954 Z M202.958,81.8954 L202.958,97.1554 L187.698,97.1554 L187.698,81.8954 L202.958,81.8954 Z M284.345,41.202 L284.345,56.462 L269.085,56.462 L269.085,41.202 L284.345,41.202 Z M243.651,41.202 L243.651,56.462 L228.391,56.462 L228.391,41.202 L243.651,41.202 Z M284.345,0.508789 L284.345,15.7688 L269.085,15.7688 L269.085,0.508789 L284.345,0.508789 Z'/%3E%3C/g%3E%3C/svg%3E","data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='313' height='461' viewBox='0 0 313 461'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='%2318191E' d='M294.009,184.137 C456.386,184.137 588.018,315.77 588.018,478.146 C588.018,640.523 456.386,772.156 294.009,772.156 C131.632,772.156 0,640.523 0,478.146 C0,315.77 131.632,184.137 294.009,184.137 Z M294.009,384.552 C242.318,384.552 200.415,426.456 200.415,478.146 C200.415,529.837 242.318,571.741 294.009,571.741 C345.7,571.741 387.604,529.837 387.604,478.146 C387.604,426.456 345.7,384.552 294.009,384.552 Z'/%3E%3Cpath fill='%2315161B' d='M202.958,365.731 L202.958,380.991 L187.698,380.991 L187.698,365.731 L202.958,365.731 Z M202.958,327.073 L202.958,342.333 L187.698,342.333 L187.698,327.073 L202.958,327.073 Z M243.651,325.038 L243.651,340.298 L228.391,340.298 L228.391,325.038 L243.651,325.038 Z M243.651,286.379 L243.651,301.639 L228.391,301.639 L228.391,286.379 L243.651,286.379 Z M202.958,285.362 L202.958,300.622 L187.698,300.622 L187.698,285.362 L202.958,285.362 Z M284.345,284.345 L284.345,299.605 L269.085,299.605 L269.085,284.345 L284.345,284.345 Z M284.345,245.686 L284.345,260.946 L269.085,260.946 L269.085,245.686 L284.345,245.686 Z M243.651,244.669 L243.651,259.929 L228.391,259.929 L228.391,244.669 L243.651,244.669 Z M202.958,243.651 L202.958,258.911 L187.698,258.911 L187.698,243.651 L202.958,243.651 Z M284.345,203.975 L284.345,219.235 L269.085,219.235 L269.085,203.975 L284.345,203.975 Z M202.958,203.975 L202.958,219.235 L187.698,219.235 L187.698,203.975 L202.958,203.975 Z M243.651,202.958 L243.651,218.218 L228.391,218.218 L228.391,202.958 L243.651,202.958 Z M243.651,163.282 L243.651,178.542 L228.391,178.542 L228.391,163.282 L243.651,163.282 Z M202.958,163.282 L202.958,178.542 L187.698,178.542 L187.698,163.282 L202.958,163.282 Z M284.345,162.265 L284.345,177.525 L269.085,177.525 L269.085,162.265 L284.345,162.265 Z M284.345,122.589 L284.345,137.849 L269.085,137.849 L269.085,122.589 L284.345,122.589 Z M243.651,122.589 L243.651,137.849 L228.391,137.849 L228.391,122.589 L243.651,122.589 Z M202.958,122.589 L202.958,137.849 L187.698,137.849 L187.698,122.589 L202.958,122.589 Z M284.345,81.8954 L284.345,97.1554 L269.085,97.1554 L269.085,81.8954 L284.345,81.8954 Z M243.651,81.8954 L243.651,97.1554 L228.391,97.1554 L228.391,81.8954 L243.651,81.8954 Z M202.958,81.8954 L202.958,97.1554 L187.698,97.1554 L187.698,81.8954 L202.958,81.8954 Z M284.345,41.202 L284.345,56.462 L269.085,56.462 L269.085,41.202 L284.345,41.202 Z M243.651,41.202 L243.651,56.462 L228.391,56.462 L228.391,41.202 L243.651,41.202 Z M284.345,0.508789 L284.345,15.7688 L269.085,15.7688 L269.085,0.508789 L284.345,0.508789 Z'/%3E%3C/g%3E%3C/svg%3E")); + @include euiBreakpoint('xs', 's') { + max-height: 100%; + } } .visNewVisSearchDialog { diff --git a/src/plugins/visualizations/public/wizard/group_selection/group_selection.scss b/src/plugins/visualizations/public/wizard/group_selection/group_selection.scss index ce46b872a97ee..04c1c3b26ece0 100644 --- a/src/plugins/visualizations/public/wizard/group_selection/group_selection.scss +++ b/src/plugins/visualizations/public/wizard/group_selection/group_selection.scss @@ -10,12 +10,11 @@ } .visNewVisDialogGroupSelection__footer { + padding: 0 $euiSizeXL $euiSizeL; + background: $euiColorLightestShade; @include euiBreakpoint('xs', 's') { background: $euiColorEmptyShade; } - - padding: 0 $euiSizeXL $euiSizeL; - background: $euiColorLightestShade; } .visNewVisDialogGroupSelection__footerDescriptionList { diff --git a/x-pack/plugins/lens/public/datasources/form_based/help_popover.scss b/x-pack/plugins/lens/public/datasources/form_based/help_popover.scss index ab5ac58a35ee0..af1bdcb459093 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/help_popover.scss +++ b/x-pack/plugins/lens/public/datasources/form_based/help_popover.scss @@ -3,9 +3,9 @@ } .lnsHelpPopover__content { - @include euiYScrollWithShadows; max-height: 40vh; padding: $euiSizeM; + @include euiYScrollWithShadows; } .lnsHelpPopover__buttonIcon { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss index 2776e57753d7a..23a3133501073 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss @@ -87,8 +87,8 @@ // Added .lnsLayerPanel__dimension specificity required for animation style override .lnsLayerPanel__dimension .lnsLayerPanel__dimensionLink { &:focus { - @include passDownFocusRing('.dimensionTrigger__textLabel'); background-color: transparent; text-decoration-thickness: $euiBorderWidthThin !important; + @include passDownFocusRing('.dimensionTrigger__textLabel'); } } \ No newline at end of file diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/frame_layout.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/frame_layout.scss index 622dab25e00ed..7b69fb1a6ea23 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/frame_layout.scss +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/frame_layout.scss @@ -35,10 +35,8 @@ } .visEditor { - @include flexParent(); - height: 100%; - + @include flexParent(); @include euiBreakpoint('xs', 's', 'm') { .visualization { // While we are on a small screen the visualization is below the @@ -59,7 +57,6 @@ a tilemap in an iframe: https://github.com/elastic/kibana/issues/16457 */ } .lnsFrameLayout__pageBody { - @include euiScrollBar; min-width: $lnsPanelMinWidth + $euiSizeXL; overflow: hidden auto; display: flex; @@ -73,7 +70,7 @@ a tilemap in an iframe: https://github.com/elastic/kibana/issues/16457 */ z-index: $lnsZLevel1; border-left: $euiBorderThin; border-right: $euiBorderThin; - + @include euiScrollBar; &:first-child { padding-left: $euiSize; } @@ -111,10 +108,9 @@ a tilemap in an iframe: https://github.com/elastic/kibana/issues/16457 */ } .lnsConfigPanel { - @include euiYScroll; padding: $euiSize $euiSize $euiSizeXL ($euiFormMaxWidth + $euiSize); margin-left: -$euiFormMaxWidth; - + @include euiYScroll; @include euiBreakpoint('xs', 's', 'm') { padding-left: $euiSize; margin-left: 0; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.scss index 35606c67382d5..a4af057dd33b0 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.scss +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.scss @@ -6,7 +6,6 @@ } .lnsSuggestionPanel__suggestions { - @include euiScrollBar; @include lnsOverflowShadowHorizontal; padding-top: $euiSizeXS; overflow-x: scroll; @@ -18,6 +17,7 @@ margin-left: -$euiSizeXS; padding-right: $euiSizeXS; margin-right: -$euiSizeXS; + @include euiScrollBar; } .lnsSuggestionPanel__button { @@ -31,8 +31,8 @@ box-shadow: none !important; // sass-lint:disable-line no-important &:focus { - @include euiFocusRing; transform: none !important; // sass-lint:disable-line no-important + @include euiFocusRing; } .lnsSuggestionPanel__expressionRenderer { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/message_list.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/message_list.scss index 3b7dd8049757a..6d91fc7d6465f 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/message_list.scss +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/message_list.scss @@ -5,9 +5,9 @@ } .lnsWorkspaceWarningList { - @include euiYScroll; max-height: $euiSize * 20; width: $euiSize * 16; + @include euiYScroll; } .lnsWorkspaceWarningList__item { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.scss index db0ca2613cc2f..98b9f6849fc88 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.scss +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.scss @@ -17,7 +17,6 @@ .lnsWorkspacePanelWrapper__pageContentBody { @include euiBottomShadowMedium; - @include euiScrollBar; flex-grow: 1; display: flex; align-items: stretch; @@ -25,7 +24,7 @@ border-radius: $euiBorderRadius; background: $euiColorEmptyShade; height: 100%; - + @include euiScrollBar; &>* { flex: 1 1 100%; display: flex; diff --git a/x-pack/plugins/lens/public/embeddable/embeddable_info_badges.scss b/x-pack/plugins/lens/public/embeddable/embeddable_info_badges.scss index d7f5840e4ff17..55407855b49f6 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable_info_badges.scss +++ b/x-pack/plugins/lens/public/embeddable/embeddable_info_badges.scss @@ -1,5 +1,4 @@ - .lnsEmbeddablePanelFeatureList { - @include euiYScroll; max-height: $euiSize * 20; + @include euiYScroll; } diff --git a/x-pack/plugins/lens/public/shared_components/dataview_picker/toolbar_button.scss b/x-pack/plugins/lens/public/shared_components/dataview_picker/toolbar_button.scss index cbf6d85349446..abd4d45a9e955 100644 --- a/x-pack/plugins/lens/public/shared_components/dataview_picker/toolbar_button.scss +++ b/x-pack/plugins/lens/public/shared_components/dataview_picker/toolbar_button.scss @@ -1,11 +1,6 @@ .kbnToolbarButton { line-height: $euiButtonHeight; // Keeps alignment of text and chart icon - // Override background color for non-disabled buttons - &:not(:disabled) { - background-color: $euiColorEmptyShade; - } - // todo: once issue https://github.com/elastic/eui/issues/4730 is merged, this code might be safe to remove // Some toolbar buttons are just icons, but EuiButton comes with margin and min-width that need to be removed min-width: 0; @@ -13,6 +8,11 @@ border-style: solid; border-color: $euiBorderColor; // Lighten the border color for all states + // Override background color for non-disabled buttons + &:not(:disabled) { + background-color: $euiColorEmptyShade; + } + .kbnToolbarButton__text > svg { margin-top: -1px; // Just some weird alignment issue when icon is the child not the `iconType` } diff --git a/x-pack/plugins/lens/public/shared_components/flyout_container.scss b/x-pack/plugins/lens/public/shared_components/flyout_container.scss index 8f8083068acdc..2d26d07d8a682 100644 --- a/x-pack/plugins/lens/public/shared_components/flyout_container.scss +++ b/x-pack/plugins/lens/public/shared_components/flyout_container.scss @@ -30,8 +30,8 @@ } .lnsDimensionContainer__content { - @include euiYScroll; flex: 1; + @include euiYScroll; } .lnsDimensionContainer__footer { diff --git a/x-pack/plugins/lens/public/shared_components/setting_with_sibling_flyout.scss b/x-pack/plugins/lens/public/shared_components/setting_with_sibling_flyout.scss index b6975710753e0..27dc29ed8af0c 100644 --- a/x-pack/plugins/lens/public/shared_components/setting_with_sibling_flyout.scss +++ b/x-pack/plugins/lens/public/shared_components/setting_with_sibling_flyout.scss @@ -19,8 +19,8 @@ } .lnsSettingWithSiblingFlyout__content { - @include euiYScroll; flex: 1; + @include euiYScroll; } .lnsSettingWithSiblingFlyout__footer { diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.scss b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.scss index 6c83b43a60508..ae9a21f3f63f7 100644 --- a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.scss +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.scss @@ -1,12 +1,12 @@ // styles needed to display extra drop targets that are outside of the config panel main area while also allowing to scroll vertically .lnsConfigPanel__overlay { clip-path: polygon(-100% 0, 100% 0, 100% 100%, -100% 100%); - @include euiBreakpoint('xs', 's', 'm') { - clip-path: none; - } max-inline-size: $euiSizeXXL * 20; min-inline-size: $euiSizeXXL * 8; background: $euiColorLightestShade; + @include euiBreakpoint('xs', 's', 'm') { + clip-path: none; + } .kbnOverlayMountWrapper { padding-left: $euiFormMaxWidth; margin-left: -$euiFormMaxWidth; diff --git a/x-pack/plugins/lens/public/visualization_container.scss b/x-pack/plugins/lens/public/visualization_container.scss index 028b8aa8a3a14..3eb4061f8b931 100644 --- a/x-pack/plugins/lens/public/visualization_container.scss +++ b/x-pack/plugins/lens/public/visualization_container.scss @@ -1,11 +1,10 @@ .lnsVisualizationContainer { - @include euiScrollBar; overflow: auto hidden; user-select: text; + @include euiScrollBar; } .lnsExpressionRenderer { - @include euiScrollBar; position: relative; width: 100%; height: 100%; @@ -13,7 +12,7 @@ overflow: auto; // important for visualizations with no padding border-radius: $euiBorderRadius; - + @include euiScrollBar; .lnsExpressionRenderer__component { position: static; // Let the progress indicator position itself against the outer parent } From 00789609ad663efffd7b3997ca773fe3ea5511e2 Mon Sep 17 00:00:00 2001 From: Jan Monschke Date: Mon, 30 Sep 2024 20:55:23 +0200 Subject: [PATCH 45/60] [Threat Hunting Investigations] Migrate all timeline routes to OpenAPI types (#190238) ## Summary fixes: https://github.com/elastic/security-team/issues/10235 fixes: https://github.com/elastic/security-team/issues/10237 This is the final PR for migrating over all timeline-related schemas and types to the new generated zod schemas from our OpenAPI specs. (see https://github.com/elastic/security-team/issues/10110) On top of moving to the new schemas/types, this PR also cleans up usage of now outdated types. I'm aware of the size of this PR but rest assured, the changes are easy to review and for most teams, only a handful of files need to be reviewed: ```markdown ### elastic/security-defend-workflows * x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_solution_integrations.ts ### elastic/security-detection-rule-management * x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/get_prebuilt_rules_and_timelines_status/get_prebuilt_rules_and_timelines_status_route.ts * x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/perform_timelines_installation.ts ### elastic/security-detections-response * x-pack/test/security_solution_cypress/cypress/objects/timeline.ts ### elastic/security-engineering-productivity * x-pack/test/security_solution_cypress/cypress/objects/timeline.ts * x-pack/test/security_solution_cypress/cypress/tasks/api_calls/timelines.ts ``` ### 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: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine --- .github/CODEOWNERS | 1 + .../output/kibana.serverless.staging.yaml | 425 +++++++------ oas_docs/output/kibana.staging.yaml | 425 +++++++------ .../common/api/quickstart_client.gen.ts | 24 + .../clean_draft_timelines_route.gen.ts | 10 +- .../clean_draft_timelines_route.schema.yaml | 21 +- .../copy_timeline/copy_timeline_route.gen.ts | 29 + .../copy_timeline_route.schema.yaml | 34 + .../copy_timeline/copy_timeline_route.ts | 15 - .../create_timelines_route.gen.ts | 14 +- .../create_timelines_route.schema.yaml | 27 +- .../create_timelines_route.ts | 36 -- .../delete_note/delete_note_route.schema.yaml | 7 - .../delete_timelines_route.schema.yaml | 7 - .../export_timelines_route.schema.yaml | 7 - .../get_draft_timelines_route.gen.ts | 10 +- .../get_draft_timelines_route.schema.yaml | 21 +- .../get_draft_timelines_route.ts | 14 - .../get_notes/get_notes_route.schema.yaml | 7 - .../get_timeline/get_timeline_route.gen.ts | 11 +- .../get_timeline_route.schema.yaml | 27 +- .../get_timeline/get_timeline_route.ts | 15 - .../get_timelines/get_timelines_route.gen.ts | 16 +- .../get_timelines_route.schema.yaml | 57 +- .../get_timelines/get_timelines_route.ts | 28 - .../import_timelines_route.gen.ts | 17 +- .../import_timelines_route.schema.yaml | 39 +- .../import_timelines_route.ts | 60 -- .../common/api/timeline/index.ts | 10 - .../install_prepackaged_timelines.ts | 19 - ...install_prepackaged_timelines_route.gen.ts | 12 +- ...ll_prepackaged_timelines_route.schema.yaml | 16 +- .../common/api/timeline/model/api.ts | 593 ++---------------- .../api/timeline/model/components.gen.ts | 172 +++-- .../api/timeline/model/components.schema.yaml | 220 +++++-- .../patch_timeline_route.gen.ts | 10 +- .../patch_timeline_route.schema.yaml | 21 +- .../patch_timelines/patch_timelines_schema.ts | 24 - .../persist_favorite_route.schema.yaml | 7 - .../persist_note_route.schema.yaml | 7 - .../pinned_events_route.schema.yaml | 7 - .../pinned_events/pinned_events_route.ts | 34 - .../resolve_timeline_route.gen.ts | 11 +- .../resolve_timeline_route.schema.yaml | 24 +- .../common/api/timeline/routes.ts | 50 +- .../common/search_strategy/timeline/index.ts | 124 +--- .../common/timelines/zod_errors.ts | 29 + ...imeline_api_2023_10_31.bundled.schema.yaml | 404 ++++++------ ...imeline_api_2023_10_31.bundled.schema.yaml | 404 ++++++------ .../public/common/mock/timeline_results.ts | 9 +- .../components/alerts_table/actions.tsx | 14 +- .../components/open_timeline/helpers.test.ts | 22 +- .../components/open_timeline/helpers.ts | 24 +- .../components/open_timeline/types.ts | 8 +- .../public/timelines/containers/all/index.tsx | 22 +- .../public/timelines/containers/api.ts | 157 ++--- .../public/timelines/containers/helpers.ts | 4 +- .../middlewares/timeline_pinned_event.test.ts | 1 + .../middlewares/timeline_pinned_event.ts | 2 +- .../store/middlewares/timeline_save.test.ts | 4 +- .../store/middlewares/timeline_save.ts | 23 +- ...ebuilt_rules_and_timelines_status_route.ts | 9 +- .../logic/perform_timelines_installation.ts | 10 +- .../timeline/__mocks__/request_responses.ts | 13 +- .../timeline/__mocks__/resolve_timeline.ts | 4 +- .../clean_draft_timelines/index.ts | 7 +- .../get_draft_timelines/index.ts | 15 +- .../server/lib/timeline/routes/index.ts | 28 +- .../lib/timeline/routes/notes/delete_note.ts | 10 +- .../lib/timeline/routes/notes/get_notes.ts | 10 +- .../lib/timeline/routes/notes/persist_note.ts | 7 +- .../pinned_events/persist_pinned_event.ts | 22 +- .../helpers.test.ts | 6 +- .../install_prepackaged_timelines/helpers.ts | 6 +- .../install_prepackaged_timelines/index.ts | 32 +- .../routes/timelines/copy_timeline/index.ts | 16 +- .../timelines/create_timelines/helpers.ts | 7 +- .../timelines/create_timelines/index.ts | 14 +- .../timelines/delete_timelines/index.ts | 6 +- .../timelines/export_timelines/helpers.ts | 6 +- .../timelines/get_timeline/index.test.ts | 8 +- .../routes/timelines/get_timeline/index.ts | 23 +- .../timelines/get_timelines/index.test.ts | 8 +- .../routes/timelines/get_timelines/index.ts | 45 +- .../create_timelines_stream_from_ndjson.ts | 24 +- .../timelines/import_timelines/helpers.ts | 20 +- .../timelines/import_timelines/index.test.ts | 47 +- .../timelines/import_timelines/index.ts | 32 +- .../routes/timelines/patch_timelines/index.ts | 16 +- .../timelines/persist_favorite/index.ts | 11 +- .../timelines/resolve_timeline/index.ts | 24 +- .../saved_object/notes/persist_notes.ts | 2 +- .../convert_saved_object_to_savedtimeline.ts | 4 +- .../saved_object/timelines/index.test.ts | 8 +- .../timeline/saved_object/timelines/index.ts | 87 +-- .../timelines/pick_saved_timeline.ts | 6 +- .../timeline/utils/check_timelines_status.ts | 24 +- .../server/lib/timeline/utils/common.ts | 9 +- .../lib/timeline/utils/failure_cases.test.ts | 40 +- .../lib/timeline/utils/failure_cases.ts | 38 +- .../lib/timeline/utils/timeline_object.ts | 4 +- .../services/security_solution_api.gen.ts | 16 + .../trial_license_complete_tier/timeline.ts | 6 +- .../cypress/objects/timeline.ts | 8 +- .../cypress/tasks/api_calls/timelines.ts | 13 +- .../endpoint_solution_integrations.ts | 4 +- .../services/timeline/index.ts | 28 +- 107 files changed, 2014 insertions(+), 2661 deletions(-) create mode 100644 x-pack/plugins/security_solution/common/api/timeline/copy_timeline/copy_timeline_route.gen.ts create mode 100644 x-pack/plugins/security_solution/common/api/timeline/copy_timeline/copy_timeline_route.schema.yaml delete mode 100644 x-pack/plugins/security_solution/common/api/timeline/copy_timeline/copy_timeline_route.ts delete mode 100644 x-pack/plugins/security_solution/common/api/timeline/create_timelines/create_timelines_route.ts delete mode 100644 x-pack/plugins/security_solution/common/api/timeline/get_draft_timelines/get_draft_timelines_route.ts delete mode 100644 x-pack/plugins/security_solution/common/api/timeline/get_timeline/get_timeline_route.ts delete mode 100644 x-pack/plugins/security_solution/common/api/timeline/get_timelines/get_timelines_route.ts delete mode 100644 x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.ts delete mode 100644 x-pack/plugins/security_solution/common/api/timeline/install_prepackaged_timelines/install_prepackaged_timelines.ts delete mode 100644 x-pack/plugins/security_solution/common/api/timeline/patch_timelines/patch_timelines_schema.ts delete mode 100644 x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.ts create mode 100644 x-pack/plugins/security_solution/common/timelines/zod_errors.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0988c59ab7d23..7811e4409d905 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1532,6 +1532,7 @@ x-pack/test/security_solution_api_integration/test_suites/sources @elastic/secur x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout @elastic/security-threat-hunting-investigations x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/common/timelines @elastic/security-threat-hunting-investigations /x-pack/plugins/security_solution/public/common/components/alerts_viewer @elastic/security-threat-hunting-investigations /x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_action @elastic/security-threat-hunting-investigations /x-pack/plugins/security_solution/public/common/components/event_details @elastic/security-threat-hunting-investigations diff --git a/oas_docs/output/kibana.serverless.staging.yaml b/oas_docs/output/kibana.serverless.staging.yaml index f4ed7a9767924..621efdc026eea 100644 --- a/oas_docs/output/kibana.serverless.staging.yaml +++ b/oas_docs/output/kibana.serverless.staging.yaml @@ -16356,19 +16356,21 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - type: object + oneOf: + - type: object properties: - getOneTimeline: - $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - nullable: true + data: + type: object + properties: + getOneTimeline: + $ref: >- + #/components/schemas/Security_Timeline_API_TimelineResponse + required: + - getOneTimeline required: - - getOneTimeline - required: - - data + - data + - additionalProperties: false + type: object description: Indicates that the (template) Timeline was found and returned. summary: Get Timeline or Timeline template details tags: @@ -16405,23 +16407,8 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - required: - - timeline - required: - - persistTimeline - required: - - data + $ref: >- + #/components/schemas/Security_Timeline_API_PersistTimelineResponse description: >- Indicates that the draft Timeline was successfully created. In the event the user already has a draft Timeline, the existing draft @@ -16483,21 +16470,8 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - required: - - persistTimeline - required: - - data + $ref: >- + #/components/schemas/Security_Timeline_API_PersistTimelineResponse description: Indicates the Timeline was successfully created. '405': content: @@ -16514,6 +16488,37 @@ paths: tags: - Security Timeline API - access:securitySolution + /api/timeline/_copy: + get: + description: | + Copies and returns a timeline or timeline template. + operationId: CopyTimeline + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + type: object + properties: + timeline: + $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' + timelineIdToCopy: + type: string + required: + - timeline + - timelineIdToCopy + required: true + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: >- + #/components/schemas/Security_Timeline_API_PersistTimelineResponse + description: Indicates that the timeline has been successfully copied. + summary: Copies timeline or timeline template + tags: + - Security Timeline API + - access:securitySolution /api/timeline/_draft: get: description: >- @@ -16532,23 +16537,8 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - required: - - timeline - required: - - persistTimeline - required: - - data + $ref: >- + #/components/schemas/Security_Timeline_API_PersistTimelineResponse description: Indicates that the draft Timeline was successfully retrieved. '403': content: @@ -16610,23 +16600,8 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - required: - - timeline - required: - - persistTimeline - required: - - data + $ref: >- + #/components/schemas/Security_Timeline_API_PersistTimelineResponse description: >- Indicates that the draft Timeline was successfully created. In the event the user already has a draft Timeline, the existing draft @@ -16782,28 +16757,14 @@ paths: schema: type: object properties: - file: - allOf: - - $ref: '#/components/schemas/Security_Timeline_API_Readable' - - type: object - properties: - hapi: - type: object - properties: - filename: - type: string - headers: - type: object - isImmutable: - enum: - - 'true' - - 'false' - type: string - required: - - filename - - headers - required: - - hapi + file: {} + isImmutable: + enum: + - 'true' + - 'false' + type: string + required: + - file description: The Timelines to import as a readable stream. required: true responses: @@ -16811,13 +16772,8 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - $ref: >- - #/components/schemas/Security_Timeline_API_ImportTimelineResult - required: - - data + $ref: >- + #/components/schemas/Security_Timeline_API_ImportTimelineResult description: Indicates the import of Timelines was successful. '400': content: @@ -16876,7 +16832,9 @@ paths: properties: prepackagedTimelines: items: - $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' + $ref: >- + #/components/schemas/Security_Timeline_API_TimelineSavedToReturnObject + nullable: true type: array timelinesToInstall: items: @@ -16899,13 +16857,8 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - $ref: >- - #/components/schemas/Security_Timeline_API_ImportTimelineResult - required: - - data + $ref: >- + #/components/schemas/Security_Timeline_API_ImportTimelineResult description: Indicates the installation of prepackaged Timelines was successful. '500': content: @@ -16943,19 +16896,16 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - type: object + oneOf: + - type: object properties: - getOneTimeline: + data: $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - nullable: true + #/components/schemas/Security_Timeline_API_ResolvedTimeline required: - - getOneTimeline - required: - - data + - data + - additionalProperties: false + type: object description: The (template) Timeline has been found '400': description: The request is missing parameters @@ -17024,36 +16974,26 @@ paths: schema: type: object properties: - data: - type: object - properties: - customTemplateTimelineCount: - type: number - defaultTimelineCount: - type: number - elasticTemplateTimelineCount: - type: number - favoriteCount: - type: number - templateTimelineCount: - type: number - timelines: - items: - $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - type: array - totalCount: - type: number - required: - - timelines - - totalCount - - defaultTimelineCount - - templateTimelineCount - - favoriteCount - - elasticTemplateTimelineCount - - customTemplateTimelineCount + customTemplateTimelineCount: + type: number + defaultTimelineCount: + type: number + elasticTemplateTimelineCount: + type: number + favoriteCount: + type: number + templateTimelineCount: + type: number + timeline: + items: + $ref: >- + #/components/schemas/Security_Timeline_API_TimelineResponse + type: array + totalCount: + type: number required: - - data + - timeline + - totalCount description: Indicates that the (template) Timelines were found and returned. '400': content: @@ -31335,30 +31275,39 @@ components: type: object properties: aggregatable: + nullable: true type: boolean category: + nullable: true type: string columnHeaderType: + nullable: true type: string description: + nullable: true type: string example: - oneOf: - - type: string - - type: number + nullable: true + type: string id: + nullable: true type: string indexes: items: type: string + nullable: true type: array name: + nullable: true type: string placeholder: + nullable: true type: string searchable: + nullable: true type: boolean type: + nullable: true type: string Security_Timeline_API_DataProviderQueryMatch: type: object @@ -31380,6 +31329,10 @@ components: type: string queryMatch: $ref: '#/components/schemas/Security_Timeline_API_QueryMatchResult' + nullable: true + type: + $ref: '#/components/schemas/Security_Timeline_API_DataProviderType' + nullable: true Security_Timeline_API_DataProviderResult: type: object properties: @@ -31467,41 +31420,59 @@ components: type: object properties: exists: - type: boolean + nullable: true + type: string match_all: + nullable: true type: string meta: + nullable: true type: object properties: alias: + nullable: true type: string controlledBy: + nullable: true type: string disabled: + nullable: true type: boolean field: + nullable: true type: string formattedValue: + nullable: true type: string index: + nullable: true type: string key: + nullable: true type: string negate: + nullable: true type: boolean params: + nullable: true type: string type: + nullable: true type: string value: + nullable: true type: string missing: + nullable: true type: string query: + nullable: true type: string range: + nullable: true type: string script: + nullable: true type: string Security_Timeline_API_GetNotesResult: type: object @@ -31566,6 +31537,12 @@ components: version: nullable: true type: string + required: + - savedObjectId + - version + - pinnedEventIds + - eventNotes + - globalNotes Security_Timeline_API_Note: allOf: - $ref: '#/components/schemas/Security_Timeline_API_BareNote' @@ -31586,6 +31563,23 @@ components: #/components/schemas/Security_Timeline_API_PinnedEventBaseResponseBody - nullable: true type: object + Security_Timeline_API_PersistTimelineResponse: + type: object + properties: + data: + type: object + properties: + persistTimeline: + type: object + properties: + timeline: + $ref: '#/components/schemas/Security_Timeline_API_TimelineResponse' + required: + - timeline + required: + - persistTimeline + required: + - data Security_Timeline_API_PinnedEvent: allOf: - $ref: '#/components/schemas/Security_Timeline_API_BarePinnedEvent' @@ -31623,34 +31617,29 @@ components: nullable: true type: string value: - nullable: true - type: string - Security_Timeline_API_Readable: + oneOf: + - nullable: true + type: string + - items: + type: string + nullable: true + type: array + Security_Timeline_API_ResolvedTimeline: type: object properties: - _data: - additionalProperties: true - type: object - _encoding: + alias_purpose: + $ref: >- + #/components/schemas/Security_Timeline_API_SavedObjectResolveAliasPurpose + alias_target_id: type: string - _events: - additionalProperties: true - type: object - _eventsCount: - type: number - _maxListeners: - additionalProperties: true - type: object - _position: - type: number - _read: - additionalProperties: true - type: object - _readableState: - additionalProperties: true - type: object - readable: - type: boolean + outcome: + $ref: '#/components/schemas/Security_Timeline_API_SavedObjectResolveOutcome' + timeline: + $ref: >- + #/components/schemas/Security_Timeline_API_TimelineSavedToReturnObject + required: + - timeline + - outcome Security_Timeline_API_ResponseNote: type: object properties: @@ -31685,6 +31674,17 @@ components: - threat_match - zeek type: string + Security_Timeline_API_SavedObjectResolveAliasPurpose: + enum: + - savedObjectConversion + - savedObjectImport + type: string + Security_Timeline_API_SavedObjectResolveOutcome: + enum: + - exactMatch + - aliasMatch + - conflict + type: string Security_Timeline_API_SavedTimeline: type: object properties: @@ -31713,12 +31713,16 @@ components: properties: end: oneOf: - - type: string - - type: number + - nullable: true + type: string + - nullable: true + type: number start: oneOf: - - type: string - - type: number + - nullable: true + type: string + - nullable: true + type: number description: nullable: true type: string @@ -31808,6 +31812,18 @@ components: updatedBy: nullable: true type: string + Security_Timeline_API_SavedTimelineWithSavedObjectId: + allOf: + - $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' + - type: object + properties: + savedObjectId: + type: string + version: + type: string + required: + - savedObjectId + - version Security_Timeline_API_SerializedFilterQueryResult: type: object properties: @@ -31857,27 +31873,64 @@ components: Security_Timeline_API_TimelineResponse: allOf: - $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' + - $ref: >- + #/components/schemas/Security_Timeline_API_SavedTimelineWithSavedObjectId - type: object properties: eventIdToNoteIds: items: $ref: '#/components/schemas/Security_Timeline_API_Note' + nullable: true type: array noteIds: items: type: string + nullable: true type: array notes: items: $ref: '#/components/schemas/Security_Timeline_API_Note' + nullable: true type: array pinnedEventIds: items: type: string + nullable: true type: array pinnedEventsSaveObject: items: $ref: '#/components/schemas/Security_Timeline_API_PinnedEvent' + nullable: true + type: array + Security_Timeline_API_TimelineSavedToReturnObject: + allOf: + - $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' + - type: object + properties: + eventIdToNoteIds: + items: + $ref: '#/components/schemas/Security_Timeline_API_Note' + nullable: true + type: array + noteIds: + items: + type: string + nullable: true + type: array + notes: + items: + $ref: '#/components/schemas/Security_Timeline_API_Note' + nullable: true + type: array + pinnedEventIds: + items: + type: string + nullable: true + type: array + pinnedEventsSaveObject: + items: + $ref: '#/components/schemas/Security_Timeline_API_PinnedEvent' + nullable: true type: array savedObjectId: type: string diff --git a/oas_docs/output/kibana.staging.yaml b/oas_docs/output/kibana.staging.yaml index 618bd42ab1f72..79960c7287336 100644 --- a/oas_docs/output/kibana.staging.yaml +++ b/oas_docs/output/kibana.staging.yaml @@ -20445,19 +20445,21 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - type: object + oneOf: + - type: object properties: - getOneTimeline: - $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - nullable: true + data: + type: object + properties: + getOneTimeline: + $ref: >- + #/components/schemas/Security_Timeline_API_TimelineResponse + required: + - getOneTimeline required: - - getOneTimeline - required: - - data + - data + - additionalProperties: false + type: object description: Indicates that the (template) Timeline was found and returned. summary: Get Timeline or Timeline template details tags: @@ -20494,23 +20496,8 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - required: - - timeline - required: - - persistTimeline - required: - - data + $ref: >- + #/components/schemas/Security_Timeline_API_PersistTimelineResponse description: >- Indicates that the draft Timeline was successfully created. In the event the user already has a draft Timeline, the existing draft @@ -20572,21 +20559,8 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - required: - - persistTimeline - required: - - data + $ref: >- + #/components/schemas/Security_Timeline_API_PersistTimelineResponse description: Indicates the Timeline was successfully created. '405': content: @@ -20603,6 +20577,37 @@ paths: tags: - Security Timeline API - access:securitySolution + /api/timeline/_copy: + get: + description: | + Copies and returns a timeline or timeline template. + operationId: CopyTimeline + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + type: object + properties: + timeline: + $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' + timelineIdToCopy: + type: string + required: + - timeline + - timelineIdToCopy + required: true + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: >- + #/components/schemas/Security_Timeline_API_PersistTimelineResponse + description: Indicates that the timeline has been successfully copied. + summary: Copies timeline or timeline template + tags: + - Security Timeline API + - access:securitySolution /api/timeline/_draft: get: description: >- @@ -20621,23 +20626,8 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - required: - - timeline - required: - - persistTimeline - required: - - data + $ref: >- + #/components/schemas/Security_Timeline_API_PersistTimelineResponse description: Indicates that the draft Timeline was successfully retrieved. '403': content: @@ -20699,23 +20689,8 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - required: - - timeline - required: - - persistTimeline - required: - - data + $ref: >- + #/components/schemas/Security_Timeline_API_PersistTimelineResponse description: >- Indicates that the draft Timeline was successfully created. In the event the user already has a draft Timeline, the existing draft @@ -20871,28 +20846,14 @@ paths: schema: type: object properties: - file: - allOf: - - $ref: '#/components/schemas/Security_Timeline_API_Readable' - - type: object - properties: - hapi: - type: object - properties: - filename: - type: string - headers: - type: object - isImmutable: - enum: - - 'true' - - 'false' - type: string - required: - - filename - - headers - required: - - hapi + file: {} + isImmutable: + enum: + - 'true' + - 'false' + type: string + required: + - file description: The Timelines to import as a readable stream. required: true responses: @@ -20900,13 +20861,8 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - $ref: >- - #/components/schemas/Security_Timeline_API_ImportTimelineResult - required: - - data + $ref: >- + #/components/schemas/Security_Timeline_API_ImportTimelineResult description: Indicates the import of Timelines was successful. '400': content: @@ -20965,7 +20921,9 @@ paths: properties: prepackagedTimelines: items: - $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' + $ref: >- + #/components/schemas/Security_Timeline_API_TimelineSavedToReturnObject + nullable: true type: array timelinesToInstall: items: @@ -20988,13 +20946,8 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - $ref: >- - #/components/schemas/Security_Timeline_API_ImportTimelineResult - required: - - data + $ref: >- + #/components/schemas/Security_Timeline_API_ImportTimelineResult description: Indicates the installation of prepackaged Timelines was successful. '500': content: @@ -21032,19 +20985,16 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - type: object + oneOf: + - type: object properties: - getOneTimeline: + data: $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - nullable: true + #/components/schemas/Security_Timeline_API_ResolvedTimeline required: - - getOneTimeline - required: - - data + - data + - additionalProperties: false + type: object description: The (template) Timeline has been found '400': description: The request is missing parameters @@ -21113,36 +21063,26 @@ paths: schema: type: object properties: - data: - type: object - properties: - customTemplateTimelineCount: - type: number - defaultTimelineCount: - type: number - elasticTemplateTimelineCount: - type: number - favoriteCount: - type: number - templateTimelineCount: - type: number - timelines: - items: - $ref: >- - #/components/schemas/Security_Timeline_API_TimelineResponse - type: array - totalCount: - type: number - required: - - timelines - - totalCount - - defaultTimelineCount - - templateTimelineCount - - favoriteCount - - elasticTemplateTimelineCount - - customTemplateTimelineCount + customTemplateTimelineCount: + type: number + defaultTimelineCount: + type: number + elasticTemplateTimelineCount: + type: number + favoriteCount: + type: number + templateTimelineCount: + type: number + timeline: + items: + $ref: >- + #/components/schemas/Security_Timeline_API_TimelineResponse + type: array + totalCount: + type: number required: - - data + - timeline + - totalCount description: Indicates that the (template) Timelines were found and returned. '400': content: @@ -39344,30 +39284,39 @@ components: type: object properties: aggregatable: + nullable: true type: boolean category: + nullable: true type: string columnHeaderType: + nullable: true type: string description: + nullable: true type: string example: - oneOf: - - type: string - - type: number + nullable: true + type: string id: + nullable: true type: string indexes: items: type: string + nullable: true type: array name: + nullable: true type: string placeholder: + nullable: true type: string searchable: + nullable: true type: boolean type: + nullable: true type: string Security_Timeline_API_DataProviderQueryMatch: type: object @@ -39389,6 +39338,10 @@ components: type: string queryMatch: $ref: '#/components/schemas/Security_Timeline_API_QueryMatchResult' + nullable: true + type: + $ref: '#/components/schemas/Security_Timeline_API_DataProviderType' + nullable: true Security_Timeline_API_DataProviderResult: type: object properties: @@ -39476,41 +39429,59 @@ components: type: object properties: exists: - type: boolean + nullable: true + type: string match_all: + nullable: true type: string meta: + nullable: true type: object properties: alias: + nullable: true type: string controlledBy: + nullable: true type: string disabled: + nullable: true type: boolean field: + nullable: true type: string formattedValue: + nullable: true type: string index: + nullable: true type: string key: + nullable: true type: string negate: + nullable: true type: boolean params: + nullable: true type: string type: + nullable: true type: string value: + nullable: true type: string missing: + nullable: true type: string query: + nullable: true type: string range: + nullable: true type: string script: + nullable: true type: string Security_Timeline_API_GetNotesResult: type: object @@ -39575,6 +39546,12 @@ components: version: nullable: true type: string + required: + - savedObjectId + - version + - pinnedEventIds + - eventNotes + - globalNotes Security_Timeline_API_Note: allOf: - $ref: '#/components/schemas/Security_Timeline_API_BareNote' @@ -39595,6 +39572,23 @@ components: #/components/schemas/Security_Timeline_API_PinnedEventBaseResponseBody - nullable: true type: object + Security_Timeline_API_PersistTimelineResponse: + type: object + properties: + data: + type: object + properties: + persistTimeline: + type: object + properties: + timeline: + $ref: '#/components/schemas/Security_Timeline_API_TimelineResponse' + required: + - timeline + required: + - persistTimeline + required: + - data Security_Timeline_API_PinnedEvent: allOf: - $ref: '#/components/schemas/Security_Timeline_API_BarePinnedEvent' @@ -39632,34 +39626,29 @@ components: nullable: true type: string value: - nullable: true - type: string - Security_Timeline_API_Readable: + oneOf: + - nullable: true + type: string + - items: + type: string + nullable: true + type: array + Security_Timeline_API_ResolvedTimeline: type: object properties: - _data: - additionalProperties: true - type: object - _encoding: + alias_purpose: + $ref: >- + #/components/schemas/Security_Timeline_API_SavedObjectResolveAliasPurpose + alias_target_id: type: string - _events: - additionalProperties: true - type: object - _eventsCount: - type: number - _maxListeners: - additionalProperties: true - type: object - _position: - type: number - _read: - additionalProperties: true - type: object - _readableState: - additionalProperties: true - type: object - readable: - type: boolean + outcome: + $ref: '#/components/schemas/Security_Timeline_API_SavedObjectResolveOutcome' + timeline: + $ref: >- + #/components/schemas/Security_Timeline_API_TimelineSavedToReturnObject + required: + - timeline + - outcome Security_Timeline_API_ResponseNote: type: object properties: @@ -39694,6 +39683,17 @@ components: - threat_match - zeek type: string + Security_Timeline_API_SavedObjectResolveAliasPurpose: + enum: + - savedObjectConversion + - savedObjectImport + type: string + Security_Timeline_API_SavedObjectResolveOutcome: + enum: + - exactMatch + - aliasMatch + - conflict + type: string Security_Timeline_API_SavedTimeline: type: object properties: @@ -39722,12 +39722,16 @@ components: properties: end: oneOf: - - type: string - - type: number + - nullable: true + type: string + - nullable: true + type: number start: oneOf: - - type: string - - type: number + - nullable: true + type: string + - nullable: true + type: number description: nullable: true type: string @@ -39817,6 +39821,18 @@ components: updatedBy: nullable: true type: string + Security_Timeline_API_SavedTimelineWithSavedObjectId: + allOf: + - $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' + - type: object + properties: + savedObjectId: + type: string + version: + type: string + required: + - savedObjectId + - version Security_Timeline_API_SerializedFilterQueryResult: type: object properties: @@ -39866,27 +39882,64 @@ components: Security_Timeline_API_TimelineResponse: allOf: - $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' + - $ref: >- + #/components/schemas/Security_Timeline_API_SavedTimelineWithSavedObjectId - type: object properties: eventIdToNoteIds: items: $ref: '#/components/schemas/Security_Timeline_API_Note' + nullable: true type: array noteIds: items: type: string + nullable: true type: array notes: items: $ref: '#/components/schemas/Security_Timeline_API_Note' + nullable: true type: array pinnedEventIds: items: type: string + nullable: true type: array pinnedEventsSaveObject: items: $ref: '#/components/schemas/Security_Timeline_API_PinnedEvent' + nullable: true + type: array + Security_Timeline_API_TimelineSavedToReturnObject: + allOf: + - $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' + - type: object + properties: + eventIdToNoteIds: + items: + $ref: '#/components/schemas/Security_Timeline_API_Note' + nullable: true + type: array + noteIds: + items: + type: string + nullable: true + type: array + notes: + items: + $ref: '#/components/schemas/Security_Timeline_API_Note' + nullable: true + type: array + pinnedEventIds: + items: + type: string + nullable: true + type: array + pinnedEventsSaveObject: + items: + $ref: '#/components/schemas/Security_Timeline_API_PinnedEvent' + nullable: true type: array savedObjectId: type: string diff --git a/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts b/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts index 9b057bb19d7e2..255b56c485b9b 100644 --- a/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts +++ b/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts @@ -296,6 +296,10 @@ import type { CleanDraftTimelinesRequestBodyInput, CleanDraftTimelinesResponse, } from './timeline/clean_draft_timelines/clean_draft_timelines_route.gen'; +import type { + CopyTimelineRequestBodyInput, + CopyTimelineResponse, +} from './timeline/copy_timeline/copy_timeline_route.gen'; import type { CreateTimelinesRequestBodyInput, CreateTimelinesResponse, @@ -556,6 +560,23 @@ If asset criticality records already exist for the specified entities, those rec }) .catch(catchAxiosErrorFormatAndThrow); } + /** + * Copies and returns a timeline or timeline template. + + */ + async copyTimeline(props: CopyTimelineProps) { + this.log.info(`${new Date().toISOString()} Calling API CopyTimeline`); + return this.kbnClient + .request({ + path: '/api/timeline/_copy', + headers: { + [ELASTIC_HTTP_VERSION_HEADER]: '2023-10-31', + }, + method: 'GET', + body: props.body, + }) + .catch(catchAxiosErrorFormatAndThrow); + } async createAlertsIndex() { this.log.info(`${new Date().toISOString()} Calling API CreateAlertsIndex`); return this.kbnClient @@ -1993,6 +2014,9 @@ export interface BulkUpsertAssetCriticalityRecordsProps { export interface CleanDraftTimelinesProps { body: CleanDraftTimelinesRequestBodyInput; } +export interface CopyTimelineProps { + body: CopyTimelineRequestBodyInput; +} export interface CreateAlertsMigrationProps { body: CreateAlertsMigrationRequestBodyInput; } diff --git a/x-pack/plugins/security_solution/common/api/timeline/clean_draft_timelines/clean_draft_timelines_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/clean_draft_timelines/clean_draft_timelines_route.gen.ts index 514a06ceec328..f3858b1cb8f34 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/clean_draft_timelines/clean_draft_timelines_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/clean_draft_timelines/clean_draft_timelines_route.gen.ts @@ -16,7 +16,7 @@ import { z } from '@kbn/zod'; -import { TimelineType, TimelineResponse } from '../model/components.gen'; +import { TimelineType, PersistTimelineResponse } from '../model/components.gen'; export type CleanDraftTimelinesRequestBody = z.infer; export const CleanDraftTimelinesRequestBody = z.object({ @@ -25,10 +25,4 @@ export const CleanDraftTimelinesRequestBody = z.object({ export type CleanDraftTimelinesRequestBodyInput = z.input; export type CleanDraftTimelinesResponse = z.infer; -export const CleanDraftTimelinesResponse = z.object({ - data: z.object({ - persistTimeline: z.object({ - timeline: TimelineResponse, - }), - }), -}); +export const CleanDraftTimelinesResponse = PersistTimelineResponse; diff --git a/x-pack/plugins/security_solution/common/api/timeline/clean_draft_timelines/clean_draft_timelines_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/clean_draft_timelines/clean_draft_timelines_route.schema.yaml index 5e1fbff1f296d..7ff1e397c1d18 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/clean_draft_timelines/clean_draft_timelines_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/clean_draft_timelines/clean_draft_timelines_route.schema.yaml @@ -2,13 +2,6 @@ openapi: 3.0.0 info: title: Elastic Security - Timeline - Draft Timeline API version: '2023-10-31' -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/timeline/_draft: post: @@ -39,19 +32,7 @@ paths: content: application/json: schema: - type: object - required: [data] - properties: - data: - type: object - required: [persistTimeline] - properties: - persistTimeline: - type: object - required: [timeline] - properties: - timeline: - $ref: '../model/components.schema.yaml#/components/schemas/TimelineResponse' + $ref: '../model/components.schema.yaml#/components/schemas/PersistTimelineResponse' '403': description: Indicates that the user does not have the required permissions to create a draft Timeline. content: diff --git a/x-pack/plugins/security_solution/common/api/timeline/copy_timeline/copy_timeline_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/copy_timeline/copy_timeline_route.gen.ts new file mode 100644 index 0000000000000..6e75f0baaf7ef --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/timeline/copy_timeline/copy_timeline_route.gen.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. + */ + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Elastic Security - Timeline - Copy Timeline API + * version: 2023-10-31 + */ + +import { z } from '@kbn/zod'; + +import { SavedTimeline, PersistTimelineResponse } from '../model/components.gen'; + +export type CopyTimelineRequestBody = z.infer; +export const CopyTimelineRequestBody = z.object({ + timeline: SavedTimeline, + timelineIdToCopy: z.string(), +}); +export type CopyTimelineRequestBodyInput = z.input; + +export type CopyTimelineResponse = z.infer; +export const CopyTimelineResponse = PersistTimelineResponse; diff --git a/x-pack/plugins/security_solution/common/api/timeline/copy_timeline/copy_timeline_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/copy_timeline/copy_timeline_route.schema.yaml new file mode 100644 index 0000000000000..743de4c334fe5 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/timeline/copy_timeline/copy_timeline_route.schema.yaml @@ -0,0 +1,34 @@ +openapi: 3.0.0 +info: + title: Elastic Security - Timeline - Copy Timeline API + version: '2023-10-31' +paths: + /api/timeline/_copy: + get: + x-labels: [serverless, ess] + x-codegen-enabled: true + operationId: CopyTimeline + summary: Copies timeline or timeline template + description: | + Copies and returns a timeline or timeline template. + tags: + - access:securitySolution + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [timeline, timelineIdToCopy] + properties: + timeline: + $ref: '../model/components.schema.yaml#/components/schemas/SavedTimeline' + timelineIdToCopy: + type: string + responses: + '200': + description: Indicates that the timeline has been successfully copied. + content: + application/json: + schema: + $ref: '../model/components.schema.yaml#/components/schemas/PersistTimelineResponse' diff --git a/x-pack/plugins/security_solution/common/api/timeline/copy_timeline/copy_timeline_route.ts b/x-pack/plugins/security_solution/common/api/timeline/copy_timeline/copy_timeline_route.ts deleted file mode 100644 index 1b7dc1d4c3566..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/copy_timeline/copy_timeline_route.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as rt from 'io-ts'; - -import { SavedTimelineRuntimeType } from '../model/api'; - -export const copyTimelineSchema = rt.type({ - timeline: SavedTimelineRuntimeType, - timelineIdToCopy: rt.string, -}); diff --git a/x-pack/plugins/security_solution/common/api/timeline/create_timelines/create_timelines_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/create_timelines/create_timelines_route.gen.ts index 51af791fbc3f0..33fc1855f390a 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/create_timelines/create_timelines_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/create_timelines/create_timelines_route.gen.ts @@ -17,29 +17,23 @@ import { z } from '@kbn/zod'; import { + SavedTimeline, TimelineStatus, TimelineType, - SavedTimeline, - TimelineResponse, + PersistTimelineResponse, } from '../model/components.gen'; export type CreateTimelinesRequestBody = z.infer; export const CreateTimelinesRequestBody = z.object({ + timeline: SavedTimeline, status: TimelineStatus.nullable().optional(), timelineId: z.string().nullable().optional(), templateTimelineId: z.string().nullable().optional(), templateTimelineVersion: z.number().nullable().optional(), timelineType: TimelineType.nullable().optional(), version: z.string().nullable().optional(), - timeline: SavedTimeline, }); export type CreateTimelinesRequestBodyInput = z.input; export type CreateTimelinesResponse = z.infer; -export const CreateTimelinesResponse = z.object({ - data: z.object({ - persistTimeline: z.object({ - timeline: TimelineResponse.optional(), - }), - }), -}); +export const CreateTimelinesResponse = PersistTimelineResponse; diff --git a/x-pack/plugins/security_solution/common/api/timeline/create_timelines/create_timelines_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/create_timelines/create_timelines_route.schema.yaml index 9dce2658694ab..8f369fde6e9e9 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/create_timelines/create_timelines_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/create_timelines/create_timelines_route.schema.yaml @@ -5,13 +5,6 @@ info: externalDocs: url: https://www.elastic.co/guide/en/security/current/timeline-api-create.html description: Documentation -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/timeline: post: @@ -29,9 +22,10 @@ paths: application/json: schema: type: object - required: - - timeline + required: [timeline] properties: + timeline: + $ref: '../model/components.schema.yaml#/components/schemas/SavedTimeline' status: $ref: '../model/components.schema.yaml#/components/schemas/TimelineStatus' nullable: true @@ -50,26 +44,13 @@ paths: version: type: string nullable: true - timeline: - $ref: '../model/components.schema.yaml#/components/schemas/SavedTimeline' responses: '200': description: Indicates the Timeline was successfully created. content: application/json: schema: - type: object - required: [data] - properties: - data: - type: object - required: [persistTimeline] - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: '../model/components.schema.yaml#/components/schemas/TimelineResponse' + $ref: '../model/components.schema.yaml#/components/schemas/PersistTimelineResponse' '405': description: Indicates that there was an error in the Timeline creation. content: diff --git a/x-pack/plugins/security_solution/common/api/timeline/create_timelines/create_timelines_route.ts b/x-pack/plugins/security_solution/common/api/timeline/create_timelines/create_timelines_route.ts deleted file mode 100644 index 1911df3941a35..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/create_timelines/create_timelines_route.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as rt from 'io-ts'; - -import type { ResponseTimeline } from '../model/api'; -import { - SavedTimelineRuntimeType, - TimelineStatusLiteralRt, - TimelineTypeLiteralRt, -} from '../model/api'; -import { unionWithNullType } from '../../../utility_types'; - -export const createTimelineSchema = rt.intersection([ - rt.type({ - timeline: SavedTimelineRuntimeType, - }), - rt.partial({ - status: unionWithNullType(TimelineStatusLiteralRt), - timelineId: unionWithNullType(rt.string), - templateTimelineId: unionWithNullType(rt.string), - templateTimelineVersion: unionWithNullType(rt.number), - timelineType: unionWithNullType(TimelineTypeLiteralRt), - version: unionWithNullType(rt.string), - }), -]); - -export interface CreateTimelinesResponse { - data: { - persistTimeline: ResponseTimeline; - }; -} diff --git a/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.schema.yaml index 380029bff8070..e79cb9aab65ac 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.schema.yaml @@ -2,13 +2,6 @@ openapi: 3.0.0 info: title: Elastic Security - Timeline - Notes API version: '2023-10-31' -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/note: delete: diff --git a/x-pack/plugins/security_solution/common/api/timeline/delete_timelines/delete_timelines_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/delete_timelines/delete_timelines_route.schema.yaml index 7a0a168747d47..bb6674fa65877 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/delete_timelines/delete_timelines_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/delete_timelines/delete_timelines_route.schema.yaml @@ -5,13 +5,6 @@ info: externalDocs: url: https://www.elastic.co/guide/en/security/current/timeline-api-delete.html description: Documentation -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/timeline: delete: diff --git a/x-pack/plugins/security_solution/common/api/timeline/export_timelines/export_timelines_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/export_timelines/export_timelines_route.schema.yaml index 44ef7d0f3abe0..24387adf1f2a5 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/export_timelines/export_timelines_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/export_timelines/export_timelines_route.schema.yaml @@ -5,13 +5,6 @@ info: externalDocs: url: https://www.elastic.co/guide/en/security/current/timeline-api-import.html description: Documentation -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/timeline/_export: post: diff --git a/x-pack/plugins/security_solution/common/api/timeline/get_draft_timelines/get_draft_timelines_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/get_draft_timelines/get_draft_timelines_route.gen.ts index edbbc37744d03..327f02a8fb6f5 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/get_draft_timelines/get_draft_timelines_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/get_draft_timelines/get_draft_timelines_route.gen.ts @@ -16,7 +16,7 @@ import { z } from '@kbn/zod'; -import { TimelineType, TimelineResponse } from '../model/components.gen'; +import { TimelineType, PersistTimelineResponse } from '../model/components.gen'; export type GetDraftTimelinesRequestQuery = z.infer; export const GetDraftTimelinesRequestQuery = z.object({ @@ -25,10 +25,4 @@ export const GetDraftTimelinesRequestQuery = z.object({ export type GetDraftTimelinesRequestQueryInput = z.input; export type GetDraftTimelinesResponse = z.infer; -export const GetDraftTimelinesResponse = z.object({ - data: z.object({ - persistTimeline: z.object({ - timeline: TimelineResponse, - }), - }), -}); +export const GetDraftTimelinesResponse = PersistTimelineResponse; diff --git a/x-pack/plugins/security_solution/common/api/timeline/get_draft_timelines/get_draft_timelines_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/get_draft_timelines/get_draft_timelines_route.schema.yaml index 21cabb87cd335..4a8af1c77f40d 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/get_draft_timelines/get_draft_timelines_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/get_draft_timelines/get_draft_timelines_route.schema.yaml @@ -2,13 +2,6 @@ openapi: 3.0.0 info: title: Elastic Security - Timeline - Get Draft Timelines API version: '2023-10-31' -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/timeline/_draft: get: @@ -31,19 +24,7 @@ paths: content: application/json: schema: - type: object - required: [data] - properties: - data: - type: object - required: [persistTimeline] - properties: - persistTimeline: - type: object - required: [timeline] - properties: - timeline: - $ref: '../model/components.schema.yaml#/components/schemas/TimelineResponse' + $ref: '../model/components.schema.yaml#/components/schemas/PersistTimelineResponse' '403': description: If a draft Timeline was not found and we attempted to create one, it indicates that the user does not have the required permissions to create a draft Timeline. content: diff --git a/x-pack/plugins/security_solution/common/api/timeline/get_draft_timelines/get_draft_timelines_route.ts b/x-pack/plugins/security_solution/common/api/timeline/get_draft_timelines/get_draft_timelines_route.ts deleted file mode 100644 index 13625715289f6..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/get_draft_timelines/get_draft_timelines_route.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as rt from 'io-ts'; - -import { TimelineTypeLiteralRt } from '../model/api'; - -export const getDraftTimelineSchema = rt.type({ - timelineType: TimelineTypeLiteralRt, -}); diff --git a/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.schema.yaml index 5942fd76c5d51..793eeac5e7c71 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.schema.yaml @@ -2,13 +2,6 @@ openapi: 3.0.0 info: title: Elastic Security - Timeline - Notes API version: '2023-10-31' -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/note: get: diff --git a/x-pack/plugins/security_solution/common/api/timeline/get_timeline/get_timeline_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/get_timeline/get_timeline_route.gen.ts index 622545e22b37a..7a41788077524 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/get_timeline/get_timeline_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/get_timeline/get_timeline_route.gen.ts @@ -32,8 +32,11 @@ export const GetTimelineRequestQuery = z.object({ export type GetTimelineRequestQueryInput = z.input; export type GetTimelineResponse = z.infer; -export const GetTimelineResponse = z.object({ - data: z.object({ - getOneTimeline: TimelineResponse.nullable(), +export const GetTimelineResponse = z.union([ + z.object({ + data: z.object({ + getOneTimeline: TimelineResponse, + }), }), -}); + z.object({}).strict(), +]); diff --git a/x-pack/plugins/security_solution/common/api/timeline/get_timeline/get_timeline_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/get_timeline/get_timeline_route.schema.yaml index d0944bc0fcb10..9b5d3fedfd59e 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/get_timeline/get_timeline_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/get_timeline/get_timeline_route.schema.yaml @@ -5,13 +5,6 @@ info: externalDocs: url: https://www.elastic.co/guide/en/security/current/_get_timeline_or_timeline_template_by_savedobjectid.html description: Documentation -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/timeline: get: @@ -39,13 +32,15 @@ paths: content: application/json: schema: - type: object - required: [data] - properties: - data: - type: object - required: [getOneTimeline] + oneOf: + - type: object + required: [data] properties: - getOneTimeline: - $ref: '../model/components.schema.yaml#/components/schemas/TimelineResponse' - nullable: true + data: + type: object + required: [getOneTimeline] + properties: + getOneTimeline: + $ref: '../model/components.schema.yaml#/components/schemas/TimelineResponse' + - type: object + additionalProperties: false diff --git a/x-pack/plugins/security_solution/common/api/timeline/get_timeline/get_timeline_route.ts b/x-pack/plugins/security_solution/common/api/timeline/get_timeline/get_timeline_route.ts deleted file mode 100644 index cca6886f42025..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/get_timeline/get_timeline_route.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as rt from 'io-ts'; - -export const getTimelineQuerySchema = rt.partial({ - template_timeline_id: rt.string, - id: rt.string, -}); - -export type GetTimelineQuery = rt.TypeOf; diff --git a/x-pack/plugins/security_solution/common/api/timeline/get_timelines/get_timelines_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/get_timelines/get_timelines_route.gen.ts index 5ce3256ae48be..714746875599b 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/get_timelines/get_timelines_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/get_timelines/get_timelines_route.gen.ts @@ -41,13 +41,11 @@ export type GetTimelinesRequestQueryInput = z.input; export const GetTimelinesResponse = z.object({ - data: z.object({ - timelines: z.array(TimelineResponse), - totalCount: z.number(), - defaultTimelineCount: z.number(), - templateTimelineCount: z.number(), - favoriteCount: z.number(), - elasticTemplateTimelineCount: z.number(), - customTemplateTimelineCount: z.number(), - }), + timeline: z.array(TimelineResponse), + totalCount: z.number(), + defaultTimelineCount: z.number().optional(), + templateTimelineCount: z.number().optional(), + favoriteCount: z.number().optional(), + elasticTemplateTimelineCount: z.number().optional(), + customTemplateTimelineCount: z.number().optional(), }); diff --git a/x-pack/plugins/security_solution/common/api/timeline/get_timelines/get_timelines_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/get_timelines/get_timelines_route.schema.yaml index f889af73e10d7..36a7b853b3823 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/get_timelines/get_timelines_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/get_timelines/get_timelines_route.schema.yaml @@ -5,13 +5,6 @@ info: externalDocs: url: https://www.elastic.co/guide/en/security/current/timeline-api-get.html description: Documentation -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/timelines: get: @@ -75,37 +68,27 @@ paths: application/json: schema: type: object - required: [data] + required: [ + timeline, + totalCount, + ] properties: - data: - type: object - required: - [ - timelines, - totalCount, - defaultTimelineCount, - templateTimelineCount, - favoriteCount, - elasticTemplateTimelineCount, - customTemplateTimelineCount, - ] - properties: - timelines: - type: array - items: - $ref: '../model/components.schema.yaml#/components/schemas/TimelineResponse' - totalCount: - type: number - defaultTimelineCount: - type: number - templateTimelineCount: - type: number - favoriteCount: - type: number - elasticTemplateTimelineCount: - type: number - customTemplateTimelineCount: - type: number + timeline: + type: array + items: + $ref: '../model/components.schema.yaml#/components/schemas/TimelineResponse' + totalCount: + type: number + defaultTimelineCount: + type: number + templateTimelineCount: + type: number + favoriteCount: + type: number + elasticTemplateTimelineCount: + type: number + customTemplateTimelineCount: + type: number '400': description: Bad request. The user supplied invalid data. content: diff --git a/x-pack/plugins/security_solution/common/api/timeline/get_timelines/get_timelines_route.ts b/x-pack/plugins/security_solution/common/api/timeline/get_timelines/get_timelines_route.ts deleted file mode 100644 index 9f35197358aea..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/get_timelines/get_timelines_route.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as rt from 'io-ts'; -import { - direction, - sortFieldTimeline, - TimelineStatusLiteralRt, - TimelineTypeLiteralRt, -} from '../model/api'; -import { unionWithNullType } from '../../../utility_types'; - -const BoolFromString = rt.union([rt.literal('true'), rt.literal('false')]); - -export const getTimelinesQuerySchema = rt.partial({ - only_user_favorite: unionWithNullType(BoolFromString), - page_index: unionWithNullType(rt.string), - page_size: unionWithNullType(rt.string), - search: unionWithNullType(rt.string), - sort_field: sortFieldTimeline, - sort_order: direction, - status: unionWithNullType(TimelineStatusLiteralRt), - timeline_type: unionWithNullType(TimelineTypeLiteralRt), -}); diff --git a/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.gen.ts index 4624ffd713430..660f8bc287665 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.gen.ts @@ -16,23 +16,14 @@ import { z } from '@kbn/zod'; -import { Readable, ImportTimelineResult } from '../model/components.gen'; +import { ImportTimelineResult } from '../model/components.gen'; export type ImportTimelinesRequestBody = z.infer; export const ImportTimelinesRequestBody = z.object({ - file: Readable.merge( - z.object({ - hapi: z.object({ - filename: z.string(), - headers: z.object({}), - isImmutable: z.enum(['true', 'false']).optional(), - }), - }) - ), + isImmutable: z.enum(['true', 'false']).optional(), + file: z.unknown(), }); export type ImportTimelinesRequestBodyInput = z.input; export type ImportTimelinesResponse = z.infer; -export const ImportTimelinesResponse = z.object({ - data: ImportTimelineResult, -}); +export const ImportTimelinesResponse = ImportTimelineResult; diff --git a/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.schema.yaml index 34a35aa59db0e..d0d2691f2ac7e 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.schema.yaml @@ -5,13 +5,6 @@ info: externalDocs: url: https://www.elastic.co/guide/en/security/current/timeline-api-import.html description: Documentation -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/timeline/_import: post: @@ -29,37 +22,21 @@ paths: application/json: schema: type: object + required: [file] properties: - file: - allOf: - - $ref: '../model/components.schema.yaml#/components/schemas/Readable' - - type: object - required: [hapi] - properties: - hapi: - type: object - required: [filename, headers] - properties: - filename: - type: string - headers: - type: object - isImmutable: - type: string - enum: - - 'true' - - 'false' + isImmutable: + type: string + enum: + - 'true' + - 'false' + file: {} responses: '200': description: Indicates the import of Timelines was successful. content: application/json: schema: - type: object - required: [data] - properties: - data: - $ref: '../model/components.schema.yaml#/components/schemas/ImportTimelineResult' + $ref: '../model/components.schema.yaml#/components/schemas/ImportTimelineResult' '400': description: Indicates the import of Timelines was unsuccessful because of an invalid file extension. diff --git a/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.ts b/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.ts deleted file mode 100644 index 2ad6f3f8c7333..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as rt from 'io-ts'; - -import { BareNoteSchema, SavedTimelineRuntimeType } from '../model/api'; -import { unionWithNullType } from '../../../utility_types'; - -const pinnedEventIds = unionWithNullType(rt.array(rt.string)); - -export const eventNotes = unionWithNullType(rt.array(BareNoteSchema)); -export const globalNotes = unionWithNullType(rt.array(BareNoteSchema)); - -export const ImportTimelinesSchemaRt = rt.intersection([ - SavedTimelineRuntimeType, - rt.type({ - savedObjectId: unionWithNullType(rt.string), - version: unionWithNullType(rt.string), - }), - rt.type({ - globalNotes, - eventNotes, - pinnedEventIds, - }), -]); - -export type ImportTimelinesSchema = rt.TypeOf; - -const ReadableRt = rt.partial({ - _maxListeners: rt.unknown, - _readableState: rt.unknown, - _read: rt.unknown, - readable: rt.boolean, - _events: rt.unknown, - _eventsCount: rt.number, - _data: rt.unknown, - _position: rt.number, - _encoding: rt.string, -}); - -const booleanInString = rt.union([rt.literal('true'), rt.literal('false')]); - -export const ImportTimelinesPayloadSchemaRt = rt.intersection([ - rt.type({ - file: rt.intersection([ - ReadableRt, - rt.type({ - hapi: rt.type({ - filename: rt.string, - headers: rt.unknown, - }), - }), - ]), - }), - rt.partial({ isImmutable: booleanInString }), -]); diff --git a/x-pack/plugins/security_solution/common/api/timeline/index.ts b/x-pack/plugins/security_solution/common/api/timeline/index.ts index 806c0c8539d97..0a148bcc59797 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/index.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/index.ts @@ -7,13 +7,3 @@ export * from './model/api'; export * from './routes'; - -export * from './get_draft_timelines/get_draft_timelines_route'; -export * from './create_timelines/create_timelines_route'; -export * from './get_timeline/get_timeline_route'; -export * from './get_timelines/get_timelines_route'; -export * from './import_timelines/import_timelines_route'; -export * from './patch_timelines/patch_timelines_schema'; -export * from './pinned_events/pinned_events_route'; -export * from './install_prepackaged_timelines/install_prepackaged_timelines'; -export * from './copy_timeline/copy_timeline_route'; diff --git a/x-pack/plugins/security_solution/common/api/timeline/install_prepackaged_timelines/install_prepackaged_timelines.ts b/x-pack/plugins/security_solution/common/api/timeline/install_prepackaged_timelines/install_prepackaged_timelines.ts deleted file mode 100644 index 0d9b2d3e81121..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/install_prepackaged_timelines/install_prepackaged_timelines.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as rt from 'io-ts'; - -import { unionWithNullType } from '../../../utility_types'; -import { ImportTimelinesSchemaRt, TimelineSavedToReturnObjectRuntimeType } from '..'; - -export const checkTimelineStatusRt = rt.type({ - timelinesToInstall: rt.array(unionWithNullType(ImportTimelinesSchemaRt)), - timelinesToUpdate: rt.array(unionWithNullType(ImportTimelinesSchemaRt)), - prepackagedTimelines: rt.array(unionWithNullType(TimelineSavedToReturnObjectRuntimeType)), -}); - -export type CheckTimelineStatusRt = rt.TypeOf; diff --git a/x-pack/plugins/security_solution/common/api/timeline/install_prepackaged_timelines/install_prepackaged_timelines_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/install_prepackaged_timelines/install_prepackaged_timelines_route.gen.ts index add1e2ffa94b8..f2f09c0257e87 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/install_prepackaged_timelines/install_prepackaged_timelines_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/install_prepackaged_timelines/install_prepackaged_timelines_route.gen.ts @@ -16,7 +16,11 @@ import { z } from '@kbn/zod'; -import { ImportTimelines, SavedTimeline, ImportTimelineResult } from '../model/components.gen'; +import { + ImportTimelines, + TimelineSavedToReturnObject, + ImportTimelineResult, +} from '../model/components.gen'; export type InstallPrepackedTimelinesRequestBody = z.infer< typeof InstallPrepackedTimelinesRequestBody @@ -24,13 +28,11 @@ export type InstallPrepackedTimelinesRequestBody = z.infer< export const InstallPrepackedTimelinesRequestBody = z.object({ timelinesToInstall: z.array(ImportTimelines.nullable()), timelinesToUpdate: z.array(ImportTimelines.nullable()), - prepackagedTimelines: z.array(SavedTimeline), + prepackagedTimelines: z.array(TimelineSavedToReturnObject.nullable()), }); export type InstallPrepackedTimelinesRequestBodyInput = z.input< typeof InstallPrepackedTimelinesRequestBody >; export type InstallPrepackedTimelinesResponse = z.infer; -export const InstallPrepackedTimelinesResponse = z.object({ - data: ImportTimelineResult, -}); +export const InstallPrepackedTimelinesResponse = ImportTimelineResult; diff --git a/x-pack/plugins/security_solution/common/api/timeline/install_prepackaged_timelines/install_prepackaged_timelines_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/install_prepackaged_timelines/install_prepackaged_timelines_route.schema.yaml index 7dfa5afbbe5ed..876bf499e385b 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/install_prepackaged_timelines/install_prepackaged_timelines_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/install_prepackaged_timelines/install_prepackaged_timelines_route.schema.yaml @@ -2,13 +2,6 @@ openapi: 3.0.0 info: title: Elastic Security - Timeline - Install Prepackaged Timelines API version: '2023-10-31' -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/timeline/_prepackaged: post: @@ -41,18 +34,15 @@ paths: prepackagedTimelines: type: array items: - $ref: '../model/components.schema.yaml#/components/schemas/SavedTimeline' + $ref: '../model/components.schema.yaml#/components/schemas/TimelineSavedToReturnObject' + nullable: true responses: '200': description: Indicates the installation of prepackaged Timelines was successful. content: application/json: schema: - type: object - required: [data] - properties: - data: - $ref: '../model/components.schema.yaml#/components/schemas/ImportTimelineResult' + $ref: '../model/components.schema.yaml#/components/schemas/ImportTimelineResult' '500': description: Indicates the installation of prepackaged Timelines was unsuccessful. content: diff --git a/x-pack/plugins/security_solution/common/api/timeline/model/api.ts b/x-pack/plugins/security_solution/common/api/timeline/model/api.ts index ff6707b700626..250daaf3077eb 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/model/api.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/model/api.ts @@ -5,30 +5,35 @@ * 2.0. */ -import * as runtimeTypes from 'io-ts'; -import { PositiveInteger } from '@kbn/securitysolution-io-ts-types'; - -import { stringEnum, unionWithNullType } from '../../../utility_types'; - -import type { Maybe } from '../../../search_strategy'; -import { Direction } from '../../../search_strategy'; -import { PinnedEventRuntimeType } from '../pinned_events/pinned_events_route'; -import { ErrorSchema } from './error_schema'; import type { DataProviderType } from './components.gen'; import { BareNote, BarePinnedEvent, + ColumnHeaderResult, DataProviderTypeEnum, + DataProviderResult, FavoriteTimelineResponse, - type FavoriteTimelineResult, + FilterTimelineResult, + ImportTimelineResult, + ImportTimelines, type Note, PinnedEvent, + PersistTimelineResponse, + QueryMatchResult, + ResolvedTimeline, RowRendererId, RowRendererIdEnum, + SavedTimeline, + SavedTimelineWithSavedObjectId, + Sort, + SortDirection, SortFieldTimeline, SortFieldTimelineEnum, TemplateTimelineType, TemplateTimelineTypeEnum, + TimelineErrorResponse, + TimelineResponse, + TimelineSavedToReturnObject, TimelineStatus, TimelineStatusEnum, TimelineType, @@ -38,62 +43,45 @@ import { export { BareNote, BarePinnedEvent, + ColumnHeaderResult, + DataProviderResult, DataProviderType, DataProviderTypeEnum, FavoriteTimelineResponse, + FilterTimelineResult, + ImportTimelineResult, + ImportTimelines, Note, PinnedEvent, + PersistTimelineResponse, + QueryMatchResult, + ResolvedTimeline, RowRendererId, RowRendererIdEnum, + SavedTimeline, + SavedTimelineWithSavedObjectId, + Sort, + SortDirection, SortFieldTimeline, SortFieldTimelineEnum, TemplateTimelineType, + TimelineErrorResponse, + TimelineResponse, TemplateTimelineTypeEnum, + TimelineSavedToReturnObject, TimelineStatus, TimelineStatusEnum, TimelineType, TimelineTypeEnum, }; -export type BarePinnedEventWithoutExternalRefs = Omit; - /** - * Outcome is a property of the saved object resolve api - * will tell us info about the rule after 8.0 migrations + * This type represents a timeline type stored in a saved object that does not include any fields that reference + * other saved objects. */ -export type SavedObjectResolveOutcome = runtimeTypes.TypeOf; -export const SavedObjectResolveOutcome = runtimeTypes.union([ - runtimeTypes.literal('exactMatch'), - runtimeTypes.literal('aliasMatch'), - runtimeTypes.literal('conflict'), -]); - -export type SavedObjectResolveAliasTargetId = runtimeTypes.TypeOf< - typeof SavedObjectResolveAliasTargetId ->; -export const SavedObjectResolveAliasTargetId = runtimeTypes.string; - -export type SavedObjectResolveAliasPurpose = runtimeTypes.TypeOf< - typeof SavedObjectResolveAliasPurpose ->; -export const SavedObjectResolveAliasPurpose = runtimeTypes.union([ - runtimeTypes.literal('savedObjectConversion'), - runtimeTypes.literal('savedObjectImport'), -]); +export type TimelineWithoutExternalRefs = Omit; -export const BareNoteSchema = runtimeTypes.intersection([ - runtimeTypes.type({ - timelineId: runtimeTypes.string, - }), - runtimeTypes.partial({ - eventId: unionWithNullType(runtimeTypes.string), - note: unionWithNullType(runtimeTypes.string), - created: unionWithNullType(runtimeTypes.number), - createdBy: unionWithNullType(runtimeTypes.string), - updated: unionWithNullType(runtimeTypes.number), - updatedBy: unionWithNullType(runtimeTypes.string), - }), -]); +export type BarePinnedEventWithoutExternalRefs = Omit; /** * This type represents a note type stored in a saved object that does not include any fields that reference @@ -101,350 +89,9 @@ export const BareNoteSchema = runtimeTypes.intersection([ */ export type BareNoteWithoutExternalRefs = Omit; -export const NoteRuntimeType = runtimeTypes.intersection([ - BareNoteSchema, - runtimeTypes.type({ - noteId: runtimeTypes.string, - version: runtimeTypes.string, - }), -]); - -/* - * ColumnHeader Types - */ -const SavedColumnHeaderRuntimeType = runtimeTypes.partial({ - aggregatable: unionWithNullType(runtimeTypes.boolean), - category: unionWithNullType(runtimeTypes.string), - columnHeaderType: unionWithNullType(runtimeTypes.string), - description: unionWithNullType(runtimeTypes.string), - example: unionWithNullType(runtimeTypes.string), - indexes: unionWithNullType(runtimeTypes.array(runtimeTypes.string)), - id: unionWithNullType(runtimeTypes.string), - name: unionWithNullType(runtimeTypes.string), - placeholder: unionWithNullType(runtimeTypes.string), - searchable: unionWithNullType(runtimeTypes.boolean), - type: unionWithNullType(runtimeTypes.string), -}); - -/* - * DataProvider Types - */ -const SavedDataProviderQueryMatchBasicRuntimeType = runtimeTypes.partial({ - field: unionWithNullType(runtimeTypes.string), - displayField: unionWithNullType(runtimeTypes.string), - value: runtimeTypes.union([ - runtimeTypes.null, - runtimeTypes.string, - runtimeTypes.array(runtimeTypes.string), - ]), - displayValue: unionWithNullType(runtimeTypes.string), - operator: unionWithNullType(runtimeTypes.string), -}); - -const SavedDataProviderQueryMatchRuntimeType = runtimeTypes.partial({ - id: unionWithNullType(runtimeTypes.string), - name: unionWithNullType(runtimeTypes.string), - enabled: unionWithNullType(runtimeTypes.boolean), - excluded: unionWithNullType(runtimeTypes.boolean), - kqlQuery: unionWithNullType(runtimeTypes.string), - queryMatch: unionWithNullType(SavedDataProviderQueryMatchBasicRuntimeType), -}); - -export const DataProviderTypeLiteralRt = runtimeTypes.union([ - runtimeTypes.literal(DataProviderTypeEnum.default), - runtimeTypes.literal(DataProviderTypeEnum.template), -]); - -const SavedDataProviderRuntimeType = runtimeTypes.partial({ - id: unionWithNullType(runtimeTypes.string), - name: unionWithNullType(runtimeTypes.string), - enabled: unionWithNullType(runtimeTypes.boolean), - excluded: unionWithNullType(runtimeTypes.boolean), - kqlQuery: unionWithNullType(runtimeTypes.string), - queryMatch: unionWithNullType(SavedDataProviderQueryMatchBasicRuntimeType), - and: unionWithNullType(runtimeTypes.array(SavedDataProviderQueryMatchRuntimeType)), - type: unionWithNullType(DataProviderTypeLiteralRt), -}); - -/* - * Filters Types - */ -const SavedFilterMetaRuntimeType = runtimeTypes.partial({ - alias: unionWithNullType(runtimeTypes.string), - controlledBy: unionWithNullType(runtimeTypes.string), - disabled: unionWithNullType(runtimeTypes.boolean), - field: unionWithNullType(runtimeTypes.string), - formattedValue: unionWithNullType(runtimeTypes.string), - index: unionWithNullType(runtimeTypes.string), - key: unionWithNullType(runtimeTypes.string), - negate: unionWithNullType(runtimeTypes.boolean), - params: unionWithNullType(runtimeTypes.string), - type: unionWithNullType(runtimeTypes.string), - value: unionWithNullType(runtimeTypes.string), -}); - -const SavedFilterRuntimeType = runtimeTypes.partial({ - exists: unionWithNullType(runtimeTypes.string), - meta: unionWithNullType(SavedFilterMetaRuntimeType), - match_all: unionWithNullType(runtimeTypes.string), - missing: unionWithNullType(runtimeTypes.string), - query: unionWithNullType(runtimeTypes.string), - range: unionWithNullType(runtimeTypes.string), - script: unionWithNullType(runtimeTypes.string), -}); - -/* - * eqlOptionsQuery -> filterQuery Types - */ -const EqlOptionsRuntimeType = runtimeTypes.partial({ - eventCategoryField: unionWithNullType(runtimeTypes.string), - query: unionWithNullType(runtimeTypes.string), - tiebreakerField: unionWithNullType(runtimeTypes.string), - timestampField: unionWithNullType(runtimeTypes.string), - size: unionWithNullType(runtimeTypes.union([runtimeTypes.string, runtimeTypes.number])), -}); - -/* - * kqlQuery -> filterQuery Types - */ -const SavedKueryFilterQueryRuntimeType = runtimeTypes.partial({ - kind: unionWithNullType(runtimeTypes.string), - expression: unionWithNullType(runtimeTypes.string), -}); - -const SavedSerializedFilterQueryQueryRuntimeType = runtimeTypes.partial({ - kuery: unionWithNullType(SavedKueryFilterQueryRuntimeType), - serializedQuery: unionWithNullType(runtimeTypes.string), -}); - -const SavedFilterQueryQueryRuntimeType = runtimeTypes.partial({ - filterQuery: unionWithNullType(SavedSerializedFilterQueryQueryRuntimeType), -}); - -/* - * DatePicker Range Types - */ -const SavedDateRangePickerRuntimeType = runtimeTypes.partial({ - /* Before the change of all timestamp to ISO string the values of start and from - * attributes where a number. Specifically UNIX timestamps. - * To support old timeline's saved object we need to add the number io-ts type - */ - start: unionWithNullType(runtimeTypes.union([runtimeTypes.string, runtimeTypes.number])), - end: unionWithNullType(runtimeTypes.union([runtimeTypes.string, runtimeTypes.number])), -}); - -/* - * Favorite Types - */ -const SavedFavoriteRuntimeType = runtimeTypes.partial({ - keySearch: unionWithNullType(runtimeTypes.string), - favoriteDate: unionWithNullType(runtimeTypes.number), - fullName: unionWithNullType(runtimeTypes.string), - userName: unionWithNullType(runtimeTypes.string), -}); - -/* - * Sort Types - */ - -const SavedSortObject = runtimeTypes.partial({ - columnId: unionWithNullType(runtimeTypes.string), - columnType: unionWithNullType(runtimeTypes.string), - sortDirection: unionWithNullType(runtimeTypes.string), -}); -const SavedSortRuntimeType = runtimeTypes.union([ - runtimeTypes.array(SavedSortObject), - SavedSortObject, -]); - -export type Sort = runtimeTypes.TypeOf; - -/* - * Timeline Statuses - */ - -export const TimelineStatusLiteralRt = runtimeTypes.union([ - runtimeTypes.literal(TimelineStatusEnum.active), - runtimeTypes.literal(TimelineStatusEnum.draft), - runtimeTypes.literal(TimelineStatusEnum.immutable), -]); - export const RowRendererCount = Object.keys(RowRendererIdEnum).length; export const RowRendererValues = Object.values(RowRendererId.Values); -const RowRendererIdRuntimeType = stringEnum(RowRendererIdEnum, 'RowRendererId'); - -/** - * Timeline types - */ - -export const TimelineTypeLiteralRt = runtimeTypes.union([ - runtimeTypes.literal(TimelineTypeEnum.template), - runtimeTypes.literal(TimelineTypeEnum.default), -]); - -/** - * This is the response type - */ -export const SavedTimelineRuntimeType = runtimeTypes.partial({ - columns: unionWithNullType(runtimeTypes.array(SavedColumnHeaderRuntimeType)), - dataProviders: unionWithNullType(runtimeTypes.array(SavedDataProviderRuntimeType)), - dataViewId: unionWithNullType(runtimeTypes.string), - description: unionWithNullType(runtimeTypes.string), - eqlOptions: unionWithNullType(EqlOptionsRuntimeType), - eventType: unionWithNullType(runtimeTypes.string), - excludedRowRendererIds: unionWithNullType(runtimeTypes.array(RowRendererIdRuntimeType)), - favorite: unionWithNullType(runtimeTypes.array(SavedFavoriteRuntimeType)), - filters: unionWithNullType(runtimeTypes.array(SavedFilterRuntimeType)), - indexNames: unionWithNullType(runtimeTypes.array(runtimeTypes.string)), - kqlMode: unionWithNullType(runtimeTypes.string), - kqlQuery: unionWithNullType(SavedFilterQueryQueryRuntimeType), - title: unionWithNullType(runtimeTypes.string), - templateTimelineId: unionWithNullType(runtimeTypes.string), - templateTimelineVersion: unionWithNullType(runtimeTypes.number), - timelineType: unionWithNullType(TimelineTypeLiteralRt), - dateRange: unionWithNullType(SavedDateRangePickerRuntimeType), - savedQueryId: unionWithNullType(runtimeTypes.string), - sort: unionWithNullType(SavedSortRuntimeType), - status: unionWithNullType(TimelineStatusLiteralRt), - created: unionWithNullType(runtimeTypes.number), - createdBy: unionWithNullType(runtimeTypes.string), - updated: unionWithNullType(runtimeTypes.number), - updatedBy: unionWithNullType(runtimeTypes.string), - savedSearchId: unionWithNullType(runtimeTypes.string), -}); - -export type SavedTimeline = runtimeTypes.TypeOf; - -export type SavedTimelineWithSavedObjectId = SavedTimeline & { - savedObjectId?: string | null; -}; - -/** - * This type represents a timeline type stored in a saved object that does not include any fields that reference - * other saved objects. - */ -export type TimelineWithoutExternalRefs = Omit; - -export const TimelineSavedToReturnObjectRuntimeType = runtimeTypes.intersection([ - SavedTimelineRuntimeType, - runtimeTypes.type({ - savedObjectId: runtimeTypes.string, - version: runtimeTypes.string, - }), - runtimeTypes.partial({ - eventIdToNoteIds: runtimeTypes.array(NoteRuntimeType), - noteIds: runtimeTypes.array(runtimeTypes.string), - notes: runtimeTypes.array(NoteRuntimeType), - pinnedEventIds: runtimeTypes.array(runtimeTypes.string), - pinnedEventsSaveObject: runtimeTypes.array(PinnedEventRuntimeType), - }), -]); - -export type TimelineSavedObject = runtimeTypes.TypeOf< - typeof TimelineSavedToReturnObjectRuntimeType ->; - -export const SingleTimelineResponseType = runtimeTypes.type({ - data: runtimeTypes.type({ - getOneTimeline: TimelineSavedToReturnObjectRuntimeType, - }), -}); - -export type SingleTimelineResponse = runtimeTypes.TypeOf; - -/** Resolved Timeline Response */ -export const ResolvedTimelineSavedObjectToReturnObjectRuntimeType = runtimeTypes.intersection([ - runtimeTypes.type({ - timeline: TimelineSavedToReturnObjectRuntimeType, - outcome: SavedObjectResolveOutcome, - }), - runtimeTypes.partial({ - alias_target_id: SavedObjectResolveAliasTargetId, - alias_purpose: SavedObjectResolveAliasPurpose, - }), -]); - -export type ResolvedTimelineWithOutcomeSavedObject = runtimeTypes.TypeOf< - typeof ResolvedTimelineSavedObjectToReturnObjectRuntimeType ->; - -export const ResolvedSingleTimelineResponseType = runtimeTypes.type({ - data: ResolvedTimelineSavedObjectToReturnObjectRuntimeType, -}); - -export type SingleTimelineResolveResponse = runtimeTypes.TypeOf< - typeof ResolvedSingleTimelineResponseType ->; - -const responseTimelines = runtimeTypes.type({ - timeline: runtimeTypes.array(TimelineSavedToReturnObjectRuntimeType), - totalCount: runtimeTypes.number, -}); - -export type ResponseTimelines = runtimeTypes.TypeOf; - -export const allTimelinesResponse = runtimeTypes.intersection([ - responseTimelines, - runtimeTypes.type({ - defaultTimelineCount: runtimeTypes.number, - templateTimelineCount: runtimeTypes.number, - elasticTemplateTimelineCount: runtimeTypes.number, - customTemplateTimelineCount: runtimeTypes.number, - favoriteCount: runtimeTypes.number, - }), -]); - -export type AllTimelinesResponse = runtimeTypes.TypeOf; - -/** - * All Timeline Saved object type with metadata - */ -export const TimelineResponseType = runtimeTypes.type({ - data: runtimeTypes.type({ - persistTimeline: runtimeTypes.intersection([ - runtimeTypes.partial({ - code: unionWithNullType(runtimeTypes.number), - message: unionWithNullType(runtimeTypes.string), - }), - runtimeTypes.type({ - timeline: TimelineSavedToReturnObjectRuntimeType, - }), - ]), - }), -}); - -export const TimelineErrorResponseType = runtimeTypes.union([ - runtimeTypes.type({ - status_code: runtimeTypes.number, - message: runtimeTypes.string, - }), - runtimeTypes.type({ - statusCode: runtimeTypes.number, - message: runtimeTypes.string, - }), -]); - -export type TimelineErrorResponse = runtimeTypes.TypeOf; -export type TimelineResponse = runtimeTypes.TypeOf; - -export const sortFieldTimeline = runtimeTypes.union([ - runtimeTypes.literal(SortFieldTimelineEnum.title), - runtimeTypes.literal(SortFieldTimelineEnum.description), - runtimeTypes.literal(SortFieldTimelineEnum.updated), - runtimeTypes.literal(SortFieldTimelineEnum.created), -]); - -export const direction = runtimeTypes.union([ - runtimeTypes.literal(Direction.asc), - runtimeTypes.literal(Direction.desc), -]); - -export const sortTimeline = runtimeTypes.type({ - sortField: sortFieldTimeline, - sortOrder: direction, -}); - /** * Import/export timelines */ @@ -457,187 +104,17 @@ export interface ExportedNotes { globalNotes: ExportedGlobalNotes; } -export type ExportedTimelines = SavedTimeline & - ExportedNotes & { - pinnedEventIds: string[]; - }; - export interface ExportTimelineNotFoundError { statusCode: number; message: string; } -export const importTimelineResultSchema = runtimeTypes.exact( - runtimeTypes.type({ - success: runtimeTypes.boolean, - success_count: PositiveInteger, - timelines_installed: PositiveInteger, - timelines_updated: PositiveInteger, - errors: runtimeTypes.array(ErrorSchema), - }) -); - -export type ImportTimelineResultSchema = runtimeTypes.TypeOf; - -export const pageInfoTimeline = runtimeTypes.type({ - pageIndex: runtimeTypes.number, - pageSize: runtimeTypes.number, -}); - export interface PageInfoTimeline { pageIndex: number; pageSize: number; } -export const getTimelinesArgs = runtimeTypes.partial({ - onlyUserFavorite: unionWithNullType(runtimeTypes.boolean), - pageInfo: unionWithNullType(pageInfoTimeline), - search: unionWithNullType(runtimeTypes.string), - sort: unionWithNullType(sortTimeline), - status: unionWithNullType(TimelineStatusLiteralRt), - timelineType: unionWithNullType(TimelineTypeLiteralRt), -}); - -export type GetTimelinesArgs = runtimeTypes.TypeOf; - -export interface ColumnHeaderResult { - aggregatable?: Maybe; - category?: Maybe; - columnHeaderType?: Maybe; - description?: Maybe; - example?: Maybe; - indexes?: Maybe; - id?: Maybe; - name?: Maybe; - placeholder?: Maybe; - searchable?: Maybe; - type?: Maybe; -} - -export interface DataProviderResult { - id?: Maybe; - name?: Maybe; - enabled?: Maybe; - excluded?: Maybe; - kqlQuery?: Maybe; - queryMatch?: Maybe; - type?: Maybe; - and?: Maybe; -} - -export interface QueryMatchResult { - field?: Maybe; - displayField?: Maybe; - value?: Maybe; - displayValue?: Maybe; - operator?: Maybe; -} - -export interface DateRangePickerResult { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - start?: Maybe; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - end?: Maybe; -} - -export interface EqlOptionsResult { - eventCategoryField?: Maybe; - tiebreakerField?: Maybe; - timestampField?: Maybe; - query?: Maybe; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - size?: Maybe; -} - -export interface FilterTimelineResult { - exists?: Maybe; - meta?: Maybe; - match_all?: Maybe; - missing?: Maybe; - query?: Maybe; - range?: Maybe; - script?: Maybe; -} - -export interface FilterMetaTimelineResult { - alias?: Maybe; - controlledBy?: Maybe; - disabled?: Maybe; - field?: Maybe; - formattedValue?: Maybe; - index?: Maybe; - key?: Maybe; - negate?: Maybe; - params?: Maybe; - type?: Maybe; - value?: Maybe; -} - -export interface SerializedFilterQueryResult { - filterQuery?: Maybe; -} - -export interface KueryFilterQueryResult { - kind?: Maybe; - expression?: Maybe; -} - -export interface SerializedKueryQueryResult { - kuery?: Maybe; - serializedQuery?: Maybe; -} - -export interface TimelineResult { - columns?: Maybe; - created?: Maybe; - createdBy?: Maybe; - dataProviders?: Maybe; - dataViewId?: Maybe; - dateRange?: Maybe; - description?: Maybe; - eqlOptions?: Maybe; - eventIdToNoteIds?: Maybe; - eventType?: Maybe; - excludedRowRendererIds?: Maybe; - favorite?: Maybe; - filters?: Maybe; - kqlMode?: Maybe; - kqlQuery?: Maybe; - indexNames?: Maybe; - notes?: Maybe; - noteIds?: Maybe; - pinnedEventIds?: Maybe; - pinnedEventsSaveObject?: Maybe; - savedQueryId?: Maybe; - savedObjectId: string; - sort?: Maybe; - status?: Maybe; - title?: Maybe; - templateTimelineId?: Maybe; - templateTimelineVersion?: Maybe; - timelineType?: Maybe; - updated?: Maybe; - updatedBy?: Maybe; - version: string; - savedSearchId?: Maybe; -} - -export interface ResponseTimeline { - code?: Maybe; - message?: Maybe; - timeline: TimelineResult; -} - export interface SortTimeline { sortField: SortFieldTimeline; - sortOrder: Direction; -} - -export interface GetAllTimelineVariables { - pageInfo: PageInfoTimeline; - search?: Maybe; - sort?: Maybe; - onlyUserFavorite?: Maybe; - timelineType?: Maybe; - status?: Maybe; + sortOrder: SortDirection; } diff --git a/x-pack/plugins/security_solution/common/api/timeline/model/components.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/model/components.gen.ts index 990b19d6f3bab..93d627f53263b 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/model/components.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/model/components.gen.ts @@ -42,24 +42,24 @@ export const TemplateTimelineTypeEnum = TemplateTimelineType.enum; export type ColumnHeaderResult = z.infer; export const ColumnHeaderResult = z.object({ - aggregatable: z.boolean().optional(), - category: z.string().optional(), - columnHeaderType: z.string().optional(), - description: z.string().optional(), - example: z.union([z.string(), z.number()]).optional(), - indexes: z.array(z.string()).optional(), - id: z.string().optional(), - name: z.string().optional(), - placeholder: z.string().optional(), - searchable: z.boolean().optional(), - type: z.string().optional(), + aggregatable: z.boolean().nullable().optional(), + category: z.string().nullable().optional(), + columnHeaderType: z.string().nullable().optional(), + description: z.string().nullable().optional(), + example: z.string().nullable().optional(), + indexes: z.array(z.string()).nullable().optional(), + id: z.string().nullable().optional(), + name: z.string().nullable().optional(), + placeholder: z.string().nullable().optional(), + searchable: z.boolean().nullable().optional(), + type: z.string().nullable().optional(), }); export type QueryMatchResult = z.infer; export const QueryMatchResult = z.object({ field: z.string().nullable().optional(), displayField: z.string().nullable().optional(), - value: z.string().nullable().optional(), + value: z.union([z.string().nullable(), z.array(z.string()).nullable()]).optional(), displayValue: z.string().nullable().optional(), operator: z.string().nullable().optional(), }); @@ -71,7 +71,8 @@ export const DataProviderQueryMatch = z.object({ id: z.string().nullable().optional(), kqlQuery: z.string().nullable().optional(), name: z.string().nullable().optional(), - queryMatch: QueryMatchResult.optional(), + queryMatch: QueryMatchResult.nullable().optional(), + type: DataProviderType.nullable().optional(), }); export type DataProviderResult = z.infer; @@ -119,27 +120,28 @@ export const FavoriteTimelineResult = z.object({ export type FilterTimelineResult = z.infer; export const FilterTimelineResult = z.object({ - exists: z.boolean().optional(), + exists: z.string().nullable().optional(), meta: z .object({ - alias: z.string().optional(), - controlledBy: z.string().optional(), - disabled: z.boolean().optional(), - field: z.string().optional(), - formattedValue: z.string().optional(), - index: z.string().optional(), - key: z.string().optional(), - negate: z.boolean().optional(), - params: z.string().optional(), - type: z.string().optional(), - value: z.string().optional(), + alias: z.string().nullable().optional(), + controlledBy: z.string().nullable().optional(), + disabled: z.boolean().nullable().optional(), + field: z.string().nullable().optional(), + formattedValue: z.string().nullable().optional(), + index: z.string().nullable().optional(), + key: z.string().nullable().optional(), + negate: z.boolean().nullable().optional(), + params: z.string().nullable().optional(), + type: z.string().nullable().optional(), + value: z.string().nullable().optional(), }) + .nullable() .optional(), - match_all: z.string().optional(), - missing: z.string().optional(), - query: z.string().optional(), - range: z.string().optional(), - script: z.string().optional(), + match_all: z.string().nullable().optional(), + missing: z.string().nullable().optional(), + query: z.string().nullable().optional(), + range: z.string().nullable().optional(), + script: z.string().nullable().optional(), }); export type SerializedFilterQueryResult = z.infer; @@ -178,8 +180,8 @@ export const SavedTimeline = z.object({ dataViewId: z.string().nullable().optional(), dateRange: z .object({ - end: z.union([z.string(), z.number()]).optional(), - start: z.union([z.string(), z.number()]).optional(), + end: z.union([z.string().nullable(), z.number().nullable()]).optional(), + start: z.union([z.string().nullable(), z.number().nullable()]).optional(), }) .nullable() .optional(), @@ -213,6 +215,14 @@ export const SavedTimeline = z.object({ updatedBy: z.string().nullable().optional(), }); +export type SavedTimelineWithSavedObjectId = z.infer; +export const SavedTimelineWithSavedObjectId = SavedTimeline.merge( + z.object({ + savedObjectId: z.string(), + version: z.string(), + }) +); + export type BareNote = z.infer; export const BareNote = z.object({ eventId: z.string().nullable().optional(), @@ -251,18 +261,50 @@ export const PinnedEvent = BarePinnedEvent.merge( ); export type TimelineResponse = z.infer; -export const TimelineResponse = SavedTimeline.merge( +export const TimelineResponse = SavedTimeline.merge(SavedTimelineWithSavedObjectId).merge( + z.object({ + eventIdToNoteIds: z.array(Note).nullable().optional(), + notes: z.array(Note).nullable().optional(), + noteIds: z.array(z.string()).nullable().optional(), + pinnedEventIds: z.array(z.string()).nullable().optional(), + pinnedEventsSaveObject: z.array(PinnedEvent).nullable().optional(), + }) +); + +export type TimelineSavedToReturnObject = z.infer; +export const TimelineSavedToReturnObject = SavedTimeline.merge( z.object({ - eventIdToNoteIds: z.array(Note).optional(), - notes: z.array(Note).optional(), - noteIds: z.array(z.string()).optional(), - pinnedEventIds: z.array(z.string()).optional(), - pinnedEventsSaveObject: z.array(PinnedEvent).optional(), savedObjectId: z.string(), version: z.string(), + eventIdToNoteIds: z.array(Note).nullable().optional(), + notes: z.array(Note).nullable().optional(), + noteIds: z.array(z.string()).nullable().optional(), + pinnedEventIds: z.array(z.string()).nullable().optional(), + pinnedEventsSaveObject: z.array(PinnedEvent).nullable().optional(), }) ); +export type SavedObjectResolveOutcome = z.infer; +export const SavedObjectResolveOutcome = z.enum(['exactMatch', 'aliasMatch', 'conflict']); +export type SavedObjectResolveOutcomeEnum = typeof SavedObjectResolveOutcome.enum; +export const SavedObjectResolveOutcomeEnum = SavedObjectResolveOutcome.enum; + +export type SavedObjectResolveAliasPurpose = z.infer; +export const SavedObjectResolveAliasPurpose = z.enum([ + 'savedObjectConversion', + 'savedObjectImport', +]); +export type SavedObjectResolveAliasPurposeEnum = typeof SavedObjectResolveAliasPurpose.enum; +export const SavedObjectResolveAliasPurposeEnum = SavedObjectResolveAliasPurpose.enum; + +export type ResolvedTimeline = z.infer; +export const ResolvedTimeline = z.object({ + timeline: TimelineSavedToReturnObject, + outcome: SavedObjectResolveOutcome, + alias_target_id: z.string().optional(), + alias_purpose: SavedObjectResolveAliasPurpose.optional(), +}); + export type FavoriteTimelineResponse = z.infer; export const FavoriteTimelineResponse = z.object({ savedObjectId: z.string(), @@ -275,6 +317,15 @@ export const FavoriteTimelineResponse = z.object({ favorite: z.array(FavoriteTimelineResult).optional(), }); +export type PersistTimelineResponse = z.infer; +export const PersistTimelineResponse = z.object({ + data: z.object({ + persistTimeline: z.object({ + timeline: TimelineResponse, + }), + }), +}); + export type BareNoteWithoutExternalRefs = z.infer; export const BareNoteWithoutExternalRefs = z.object({ eventId: z.string().nullable().optional(), @@ -306,6 +357,11 @@ export const SortFieldTimeline = z.enum(['title', 'description', 'updated', 'cre export type SortFieldTimelineEnum = typeof SortFieldTimeline.enum; export const SortFieldTimelineEnum = SortFieldTimeline.enum; +export type SortDirection = z.infer; +export const SortDirection = z.enum(['asc', 'desc']); +export type SortDirectionEnum = typeof SortDirection.enum; +export const SortDirectionEnum = SortDirection.enum; + /** * The status of the timeline. Valid values are `active`, `draft`, and `immutable`. */ @@ -317,11 +373,11 @@ export const TimelineStatusEnum = TimelineStatus.enum; export type ImportTimelines = z.infer; export const ImportTimelines = SavedTimeline.merge( z.object({ - savedObjectId: z.string().nullable().optional(), - version: z.string().nullable().optional(), - globalNotes: z.array(BareNote).nullable().optional(), - eventNotes: z.array(BareNote).nullable().optional(), - pinnedEventIds: z.array(z.string()).nullable().optional(), + savedObjectId: z.string().nullable(), + version: z.string().nullable(), + pinnedEventIds: z.array(z.string()).nullable(), + eventNotes: z.array(BareNote).nullable(), + globalNotes: z.array(BareNote).nullable(), }) ); @@ -346,24 +402,14 @@ export const ImportTimelineResult = z.object({ .optional(), }); -export type ExportedTimelines = z.infer; -export const ExportedTimelines = SavedTimeline.merge( +export type TimelineErrorResponse = z.infer; +export const TimelineErrorResponse = z.union([ z.object({ - globalNotes: z.array(Note).optional(), - eventNotes: z.array(Note).optional(), - pinnedEventIds: z.array(z.string()).optional(), - }) -); - -export type Readable = z.infer; -export const Readable = z.object({ - _maxListeners: z.object({}).catchall(z.unknown()).optional(), - _readableState: z.object({}).catchall(z.unknown()).optional(), - _read: z.object({}).catchall(z.unknown()).optional(), - readable: z.boolean().optional(), - _events: z.object({}).catchall(z.unknown()).optional(), - _eventsCount: z.number().optional(), - _data: z.object({}).catchall(z.unknown()).optional(), - _position: z.number().optional(), - _encoding: z.string().optional(), -}); + message: z.string(), + status_code: z.number(), + }), + z.object({ + message: z.string(), + statusCode: z.number(), + }), +]); diff --git a/x-pack/plugins/security_solution/common/api/timeline/model/components.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/model/components.schema.yaml index c8ba2e6019f16..568eec1975769 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/model/components.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/model/components.schema.yaml @@ -56,11 +56,15 @@ components: end: oneOf: - type: string + nullable: true - type: number + nullable: true start: oneOf: - type: string + nullable: true - type: number + nullable: true description: type: string nullable: true @@ -149,43 +153,73 @@ components: updatedBy: type: string nullable: true + SavedTimelineWithSavedObjectId: + allOf: + - $ref: '#/components/schemas/SavedTimeline' + - type: object + required: [savedObjectId, version] + properties: + savedObjectId: + type: string + version: + type: string TimelineResponse: allOf: - $ref: '#/components/schemas/SavedTimeline' + - $ref: '#/components/schemas/SavedTimelineWithSavedObjectId' - type: object - required: - - savedObjectId - - version properties: eventIdToNoteIds: type: array + nullable: true items: $ref: '#/components/schemas/Note' notes: type: array + nullable: true items: $ref: '#/components/schemas/Note' noteIds: type: array + nullable: true items: type: string pinnedEventIds: type: array + nullable: true items: type: string pinnedEventsSaveObject: type: array + nullable: true items: $ref: '#/components/schemas/PinnedEvent' - savedObjectId: - type: string - version: - type: string + ResolvedTimeline: + type: object + required: [timeline, outcome] + properties: + timeline: + $ref: '#/components/schemas/TimelineSavedToReturnObject' + outcome: + $ref: '#/components/schemas/SavedObjectResolveOutcome' + alias_target_id: + type: string + alias_purpose: + $ref: '#/components/schemas/SavedObjectResolveAliasPurpose' + SavedObjectResolveOutcome: + type: string + enum: + - exactMatch + - aliasMatch + - conflict + SavedObjectResolveAliasPurpose: + type: string + enum: + - savedObjectConversion + - savedObjectImport FavoriteTimelineResponse: type: object - required: - - savedObjectId - - version + required: [savedObjectId, version] properties: savedObjectId: type: string @@ -209,35 +243,58 @@ components: type: array items: $ref: '#/components/schemas/FavoriteTimelineResult' + PersistTimelineResponse: + type: object + required: [data] + properties: + data: + type: object + required: [persistTimeline] + properties: + persistTimeline: + type: object + required: [timeline] + properties: + timeline: + $ref: '#/components/schemas/TimelineResponse' ColumnHeaderResult: type: object properties: aggregatable: type: boolean + nullable: true category: type: string + nullable: true columnHeaderType: type: string + nullable: true description: type: string + nullable: true example: - oneOf: - - type: string - - type: number + type: string + nullable: true indexes: type: array + nullable: true items: type: string id: type: string + nullable: true name: type: string + nullable: true placeholder: type: string + nullable: true searchable: type: boolean + nullable: true type: type: string + nullable: true QueryMatchResult: type: object properties: @@ -248,8 +305,13 @@ components: type: string nullable: true value: - type: string - nullable: true + oneOf: + - type: string + nullable: true + - type: array + nullable: true + items: + type: string displayValue: type: string nullable: true @@ -305,6 +367,10 @@ components: nullable: true queryMatch: $ref: '#/components/schemas/QueryMatchResult' + nullable: true + type: + $ref: '#/components/schemas/DataProviderType' + nullable: true BareNoteWithoutExternalRefs: type: object properties: @@ -419,42 +485,60 @@ components: type: object properties: exists: - type: boolean + type: string + nullable: true meta: type: object + nullable: true properties: alias: type: string + nullable: true controlledBy: type: string + nullable: true disabled: type: boolean + nullable: true field: type: string + nullable: true formattedValue: type: string + nullable: true index: type: string + nullable: true key: type: string + nullable: true negate: type: boolean + nullable: true params: type: string + nullable: true type: type: string + nullable: true value: type: string + nullable: true match_all: type: string + nullable: true missing: type: string + nullable: true query: type: string + nullable: true range: type: string + nullable: true script: type: string + nullable: true SerializedFilterQueryResult: type: object properties: @@ -531,6 +615,11 @@ components: - description - updated - created + SortDirection: + type: string + enum: + - asc + - desc TimelineStatus: type: string enum: @@ -544,6 +633,7 @@ components: allOf: - $ref: '#/components/schemas/SavedTimeline' - type: object + required: [savedObjectId, version, pinnedEventIds, eventNotes, globalNotes] properties: savedObjectId: type: string @@ -551,21 +641,56 @@ components: version: type: string nullable: true - globalNotes: - nullable: true + pinnedEventIds: type: array + nullable: true items: - $ref: '#/components/schemas/BareNote' + type: string eventNotes: + type: array nullable: true + items: + $ref: '#/components/schemas/BareNote' + globalNotes: type: array + nullable: true items: $ref: '#/components/schemas/BareNote' - pinnedEventIds: + TimelineSavedToReturnObject: + allOf: + - $ref: '#/components/schemas/SavedTimeline' + - type: object + required: [savedObjectId, version] + properties: + savedObjectId: + type: string + version: + type: string + eventIdToNoteIds: + type: array nullable: true + items: + $ref: '#/components/schemas/Note' + notes: + type: array + nullable: true + items: + $ref: '#/components/schemas/Note' + noteIds: + type: array + nullable: true + items: + type: string + pinnedEventIds: type: array + nullable: true items: type: string + pinnedEventsSaveObject: + type: array + nullable: true + items: + $ref: '#/components/schemas/PinnedEvent' ImportTimelineResult: type: object properties: @@ -591,46 +716,19 @@ components: type: string status_code: type: number - ExportedTimelines: - allOf: - - $ref: '#/components/schemas/SavedTimeline' + TimelineErrorResponse: + oneOf: - type: object + required: [message, status_code] properties: - globalNotes: - type: array - items: - $ref: '#/components/schemas/Note' - eventNotes: - type: array - items: - $ref: '#/components/schemas/Note' - pinnedEventIds: - type: array - items: - type: string - Readable: - type: object - properties: - _maxListeners: - type: object - additionalProperties: true - _readableState: - type: object - additionalProperties: true - _read: - type: object - additionalProperties: true - readable: - type: boolean - _events: - type: object - additionalProperties: true - _eventsCount: - type: number - _data: - type: object - additionalProperties: true - _position: - type: number - _encoding: - type: string + message: + type: string + status_code: + type: number + - type: object + required: [message, statusCode] + properties: + message: + type: string + statusCode: + type: number diff --git a/x-pack/plugins/security_solution/common/api/timeline/patch_timelines/patch_timeline_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/patch_timelines/patch_timeline_route.gen.ts index d0f2befe6b338..622c56312e21a 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/patch_timelines/patch_timeline_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/patch_timelines/patch_timeline_route.gen.ts @@ -16,7 +16,7 @@ import { z } from '@kbn/zod'; -import { SavedTimeline, TimelineResponse } from '../model/components.gen'; +import { SavedTimeline, PersistTimelineResponse } from '../model/components.gen'; export type PatchTimelineRequestBody = z.infer; export const PatchTimelineRequestBody = z.object({ @@ -27,10 +27,4 @@ export const PatchTimelineRequestBody = z.object({ export type PatchTimelineRequestBodyInput = z.input; export type PatchTimelineResponse = z.infer; -export const PatchTimelineResponse = z.object({ - data: z.object({ - persistTimeline: z.object({ - timeline: TimelineResponse, - }), - }), -}); +export const PatchTimelineResponse = PersistTimelineResponse; diff --git a/x-pack/plugins/security_solution/common/api/timeline/patch_timelines/patch_timeline_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/patch_timelines/patch_timeline_route.schema.yaml index 31ff7d8312673..6b1c05d32995c 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/patch_timelines/patch_timeline_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/patch_timelines/patch_timeline_route.schema.yaml @@ -2,13 +2,6 @@ openapi: 3.0.0 info: title: Elastic Security - Timeline - Patch Timeline API version: '2023-10-31' -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/timeline: patch: @@ -42,19 +35,7 @@ paths: content: application/json: schema: - type: object - required: [data] - properties: - data: - type: object - required: [persistTimeline] - properties: - persistTimeline: - type: object - required: [timeline] - properties: - timeline: - $ref: '../model/components.schema.yaml#/components/schemas/TimelineResponse' + $ref: '../model/components.schema.yaml#/components/schemas/PersistTimelineResponse' '405': description: Indicates that the user does not have the required access to create a draft Timeline. content: diff --git a/x-pack/plugins/security_solution/common/api/timeline/patch_timelines/patch_timelines_schema.ts b/x-pack/plugins/security_solution/common/api/timeline/patch_timelines/patch_timelines_schema.ts deleted file mode 100644 index 149dc24480d2d..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/patch_timelines/patch_timelines_schema.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as rt from 'io-ts'; - -import type { ResponseTimeline } from '../model/api'; -import { SavedTimelineRuntimeType } from '../model/api'; -import { unionWithNullType } from '../../../utility_types'; - -export const patchTimelineSchema = rt.type({ - timeline: SavedTimelineRuntimeType, - timelineId: unionWithNullType(rt.string), - version: unionWithNullType(rt.string), -}); - -export interface PatchTimelinesResponse { - data: { - persistTimeline: ResponseTimeline; - }; -} diff --git a/x-pack/plugins/security_solution/common/api/timeline/persist_favorite/persist_favorite_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/persist_favorite/persist_favorite_route.schema.yaml index 9ad4d03901d70..3a57dd066d3b3 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/persist_favorite/persist_favorite_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/persist_favorite/persist_favorite_route.schema.yaml @@ -2,13 +2,6 @@ openapi: 3.0.0 info: title: Elastic Security - Timeline - Favorite API version: '2023-10-31' -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/timeline/_favorite: patch: diff --git a/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.schema.yaml index 4ca14d2b15b13..640e75171c613 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.schema.yaml @@ -5,13 +5,6 @@ info: externalDocs: url: https://www.elastic.co/guide/en/security/current/timeline-api-update.html description: Documentation -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/note: patch: diff --git a/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.schema.yaml index 4ef83ebe04183..3b697e957ad89 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.schema.yaml @@ -5,13 +5,6 @@ info: externalDocs: url: https://www.elastic.co/guide/en/security/current/_pin_an_event_to_an_existing_timeline.html description: Documentation -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/pinned_event: patch: diff --git a/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.ts b/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.ts deleted file mode 100644 index 31c3233e9b8ca..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as runtimeTypes from 'io-ts'; -import { unionWithNullType } from '../../../utility_types'; - -/* - * Pinned Event Types - * TODO: remove these when the timeline types are moved to zod - */ -const BarePinnedEventType = runtimeTypes.intersection([ - runtimeTypes.type({ - timelineId: runtimeTypes.string, - eventId: runtimeTypes.string, - }), - runtimeTypes.partial({ - created: unionWithNullType(runtimeTypes.number), - createdBy: unionWithNullType(runtimeTypes.string), - updated: unionWithNullType(runtimeTypes.number), - updatedBy: unionWithNullType(runtimeTypes.string), - }), -]); - -export const PinnedEventRuntimeType = runtimeTypes.intersection([ - runtimeTypes.type({ - pinnedEventId: runtimeTypes.string, - version: runtimeTypes.string, - }), - BarePinnedEventType, -]); diff --git a/x-pack/plugins/security_solution/common/api/timeline/resolve_timeline/resolve_timeline_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/resolve_timeline/resolve_timeline_route.gen.ts index 2c3b966bfb1b4..d4c79eec50b26 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/resolve_timeline/resolve_timeline_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/resolve_timeline/resolve_timeline_route.gen.ts @@ -16,7 +16,7 @@ import { z } from '@kbn/zod'; -import { TimelineResponse } from '../model/components.gen'; +import { ResolvedTimeline } from '../model/components.gen'; export type ResolveTimelineRequestQuery = z.infer; export const ResolveTimelineRequestQuery = z.object({ @@ -32,8 +32,9 @@ export const ResolveTimelineRequestQuery = z.object({ export type ResolveTimelineRequestQueryInput = z.input; export type ResolveTimelineResponse = z.infer; -export const ResolveTimelineResponse = z.object({ - data: z.object({ - getOneTimeline: TimelineResponse.nullable(), +export const ResolveTimelineResponse = z.union([ + z.object({ + data: ResolvedTimeline, }), -}); + z.object({}).strict(), +]); diff --git a/x-pack/plugins/security_solution/common/api/timeline/resolve_timeline/resolve_timeline_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/resolve_timeline/resolve_timeline_route.schema.yaml index ee26ac4a97896..b06969e28cad4 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/resolve_timeline/resolve_timeline_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/resolve_timeline/resolve_timeline_route.schema.yaml @@ -2,13 +2,6 @@ openapi: 3.0.0 info: title: Elastic Security - Timeline - Resolve Timeline API version: '2023-10-31' -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' paths: /api/timeline/resolve: get: @@ -35,16 +28,15 @@ paths: content: application/json: schema: - type: object - required: [data] - properties: - data: - type: object - required: [getOneTimeline] + oneOf: + - type: object + required: [data] properties: - getOneTimeline: - $ref: '../model/components.schema.yaml#/components/schemas/TimelineResponse' - nullable: true + data: + $ref: '../model/components.schema.yaml#/components/schemas/ResolvedTimeline' + - type: object + additionalProperties: false + '400': description: The request is missing parameters '404': diff --git a/x-pack/plugins/security_solution/common/api/timeline/routes.ts b/x-pack/plugins/security_solution/common/api/timeline/routes.ts index 9d3aec839a5c1..70b339c92f197 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/routes.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/routes.ts @@ -17,7 +17,10 @@ export { } from './persist_note/persist_note_route.gen'; export { DeleteNoteRequestBody, DeleteNoteResponse } from './delete_note/delete_note_route.gen'; -export { CleanDraftTimelinesRequestBody } from './clean_draft_timelines/clean_draft_timelines_route.gen'; +export { + CleanDraftTimelinesResponse, + CleanDraftTimelinesRequestBody, +} from './clean_draft_timelines/clean_draft_timelines_route.gen'; export { ExportTimelinesRequestQuery, @@ -40,3 +43,48 @@ export { GetNotesResponse, GetNotesResult, } from './get_notes/get_notes_route.gen'; + +export { + CopyTimelineRequestBody, + CopyTimelineResponse, +} from './copy_timeline/copy_timeline_route.gen'; + +export { + CreateTimelinesRequestBody, + CreateTimelinesResponse, +} from './create_timelines/create_timelines_route.gen'; + +export { + PatchTimelineRequestBody, + PatchTimelineResponse, +} from './patch_timelines/patch_timeline_route.gen'; + +export { + ImportTimelinesRequestBody, + ImportTimelinesResponse, +} from './import_timelines/import_timelines_route.gen'; + +export { + InstallPrepackedTimelinesRequestBody, + InstallPrepackedTimelinesResponse, +} from './install_prepackaged_timelines/install_prepackaged_timelines_route.gen'; + +export { + GetDraftTimelinesRequestQuery, + GetDraftTimelinesResponse, +} from './get_draft_timelines/get_draft_timelines_route.gen'; + +export { + ResolveTimelineRequestQuery, + ResolveTimelineResponse, +} from './resolve_timeline/resolve_timeline_route.gen'; + +export { + GetTimelineRequestQuery, + GetTimelineResponse, +} from './get_timeline/get_timeline_route.gen'; + +export { + GetTimelinesRequestQuery, + GetTimelinesResponse, +} from './get_timelines/get_timelines_route.gen'; diff --git a/x-pack/plugins/security_solution/common/search_strategy/timeline/index.ts b/x-pack/plugins/security_solution/common/search_strategy/timeline/index.ts index ff9613503e8e3..7fe70febe4e2c 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/timeline/index.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/timeline/index.ts @@ -5,13 +5,7 @@ * 2.0. */ -import type { SortField, Maybe } from '../common'; -import type { - DataProviderType, - TimelineType, - TimelineStatus, - RowRendererId, -} from '../../api/timeline'; +import type { SortField } from '../common'; export * from './events'; @@ -20,122 +14,6 @@ export interface TimelineRequestSortField extends SortField; - category?: Maybe; - columnHeaderType?: Maybe; - description?: Maybe; - example?: Maybe; - indexes?: Maybe; - id?: Maybe; - name?: Maybe; - placeholder?: Maybe; - searchable?: Maybe; - type?: Maybe; -} - -export interface QueryMatchInput { - field?: Maybe; - - displayField?: Maybe; - - value?: Maybe; - - displayValue?: Maybe; - - operator?: Maybe; -} - -export interface DataProviderInput { - id?: Maybe; - name?: Maybe; - enabled?: Maybe; - excluded?: Maybe; - kqlQuery?: Maybe; - queryMatch?: Maybe; - and?: Maybe; - type?: Maybe; -} - -export interface EqlOptionsInput { - eventCategoryField?: Maybe; - tiebreakerField?: Maybe; - timestampField?: Maybe; - query?: Maybe; - size?: Maybe; -} - -export interface FilterMetaTimelineInput { - alias?: Maybe; - controlledBy?: Maybe; - disabled?: Maybe; - field?: Maybe; - formattedValue?: Maybe; - index?: Maybe; - key?: Maybe; - negate?: Maybe; - params?: Maybe; - type?: Maybe; - value?: Maybe; -} - -export interface FilterTimelineInput { - exists?: Maybe; - meta?: Maybe; - match_all?: Maybe; - missing?: Maybe; - query?: Maybe; - range?: Maybe; - script?: Maybe; -} - -export interface SerializedFilterQueryInput { - filterQuery?: Maybe; -} - -export interface SerializedKueryQueryInput { - kuery?: Maybe; - serializedQuery?: Maybe; -} - -export interface KueryFilterQueryInput { - kind?: Maybe; - expression?: Maybe; -} - -export interface DateRangePickerInput { - start?: Maybe; - end?: Maybe; -} - -export interface SortTimelineInput { - columnId?: Maybe; - sortDirection?: Maybe; -} - -export interface TimelineInput { - columns?: Maybe; - dataProviders?: Maybe; - dataViewId?: Maybe; - description?: Maybe; - eqlOptions?: Maybe; - eventType?: Maybe; - excludedRowRendererIds?: Maybe; - filters?: Maybe; - kqlMode?: Maybe; - kqlQuery?: Maybe; - indexNames?: Maybe; - title?: Maybe; - templateTimelineId?: Maybe; - templateTimelineVersion?: Maybe; - timelineType?: Maybe; - dateRange?: Maybe; - savedQueryId?: Maybe; - sort?: Maybe; - status?: Maybe; - savedSearchId: Maybe; -} - export enum FlowDirection { uniDirectional = 'uniDirectional', biDirectional = 'biDirectional', diff --git a/x-pack/plugins/security_solution/common/timelines/zod_errors.ts b/x-pack/plugins/security_solution/common/timelines/zod_errors.ts new file mode 100644 index 0000000000000..7ef5606a4dcfb --- /dev/null +++ b/x-pack/plugins/security_solution/common/timelines/zod_errors.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. + */ + +import type { ZodError, ZodType } from '@kbn/zod'; +import { stringifyZodError } from '@kbn/zod-helpers'; +import { type Either, fold, left, right } from 'fp-ts/lib/Either'; +import { identity } from 'fp-ts/lib/function'; +import { pipe } from 'fp-ts/lib/pipeable'; + +type ErrorFactory = (message: string) => Error; + +const throwErrors = (createError: ErrorFactory) => (errors: ZodError) => { + throw createError(stringifyZodError(errors)); +}; + +const parseRuntimeType = + (zodType: ZodType) => + (v: unknown): Either, T> => { + const result = zodType.safeParse(v); + return result.success ? right(result.data) : left(result.error); + }; + +export const parseOrThrowErrorFactory = + (createError: ErrorFactory) => (runtimeType: ZodType) => (inputValue: unknown) => + pipe(parseRuntimeType(runtimeType)(inputValue), fold(throwErrors(createError), identity)); diff --git a/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_timeline_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_timeline_api_2023_10_31.bundled.schema.yaml index 2adc4e7009b1d..e36af57a2b3e9 100644 --- a/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_timeline_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_timeline_api_2023_10_31.bundled.schema.yaml @@ -268,18 +268,20 @@ paths: content: application/json: schema: - type: object - properties: - data: - type: object + oneOf: + - type: object properties: - getOneTimeline: - $ref: '#/components/schemas/TimelineResponse' - nullable: true + data: + type: object + properties: + getOneTimeline: + $ref: '#/components/schemas/TimelineResponse' + required: + - getOneTimeline required: - - getOneTimeline - required: - - data + - data + - additionalProperties: false + type: object description: Indicates that the (template) Timeline was found and returned. summary: Get Timeline or Timeline template details tags: @@ -316,22 +318,7 @@ paths: content: application/json: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: '#/components/schemas/TimelineResponse' - required: - - timeline - required: - - persistTimeline - required: - - data + $ref: '#/components/schemas/PersistTimelineResponse' description: >- Indicates that the draft Timeline was successfully created. In the event the user already has a draft Timeline, the existing draft @@ -393,20 +380,7 @@ paths: content: application/json: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: '#/components/schemas/TimelineResponse' - required: - - persistTimeline - required: - - data + $ref: '#/components/schemas/PersistTimelineResponse' description: Indicates the Timeline was successfully created. '405': content: @@ -423,6 +397,36 @@ paths: tags: - Security Timeline API - access:securitySolution + /api/timeline/_copy: + get: + description: | + Copies and returns a timeline or timeline template. + operationId: CopyTimeline + requestBody: + content: + application/json: + schema: + type: object + properties: + timeline: + $ref: '#/components/schemas/SavedTimeline' + timelineIdToCopy: + type: string + required: + - timeline + - timelineIdToCopy + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PersistTimelineResponse' + description: Indicates that the timeline has been successfully copied. + summary: Copies timeline or timeline template + tags: + - Security Timeline API + - access:securitySolution /api/timeline/_draft: get: description: >- @@ -441,22 +445,7 @@ paths: content: application/json: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: '#/components/schemas/TimelineResponse' - required: - - timeline - required: - - persistTimeline - required: - - data + $ref: '#/components/schemas/PersistTimelineResponse' description: Indicates that the draft Timeline was successfully retrieved. '403': content: @@ -518,22 +507,7 @@ paths: content: application/json: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: '#/components/schemas/TimelineResponse' - required: - - timeline - required: - - persistTimeline - required: - - data + $ref: '#/components/schemas/PersistTimelineResponse' description: >- Indicates that the draft Timeline was successfully created. In the event the user already has a draft Timeline, the existing draft @@ -688,28 +662,14 @@ paths: schema: type: object properties: - file: - allOf: - - $ref: '#/components/schemas/Readable' - - type: object - properties: - hapi: - type: object - properties: - filename: - type: string - headers: - type: object - isImmutable: - enum: - - 'true' - - 'false' - type: string - required: - - filename - - headers - required: - - hapi + file: {} + isImmutable: + enum: + - 'true' + - 'false' + type: string + required: + - file description: The Timelines to import as a readable stream. required: true responses: @@ -717,12 +677,7 @@ paths: content: application/json: schema: - type: object - properties: - data: - $ref: '#/components/schemas/ImportTimelineResult' - required: - - data + $ref: '#/components/schemas/ImportTimelineResult' description: Indicates the import of Timelines was successful. '400': content: @@ -781,7 +736,8 @@ paths: properties: prepackagedTimelines: items: - $ref: '#/components/schemas/SavedTimeline' + $ref: '#/components/schemas/TimelineSavedToReturnObject' + nullable: true type: array timelinesToInstall: items: @@ -804,12 +760,7 @@ paths: content: application/json: schema: - type: object - properties: - data: - $ref: '#/components/schemas/ImportTimelineResult' - required: - - data + $ref: '#/components/schemas/ImportTimelineResult' description: Indicates the installation of prepackaged Timelines was successful. '500': content: @@ -847,18 +798,15 @@ paths: content: application/json: schema: - type: object - properties: - data: - type: object + oneOf: + - type: object properties: - getOneTimeline: - $ref: '#/components/schemas/TimelineResponse' - nullable: true + data: + $ref: '#/components/schemas/ResolvedTimeline' required: - - getOneTimeline - required: - - data + - data + - additionalProperties: false + type: object description: The (template) Timeline has been found '400': description: The request is missing parameters @@ -927,35 +875,25 @@ paths: schema: type: object properties: - data: - type: object - properties: - customTemplateTimelineCount: - type: number - defaultTimelineCount: - type: number - elasticTemplateTimelineCount: - type: number - favoriteCount: - type: number - templateTimelineCount: - type: number - timelines: - items: - $ref: '#/components/schemas/TimelineResponse' - type: array - totalCount: - type: number - required: - - timelines - - totalCount - - defaultTimelineCount - - templateTimelineCount - - favoriteCount - - elasticTemplateTimelineCount - - customTemplateTimelineCount + customTemplateTimelineCount: + type: number + defaultTimelineCount: + type: number + elasticTemplateTimelineCount: + type: number + favoriteCount: + type: number + templateTimelineCount: + type: number + timeline: + items: + $ref: '#/components/schemas/TimelineResponse' + type: array + totalCount: + type: number required: - - data + - timeline + - totalCount description: Indicates that the (template) Timelines were found and returned. '400': content: @@ -1025,30 +963,39 @@ components: type: object properties: aggregatable: + nullable: true type: boolean category: + nullable: true type: string columnHeaderType: + nullable: true type: string description: + nullable: true type: string example: - oneOf: - - type: string - - type: number + nullable: true + type: string id: + nullable: true type: string indexes: items: type: string + nullable: true type: array name: + nullable: true type: string placeholder: + nullable: true type: string searchable: + nullable: true type: boolean type: + nullable: true type: string DataProviderQueryMatch: type: object @@ -1070,6 +1017,10 @@ components: type: string queryMatch: $ref: '#/components/schemas/QueryMatchResult' + nullable: true + type: + $ref: '#/components/schemas/DataProviderType' + nullable: true DataProviderResult: type: object properties: @@ -1157,41 +1108,59 @@ components: type: object properties: exists: - type: boolean + nullable: true + type: string match_all: + nullable: true type: string meta: + nullable: true type: object properties: alias: + nullable: true type: string controlledBy: + nullable: true type: string disabled: + nullable: true type: boolean field: + nullable: true type: string formattedValue: + nullable: true type: string index: + nullable: true type: string key: + nullable: true type: string negate: + nullable: true type: boolean params: + nullable: true type: string type: + nullable: true type: string value: + nullable: true type: string missing: + nullable: true type: string query: + nullable: true type: string range: + nullable: true type: string script: + nullable: true type: string GetNotesResult: type: object @@ -1256,6 +1225,12 @@ components: version: nullable: true type: string + required: + - savedObjectId + - version + - pinnedEventIds + - eventNotes + - globalNotes Note: allOf: - $ref: '#/components/schemas/BareNote' @@ -1275,6 +1250,23 @@ components: - $ref: '#/components/schemas/PinnedEventBaseResponseBody' - nullable: true type: object + PersistTimelineResponse: + type: object + properties: + data: + type: object + properties: + persistTimeline: + type: object + properties: + timeline: + $ref: '#/components/schemas/TimelineResponse' + required: + - timeline + required: + - persistTimeline + required: + - data PinnedEvent: allOf: - $ref: '#/components/schemas/BarePinnedEvent' @@ -1312,34 +1304,27 @@ components: nullable: true type: string value: - nullable: true - type: string - Readable: + oneOf: + - nullable: true + type: string + - items: + type: string + nullable: true + type: array + ResolvedTimeline: type: object properties: - _data: - additionalProperties: true - type: object - _encoding: + alias_purpose: + $ref: '#/components/schemas/SavedObjectResolveAliasPurpose' + alias_target_id: type: string - _events: - additionalProperties: true - type: object - _eventsCount: - type: number - _maxListeners: - additionalProperties: true - type: object - _position: - type: number - _read: - additionalProperties: true - type: object - _readableState: - additionalProperties: true - type: object - readable: - type: boolean + outcome: + $ref: '#/components/schemas/SavedObjectResolveOutcome' + timeline: + $ref: '#/components/schemas/TimelineSavedToReturnObject' + required: + - timeline + - outcome ResponseNote: type: object properties: @@ -1374,6 +1359,17 @@ components: - threat_match - zeek type: string + SavedObjectResolveAliasPurpose: + enum: + - savedObjectConversion + - savedObjectImport + type: string + SavedObjectResolveOutcome: + enum: + - exactMatch + - aliasMatch + - conflict + type: string SavedTimeline: type: object properties: @@ -1402,12 +1398,16 @@ components: properties: end: oneOf: - - type: string - - type: number + - nullable: true + type: string + - nullable: true + type: number start: oneOf: - - type: string - - type: number + - nullable: true + type: string + - nullable: true + type: number description: nullable: true type: string @@ -1496,6 +1496,18 @@ components: updatedBy: nullable: true type: string + SavedTimelineWithSavedObjectId: + allOf: + - $ref: '#/components/schemas/SavedTimeline' + - type: object + properties: + savedObjectId: + type: string + version: + type: string + required: + - savedObjectId + - version SerializedFilterQueryResult: type: object properties: @@ -1545,27 +1557,63 @@ components: TimelineResponse: allOf: - $ref: '#/components/schemas/SavedTimeline' + - $ref: '#/components/schemas/SavedTimelineWithSavedObjectId' - type: object properties: eventIdToNoteIds: items: $ref: '#/components/schemas/Note' + nullable: true type: array noteIds: items: type: string + nullable: true type: array notes: items: $ref: '#/components/schemas/Note' + nullable: true type: array pinnedEventIds: items: type: string + nullable: true type: array pinnedEventsSaveObject: items: $ref: '#/components/schemas/PinnedEvent' + nullable: true + type: array + TimelineSavedToReturnObject: + allOf: + - $ref: '#/components/schemas/SavedTimeline' + - type: object + properties: + eventIdToNoteIds: + items: + $ref: '#/components/schemas/Note' + nullable: true + type: array + noteIds: + items: + type: string + nullable: true + type: array + notes: + items: + $ref: '#/components/schemas/Note' + nullable: true + type: array + pinnedEventIds: + items: + type: string + nullable: true + type: array + pinnedEventsSaveObject: + items: + $ref: '#/components/schemas/PinnedEvent' + nullable: true type: array savedObjectId: type: string diff --git a/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_timeline_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_timeline_api_2023_10_31.bundled.schema.yaml index 633a0fd041969..818b83d7b85dd 100644 --- a/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_timeline_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_timeline_api_2023_10_31.bundled.schema.yaml @@ -268,18 +268,20 @@ paths: content: application/json: schema: - type: object - properties: - data: - type: object + oneOf: + - type: object properties: - getOneTimeline: - $ref: '#/components/schemas/TimelineResponse' - nullable: true + data: + type: object + properties: + getOneTimeline: + $ref: '#/components/schemas/TimelineResponse' + required: + - getOneTimeline required: - - getOneTimeline - required: - - data + - data + - additionalProperties: false + type: object description: Indicates that the (template) Timeline was found and returned. summary: Get Timeline or Timeline template details tags: @@ -316,22 +318,7 @@ paths: content: application/json: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: '#/components/schemas/TimelineResponse' - required: - - timeline - required: - - persistTimeline - required: - - data + $ref: '#/components/schemas/PersistTimelineResponse' description: >- Indicates that the draft Timeline was successfully created. In the event the user already has a draft Timeline, the existing draft @@ -393,20 +380,7 @@ paths: content: application/json: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: '#/components/schemas/TimelineResponse' - required: - - persistTimeline - required: - - data + $ref: '#/components/schemas/PersistTimelineResponse' description: Indicates the Timeline was successfully created. '405': content: @@ -423,6 +397,36 @@ paths: tags: - Security Timeline API - access:securitySolution + /api/timeline/_copy: + get: + description: | + Copies and returns a timeline or timeline template. + operationId: CopyTimeline + requestBody: + content: + application/json: + schema: + type: object + properties: + timeline: + $ref: '#/components/schemas/SavedTimeline' + timelineIdToCopy: + type: string + required: + - timeline + - timelineIdToCopy + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PersistTimelineResponse' + description: Indicates that the timeline has been successfully copied. + summary: Copies timeline or timeline template + tags: + - Security Timeline API + - access:securitySolution /api/timeline/_draft: get: description: >- @@ -441,22 +445,7 @@ paths: content: application/json: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: '#/components/schemas/TimelineResponse' - required: - - timeline - required: - - persistTimeline - required: - - data + $ref: '#/components/schemas/PersistTimelineResponse' description: Indicates that the draft Timeline was successfully retrieved. '403': content: @@ -518,22 +507,7 @@ paths: content: application/json: schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: '#/components/schemas/TimelineResponse' - required: - - timeline - required: - - persistTimeline - required: - - data + $ref: '#/components/schemas/PersistTimelineResponse' description: >- Indicates that the draft Timeline was successfully created. In the event the user already has a draft Timeline, the existing draft @@ -688,28 +662,14 @@ paths: schema: type: object properties: - file: - allOf: - - $ref: '#/components/schemas/Readable' - - type: object - properties: - hapi: - type: object - properties: - filename: - type: string - headers: - type: object - isImmutable: - enum: - - 'true' - - 'false' - type: string - required: - - filename - - headers - required: - - hapi + file: {} + isImmutable: + enum: + - 'true' + - 'false' + type: string + required: + - file description: The Timelines to import as a readable stream. required: true responses: @@ -717,12 +677,7 @@ paths: content: application/json: schema: - type: object - properties: - data: - $ref: '#/components/schemas/ImportTimelineResult' - required: - - data + $ref: '#/components/schemas/ImportTimelineResult' description: Indicates the import of Timelines was successful. '400': content: @@ -781,7 +736,8 @@ paths: properties: prepackagedTimelines: items: - $ref: '#/components/schemas/SavedTimeline' + $ref: '#/components/schemas/TimelineSavedToReturnObject' + nullable: true type: array timelinesToInstall: items: @@ -804,12 +760,7 @@ paths: content: application/json: schema: - type: object - properties: - data: - $ref: '#/components/schemas/ImportTimelineResult' - required: - - data + $ref: '#/components/schemas/ImportTimelineResult' description: Indicates the installation of prepackaged Timelines was successful. '500': content: @@ -847,18 +798,15 @@ paths: content: application/json: schema: - type: object - properties: - data: - type: object + oneOf: + - type: object properties: - getOneTimeline: - $ref: '#/components/schemas/TimelineResponse' - nullable: true + data: + $ref: '#/components/schemas/ResolvedTimeline' required: - - getOneTimeline - required: - - data + - data + - additionalProperties: false + type: object description: The (template) Timeline has been found '400': description: The request is missing parameters @@ -927,35 +875,25 @@ paths: schema: type: object properties: - data: - type: object - properties: - customTemplateTimelineCount: - type: number - defaultTimelineCount: - type: number - elasticTemplateTimelineCount: - type: number - favoriteCount: - type: number - templateTimelineCount: - type: number - timelines: - items: - $ref: '#/components/schemas/TimelineResponse' - type: array - totalCount: - type: number - required: - - timelines - - totalCount - - defaultTimelineCount - - templateTimelineCount - - favoriteCount - - elasticTemplateTimelineCount - - customTemplateTimelineCount + customTemplateTimelineCount: + type: number + defaultTimelineCount: + type: number + elasticTemplateTimelineCount: + type: number + favoriteCount: + type: number + templateTimelineCount: + type: number + timeline: + items: + $ref: '#/components/schemas/TimelineResponse' + type: array + totalCount: + type: number required: - - data + - timeline + - totalCount description: Indicates that the (template) Timelines were found and returned. '400': content: @@ -1025,30 +963,39 @@ components: type: object properties: aggregatable: + nullable: true type: boolean category: + nullable: true type: string columnHeaderType: + nullable: true type: string description: + nullable: true type: string example: - oneOf: - - type: string - - type: number + nullable: true + type: string id: + nullable: true type: string indexes: items: type: string + nullable: true type: array name: + nullable: true type: string placeholder: + nullable: true type: string searchable: + nullable: true type: boolean type: + nullable: true type: string DataProviderQueryMatch: type: object @@ -1070,6 +1017,10 @@ components: type: string queryMatch: $ref: '#/components/schemas/QueryMatchResult' + nullable: true + type: + $ref: '#/components/schemas/DataProviderType' + nullable: true DataProviderResult: type: object properties: @@ -1157,41 +1108,59 @@ components: type: object properties: exists: - type: boolean + nullable: true + type: string match_all: + nullable: true type: string meta: + nullable: true type: object properties: alias: + nullable: true type: string controlledBy: + nullable: true type: string disabled: + nullable: true type: boolean field: + nullable: true type: string formattedValue: + nullable: true type: string index: + nullable: true type: string key: + nullable: true type: string negate: + nullable: true type: boolean params: + nullable: true type: string type: + nullable: true type: string value: + nullable: true type: string missing: + nullable: true type: string query: + nullable: true type: string range: + nullable: true type: string script: + nullable: true type: string GetNotesResult: type: object @@ -1256,6 +1225,12 @@ components: version: nullable: true type: string + required: + - savedObjectId + - version + - pinnedEventIds + - eventNotes + - globalNotes Note: allOf: - $ref: '#/components/schemas/BareNote' @@ -1275,6 +1250,23 @@ components: - $ref: '#/components/schemas/PinnedEventBaseResponseBody' - nullable: true type: object + PersistTimelineResponse: + type: object + properties: + data: + type: object + properties: + persistTimeline: + type: object + properties: + timeline: + $ref: '#/components/schemas/TimelineResponse' + required: + - timeline + required: + - persistTimeline + required: + - data PinnedEvent: allOf: - $ref: '#/components/schemas/BarePinnedEvent' @@ -1312,34 +1304,27 @@ components: nullable: true type: string value: - nullable: true - type: string - Readable: + oneOf: + - nullable: true + type: string + - items: + type: string + nullable: true + type: array + ResolvedTimeline: type: object properties: - _data: - additionalProperties: true - type: object - _encoding: + alias_purpose: + $ref: '#/components/schemas/SavedObjectResolveAliasPurpose' + alias_target_id: type: string - _events: - additionalProperties: true - type: object - _eventsCount: - type: number - _maxListeners: - additionalProperties: true - type: object - _position: - type: number - _read: - additionalProperties: true - type: object - _readableState: - additionalProperties: true - type: object - readable: - type: boolean + outcome: + $ref: '#/components/schemas/SavedObjectResolveOutcome' + timeline: + $ref: '#/components/schemas/TimelineSavedToReturnObject' + required: + - timeline + - outcome ResponseNote: type: object properties: @@ -1374,6 +1359,17 @@ components: - threat_match - zeek type: string + SavedObjectResolveAliasPurpose: + enum: + - savedObjectConversion + - savedObjectImport + type: string + SavedObjectResolveOutcome: + enum: + - exactMatch + - aliasMatch + - conflict + type: string SavedTimeline: type: object properties: @@ -1402,12 +1398,16 @@ components: properties: end: oneOf: - - type: string - - type: number + - nullable: true + type: string + - nullable: true + type: number start: oneOf: - - type: string - - type: number + - nullable: true + type: string + - nullable: true + type: number description: nullable: true type: string @@ -1496,6 +1496,18 @@ components: updatedBy: nullable: true type: string + SavedTimelineWithSavedObjectId: + allOf: + - $ref: '#/components/schemas/SavedTimeline' + - type: object + properties: + savedObjectId: + type: string + version: + type: string + required: + - savedObjectId + - version SerializedFilterQueryResult: type: object properties: @@ -1545,27 +1557,63 @@ components: TimelineResponse: allOf: - $ref: '#/components/schemas/SavedTimeline' + - $ref: '#/components/schemas/SavedTimelineWithSavedObjectId' - type: object properties: eventIdToNoteIds: items: $ref: '#/components/schemas/Note' + nullable: true type: array noteIds: items: type: string + nullable: true type: array notes: items: $ref: '#/components/schemas/Note' + nullable: true type: array pinnedEventIds: items: type: string + nullable: true type: array pinnedEventsSaveObject: items: $ref: '#/components/schemas/PinnedEvent' + nullable: true + type: array + TimelineSavedToReturnObject: + allOf: + - $ref: '#/components/schemas/SavedTimeline' + - type: object + properties: + eventIdToNoteIds: + items: + $ref: '#/components/schemas/Note' + nullable: true + type: array + noteIds: + items: + type: string + nullable: true + type: array + notes: + items: + $ref: '#/components/schemas/Note' + nullable: true + type: array + pinnedEventIds: + items: + type: string + nullable: true + type: array + pinnedEventsSaveObject: + items: + $ref: '#/components/schemas/PinnedEvent' + nullable: true type: array savedObjectId: type: string diff --git a/x-pack/plugins/security_solution/public/common/mock/timeline_results.ts b/x-pack/plugins/security_solution/public/common/mock/timeline_results.ts index 427285c5f9233..d32891333c7f0 100644 --- a/x-pack/plugins/security_solution/public/common/mock/timeline_results.ts +++ b/x-pack/plugins/security_solution/public/common/mock/timeline_results.ts @@ -9,9 +9,10 @@ import { FilterStateStore } from '@kbn/es-query'; import type { DataTableModel } from '@kbn/securitysolution-data-table'; import { VIEW_SELECTION } from '../../../common/constants'; -import type { TimelineResult } from '../../../common/api/timeline'; import { TimelineId, TimelineTabs } from '../../../common/types/timeline'; +import type { TimelineResponse } from '../../../common/api/timeline'; import { + type ColumnHeaderResult, RowRendererIdEnum, TimelineTypeEnum, TimelineStatusEnum, @@ -1986,9 +1987,11 @@ export const mockDataTableModel: DataTableModel = { }, }; -export const mockGetOneTimelineResult: TimelineResult = { +export const mockGetOneTimelineResult: TimelineResponse = { savedObjectId: 'ef579e40-jibber-jabber', - columns: timelineDefaults.columns.filter((column) => column.id !== 'event.action'), + columns: timelineDefaults.columns.filter( + (column) => column.id !== 'event.action' + ) as ColumnHeaderResult[], dateRange: { start: '2020-03-18T13:46:38.929Z', end: '2020-03-18T13:52:38.929Z' }, description: 'This is a sample rule description', eventType: 'all', diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.tsx index c83fa2bf22211..a2dfef2c43e9f 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.tsx @@ -50,8 +50,8 @@ import { isNewTermsRule, isThresholdRule, } from '../../../../common/detection_engine/utils'; -import type { TimelineResult } from '../../../../common/api/timeline'; import { TimelineId } from '../../../../common/types/timeline'; +import type { TimelineResponse } from '../../../../common/api/timeline'; import { TimelineStatusEnum, TimelineTypeEnum } from '../../../../common/api/timeline'; import type { SendAlertToTimelineActionProps, @@ -69,7 +69,7 @@ import { TimelineEventsQueries } from '../../../../common/search_strategy/timeli import { timelineDefaults } from '../../../timelines/store/defaults'; import { omitTypenameInTimeline, - formatTimelineResultToModel, + formatTimelineResponseToModel, } from '../../../timelines/components/open_timeline/helpers'; import { convertKueryToElasticSearchQuery } from '../../../common/lib/kuery'; import { getField, getFieldKey } from '../../../helpers'; @@ -983,11 +983,15 @@ export const sendAlertToTimelineAction = async ({ ), ]); - const resultingTimeline: TimelineResult = getOr({}, 'data.getOneTimeline', responseTimeline); + const resultingTimeline: TimelineResponse = getOr( + {}, + 'data.getOneTimeline', + responseTimeline + ); const eventData: TimelineEventsDetailsItem[] = eventDataResp.data ?? []; if (!isEmpty(resultingTimeline)) { - const timelineTemplate: TimelineResult = omitTypenameInTimeline(resultingTimeline); - const { timeline, notes } = formatTimelineResultToModel( + const timelineTemplate = omitTypenameInTimeline(resultingTimeline); + const { timeline, notes } = formatTimelineResponseToModel( timelineTemplate, true, timelineTemplate.timelineType ?? TimelineTypeEnum.default diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/helpers.test.ts b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/helpers.test.ts index 397e632a5c04c..a3428ae6f2e1d 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/helpers.test.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/helpers.test.ts @@ -20,12 +20,16 @@ import { isUntitled, omitTypenameInTimeline, useQueryTimelineById, - formatTimelineResultToModel, + formatTimelineResponseToModel, } from './helpers'; import type { OpenTimelineResult } from './types'; import { TimelineId } from '../../../../common/types/timeline'; -import type { RowRendererId } from '../../../../common/api/timeline'; -import { TimelineTypeEnum, TimelineStatusEnum } from '../../../../common/api/timeline'; +import { + TimelineTypeEnum, + TimelineStatusEnum, + type ColumnHeaderResult, + type RowRendererId, +} from '../../../../common/api/timeline'; import { mockTimeline as mockSelectedTimeline, mockTemplate as mockSelectedTemplate, @@ -379,7 +383,7 @@ describe('helpers', () => { ); const timeline = { savedObjectId: 'savedObject-1', - columns: columnsWithoutEventAction, + columns: columnsWithoutEventAction as ColumnHeaderResult[], version: '1', }; @@ -396,7 +400,7 @@ describe('helpers', () => { ); const timeline = { savedObjectId: 'savedObject-1', - columns: columnsWithoutEventAction, + columns: columnsWithoutEventAction as ColumnHeaderResult[], filters: [ { meta: { @@ -568,7 +572,7 @@ describe('helpers', () => { version: '1', status: TimelineStatusEnum.active, timelineType: TimelineTypeEnum.default, - columns: customColumns, + columns: customColumns as ColumnHeaderResult[], }; const newTimeline = defaultTimelineToTimelineModel( @@ -691,7 +695,7 @@ describe('helpers', () => { }); test('Do not override daterange if TimelineStatus is active', () => { - const { timeline } = formatTimelineResultToModel( + const { timeline } = formatTimelineResponseToModel( omitTypenameInTimeline(getOr({}, 'data.timeline', selectedTimeline)), args.duplicate, args.timelineType @@ -744,7 +748,7 @@ describe('helpers', () => { }); test('should not override daterange if TimelineStatus is active', () => { - const { timeline } = formatTimelineResultToModel( + const { timeline } = formatTimelineResponseToModel( omitTypenameInTimeline(getOr({}, 'data.timeline', selectedTimeline)), args.duplicate, args.timelineType @@ -818,7 +822,7 @@ describe('helpers', () => { }); test('override daterange if TimelineStatus is immutable', () => { - const { timeline } = formatTimelineResultToModel( + const { timeline } = formatTimelineResponseToModel( omitTypenameInTimeline(getOr({}, 'data.timeline', template)), args.duplicate, args.timelineType diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/helpers.ts b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/helpers.ts index 81114901c216d..000a7b226561e 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/helpers.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/helpers.ts @@ -14,8 +14,8 @@ import { useCallback } from 'react'; import { useDiscoverInTimelineContext } from '../../../common/components/discover_in_timeline/use_discover_in_timeline_context'; import type { ColumnHeaderOptions } from '../../../../common/types/timeline'; import type { - TimelineResult, - SingleTimelineResolveResponse, + TimelineResponse, + ResolvedTimeline, ColumnHeaderResult, FilterTimelineResult, DataProviderResult, @@ -80,7 +80,7 @@ export const isUntitled = ({ title }: OpenTimelineResult): boolean => const omitTypename = (key: string, value: keyof TimelineModel) => key === '__typename' ? undefined : value; -export const omitTypenameInTimeline = (timeline: TimelineResult): TimelineResult => +export const omitTypenameInTimeline = (timeline: TimelineResponse): TimelineResponse => JSON.parse(JSON.stringify(timeline), omitTypename); const parseString = (params: string) => { @@ -164,7 +164,7 @@ const setPinnedEventIds = (duplicate: boolean, pinnedEventIds: string[] | null | : {}; const getTemplateTimelineId = ( - timeline: TimelineResult, + timeline: TimelineResponse, duplicate: boolean, targetTimelineType?: TimelineType ) => { @@ -200,7 +200,7 @@ const convertToDefaultField = ({ and, ...dataProvider }: DataProviderResult) => const getDataProviders = ( duplicate: boolean, - dataProviders: TimelineResult['dataProviders'], + dataProviders: TimelineResponse['dataProviders'], timelineType?: TimelineType ) => { if (duplicate && dataProviders && timelineType === TimelineTypeEnum.default) { @@ -214,7 +214,7 @@ const getDataProviders = ( }; export const getTimelineTitle = ( - timeline: TimelineResult, + timeline: TimelineResponse, duplicate: boolean, timelineType?: TimelineType ) => { @@ -225,7 +225,7 @@ export const getTimelineTitle = ( }; export const getTimelineStatus = ( - timeline: TimelineResult, + timeline: TimelineResponse, duplicate: boolean, timelineType?: TimelineType ) => { @@ -236,7 +236,7 @@ export const getTimelineStatus = ( }; export const defaultTimelineToTimelineModel = ( - timeline: TimelineResult, + timeline: TimelineResponse, duplicate: boolean, timelineType?: TimelineType, unifiedComponentsInTimelineDisabled?: boolean @@ -291,8 +291,8 @@ export const defaultTimelineToTimelineModel = ( ); }; -export const formatTimelineResultToModel = ( - timelineToOpen: TimelineResult, +export const formatTimelineResponseToModel = ( + timelineToOpen: TimelineResponse, duplicate: boolean = false, timelineType?: TimelineType, unifiedComponentsInTimelineDisabled?: boolean @@ -376,12 +376,12 @@ export const useQueryTimelineById = () => { } else { return Promise.resolve(resolveTimeline(timelineId)) .then((result) => { - const data: SingleTimelineResolveResponse['data'] | null = getOr(null, 'data', result); + const data: ResolvedTimeline | null = getOr(null, 'data', result); if (!data) return; const timelineToOpen = omitTypenameInTimeline(data.timeline); - const { timeline, notes } = formatTimelineResultToModel( + const { timeline, notes } = formatTimelineResponseToModel( timelineToOpen, duplicate, timelineType, diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/types.ts b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/types.ts index 1a47c22d0fb61..14ddedf5b9688 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/types.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/types.ts @@ -10,7 +10,7 @@ import type { IconType } from '@elastic/eui'; import type { TimelineModel } from '../../store/model'; import type { RowRendererId, - SingleTimelineResolveResponse, + ResolvedTimeline, TimelineType, TimelineStatus, TemplateTimelineType, @@ -210,9 +210,9 @@ export interface OpenTimelineProps { } export interface ResolveTimelineConfig { - alias_target_id: SingleTimelineResolveResponse['data']['alias_target_id']; - outcome: SingleTimelineResolveResponse['data']['outcome']; - alias_purpose: SingleTimelineResolveResponse['data']['alias_purpose']; + alias_target_id: ResolvedTimeline['alias_target_id']; + outcome: ResolvedTimeline['outcome']; + alias_purpose: ResolvedTimeline['alias_purpose']; } export interface UpdateTimeline { duplicate: boolean; diff --git a/x-pack/plugins/security_solution/public/timelines/containers/all/index.tsx b/x-pack/plugins/security_solution/public/timelines/containers/all/index.tsx index 7a2b3eca0f74b..9db2a0b8924d9 100644 --- a/x-pack/plugins/security_solution/public/timelines/containers/all/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/containers/all/index.tsx @@ -21,9 +21,9 @@ import type { TimelineType, TimelineStatus, PageInfoTimeline, - TimelineResult, + TimelineResponse, SortTimeline, - GetAllTimelineVariables, + GetTimelinesRequestQuery, } from '../../../../common/api/timeline'; import { TimelineTypeEnum } from '../../../../common/api/timeline'; import { getAllTimelines } from '../api'; @@ -59,7 +59,7 @@ export interface AllTimelinesVariables { export const ALL_TIMELINE_QUERY_ID = 'FETCH_ALL_TIMELINES'; export const getAllTimeline = memoizeOne( - (_variables: string, timelines: TimelineResult[]): OpenTimelineResult[] => + (_variables: string, timelines: TimelineResponse[]): OpenTimelineResult[] => timelines.map((timeline) => ({ created: timeline.created, description: timeline.description, @@ -132,13 +132,15 @@ export const useGetAllTimeline = (): AllTimelinesArgs => { loading: true, })); - const variables: GetAllTimelineVariables = { - onlyUserFavorite, - pageInfo, + const variables: GetTimelinesRequestQuery = { + only_user_favorite: onlyUserFavorite ? 'true' : 'false', + page_size: pageInfo.pageSize.toString(), + page_index: pageInfo.pageIndex.toString(), search, - sort, - status, - timelineType, + sort_field: sort.sortField, + sort_order: sort.sortOrder, + status: status || undefined, + timeline_type: timelineType, }; const getAllTimelineResponse = await getAllTimelines(variables, abortCtrl.signal); const totalCount = getAllTimelineResponse?.totalCount ?? 0; @@ -163,7 +165,7 @@ export const useGetAllTimeline = (): AllTimelinesArgs => { setAllTimelines({ loading: false, totalCount, - timelines: getAllTimeline(JSON.stringify(variables), timelines as TimelineResult[]), + timelines: getAllTimeline(JSON.stringify(variables), timelines as TimelineResponse[]), customTemplateTimelineCount, defaultTimelineCount, elasticTemplateTimelineCount, diff --git a/x-pack/plugins/security_solution/public/timelines/containers/api.ts b/x-pack/plugins/security_solution/public/timelines/containers/api.ts index 155d95c5acef2..fa006293719d5 100644 --- a/x-pack/plugins/security_solution/public/timelines/containers/api.ts +++ b/x-pack/plugins/security_solution/public/timelines/containers/api.ts @@ -5,34 +5,30 @@ * 2.0. */ -import { fold } from 'fp-ts/lib/Either'; -import { identity } from 'fp-ts/lib/function'; -import { pipe } from 'fp-ts/lib/pipeable'; import { isEmpty } from 'lodash'; -import { throwErrors } from '@kbn/cases-plugin/common'; import type { SavedSearch } from '@kbn/saved-search-plugin/common'; import type { - TimelineResponse, - TimelineErrorResponse, - ImportTimelineResultSchema, - AllTimelinesResponse, - SingleTimelineResponse, - SingleTimelineResolveResponse, - GetTimelinesArgs, + CleanDraftTimelinesResponse, + TimelineType, + PatchTimelineResponse, + CreateTimelinesResponse, + CopyTimelineResponse, + GetDraftTimelinesResponse, + GetTimelinesRequestQuery, + SavedTimeline, } from '../../../common/api/timeline'; import { - TimelineResponseType, + ImportTimelineResult, + TimelineErrorResponse, TimelineStatusEnum, - TimelineErrorResponseType, - importTimelineResultSchema, - allTimelinesResponse, PersistFavoriteRouteResponse, - SingleTimelineResponseType, - type TimelineType, TimelineTypeEnum, - ResolvedSingleTimelineResponseType, + GetTimelineResponse, + ResolveTimelineResponse, + GetTimelinesResponse, + PersistTimelineResponse, } from '../../../common/api/timeline'; import { TIMELINE_URL, @@ -48,15 +44,15 @@ import { import { KibanaServices } from '../../common/lib/kibana'; import { ToasterError } from '../../common/components/toasters'; +import { parseOrThrowErrorFactory } from '../../../common/timelines/zod_errors'; import type { ExportDocumentsProps, ImportDataProps, ImportDataResponse, } from '../../detection_engine/rule_management/logic'; -import type { TimelineInput } from '../../../common/search_strategy'; interface RequestPostTimeline { - timeline: TimelineInput; + timeline: SavedTimeline; signal?: AbortSignal; } @@ -68,48 +64,33 @@ interface RequestPatchTimeline extends RequestPostTimeline { type RequestPersistTimeline = RequestPostTimeline & Partial>; const createToasterPlainError = (message: string) => new ToasterError([message]); -const decodeTimelineResponse = (respTimeline?: TimelineResponse | TimelineErrorResponse) => - pipe( - TimelineResponseType.decode(respTimeline), - fold(throwErrors(createToasterPlainError), identity) - ); -const decodeSingleTimelineResponse = (respTimeline?: SingleTimelineResponse) => - pipe( - SingleTimelineResponseType.decode(respTimeline), - fold(throwErrors(createToasterPlainError), identity) - ); +const parseOrThrow = parseOrThrowErrorFactory(createToasterPlainError); -const decodeResolvedSingleTimelineResponse = (respTimeline?: SingleTimelineResolveResponse) => - pipe( - ResolvedSingleTimelineResponseType.decode(respTimeline), - fold(throwErrors(createToasterPlainError), identity) - ); +const decodeTimelineResponse = (respTimeline?: PersistTimelineResponse | TimelineErrorResponse) => + parseOrThrow(PersistTimelineResponse)(respTimeline); -const decodeAllTimelinesResponse = (respTimeline: AllTimelinesResponse) => - pipe( - allTimelinesResponse.decode(respTimeline), - fold(throwErrors(createToasterPlainError), identity) - ); +const decodeSingleTimelineResponse = (respTimeline?: GetTimelineResponse) => + parseOrThrow(GetTimelineResponse)(respTimeline); + +const decodeResolvedSingleTimelineResponse = (respTimeline?: ResolveTimelineResponse) => + parseOrThrow(ResolveTimelineResponse)(respTimeline); + +const decodeGetTimelinesResponse = (respTimeline: GetTimelinesResponse) => + parseOrThrow(GetTimelinesResponse)(respTimeline); const decodeTimelineErrorResponse = (respTimeline?: TimelineErrorResponse) => - pipe( - TimelineErrorResponseType.decode(respTimeline), - fold(throwErrors(createToasterPlainError), identity) - ); + parseOrThrow(TimelineErrorResponse)(respTimeline); -const decodePrepackedTimelineResponse = (respTimeline?: ImportTimelineResultSchema) => - pipe( - importTimelineResultSchema.decode(respTimeline), - fold(throwErrors(createToasterPlainError), identity) - ); +const decodePrepackedTimelineResponse = (respTimeline?: ImportTimelineResult) => + parseOrThrow(ImportTimelineResult)(respTimeline); const decodeResponseFavoriteTimeline = (respTimeline?: PersistFavoriteRouteResponse) => - PersistFavoriteRouteResponse.parse(respTimeline); + parseOrThrow(PersistFavoriteRouteResponse)(respTimeline); const postTimeline = async ({ timeline, -}: RequestPostTimeline): Promise => { +}: RequestPostTimeline): Promise => { let requestBody; try { requestBody = JSON.stringify({ timeline }); @@ -117,7 +98,7 @@ const postTimeline = async ({ return Promise.reject(new Error(`Failed to stringify query: ${JSON.stringify(err)}`)); } - const response = await KibanaServices.get().http.post(TIMELINE_URL, { + const response = await KibanaServices.get().http.post(TIMELINE_URL, { method: 'POST', body: requestBody, version: '2023-10-31', @@ -131,7 +112,7 @@ const patchTimeline = async ({ timeline, version, savedSearch, -}: RequestPatchTimeline): Promise => { +}: RequestPatchTimeline): Promise => { let response = null; let requestBody = null; try { @@ -153,7 +134,7 @@ const patchTimeline = async ({ } try { - response = await KibanaServices.get().http.patch(TIMELINE_URL, { + response = await KibanaServices.get().http.patch(TIMELINE_URL, { method: 'PATCH', body: requestBody, version: '2023-10-31', @@ -175,7 +156,7 @@ export const copyTimeline = async ({ timelineId, timeline, savedSearch, -}: RequestPersistTimeline): Promise => { +}: RequestPersistTimeline): Promise => { let response = null; let requestBody = null; let newSavedSearchId = null; @@ -205,7 +186,7 @@ export const copyTimeline = async ({ } try { - response = await KibanaServices.get().http.post(TIMELINE_COPY_URL, { + response = await KibanaServices.get().http.post(TIMELINE_COPY_URL, { method: 'POST', body: requestBody, version: '1', @@ -224,10 +205,10 @@ export const persistTimeline = async ({ timeline, version, savedSearch, -}: RequestPersistTimeline): Promise => { +}: RequestPersistTimeline): Promise => { try { if (isEmpty(timelineId) && timeline.status === TimelineStatusEnum.draft && timeline) { - const temp: TimelineResponse | TimelineErrorResponse = await cleanDraftTimeline({ + const temp: CleanDraftTimelinesResponse | TimelineErrorResponse = await cleanDraftTimeline({ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion timelineType: timeline.timelineType!, templateTimelineId: timeline.templateTimelineId ?? undefined, @@ -330,13 +311,16 @@ export const getDraftTimeline = async ({ timelineType, }: { timelineType: TimelineType; -}): Promise => { - const response = await KibanaServices.get().http.get(TIMELINE_DRAFT_URL, { - query: { - timelineType, - }, - version: '2023-10-31', - }); +}): Promise => { + const response = await KibanaServices.get().http.get( + TIMELINE_DRAFT_URL, + { + query: { + timelineType, + }, + version: '2023-10-31', + } + ); return decodeTimelineResponse(response); }; @@ -349,7 +333,7 @@ export const cleanDraftTimeline = async ({ timelineType: TimelineType; templateTimelineId?: string; templateTimelineVersion?: number; -}): Promise => { +}): Promise => { let requestBody; const templateTimelineInfo = timelineType === TimelineTypeEnum.template @@ -366,16 +350,19 @@ export const cleanDraftTimeline = async ({ } catch (err) { return Promise.reject(new Error(`Failed to stringify query: ${JSON.stringify(err)}`)); } - const response = await KibanaServices.get().http.post(TIMELINE_DRAFT_URL, { - body: requestBody, - version: '2023-10-31', - }); + const response = await KibanaServices.get().http.post( + TIMELINE_DRAFT_URL, + { + body: requestBody, + version: '2023-10-31', + } + ); return decodeTimelineResponse(response); }; -export const installPrepackedTimelines = async (): Promise => { - const response = await KibanaServices.get().http.post( +export const installPrepackedTimelines = async (): Promise => { + const response = await KibanaServices.get().http.post( TIMELINE_PREPACKAGED_URL, { version: '2023-10-31', @@ -386,7 +373,7 @@ export const installPrepackedTimelines = async (): Promise { - const response = await KibanaServices.get().http.get(TIMELINE_URL, { + const response = await KibanaServices.get().http.get(TIMELINE_URL, { query: { id, }, @@ -397,7 +384,7 @@ export const getTimeline = async (id: string) => { }; export const resolveTimeline = async (id: string) => { - const response = await KibanaServices.get().http.get( + const response = await KibanaServices.get().http.get( TIMELINE_RESOLVE_URL, { query: { @@ -411,7 +398,7 @@ export const resolveTimeline = async (id: string) => { }; export const getTimelineTemplate = async (templateTimelineId: string) => { - const response = await KibanaServices.get().http.get(TIMELINE_URL, { + const response = await KibanaServices.get().http.get(TIMELINE_URL, { query: { template_timeline_id: templateTimelineId, }, @@ -421,24 +408,18 @@ export const getTimelineTemplate = async (templateTimelineId: string) => { return decodeSingleTimelineResponse(response); }; -export const getAllTimelines = async (args: GetTimelinesArgs, abortSignal: AbortSignal) => { - const response = await KibanaServices.get().http.fetch(TIMELINES_URL, { +export const getAllTimelines = async ( + query: GetTimelinesRequestQuery, + abortSignal: AbortSignal +) => { + const response = await KibanaServices.get().http.fetch(TIMELINES_URL, { method: 'GET', - query: { - ...(args.onlyUserFavorite ? { only_user_favorite: args.onlyUserFavorite } : {}), - ...(args?.pageInfo?.pageSize ? { page_size: args.pageInfo.pageSize } : {}), - ...(args?.pageInfo?.pageIndex ? { page_index: args.pageInfo.pageIndex } : {}), - ...(args.search ? { search: args.search } : {}), - ...(args?.sort?.sortField ? { sort_field: args?.sort?.sortField } : {}), - ...(args?.sort?.sortOrder ? { sort_order: args?.sort?.sortOrder } : {}), - ...(args.status ? { status: args.status } : {}), - ...(args.timelineType ? { timeline_type: args.timelineType } : {}), - }, + query, signal: abortSignal, version: '2023-10-31', }); - return decodeAllTimelinesResponse(response); + return decodeGetTimelinesResponse(response); }; export const persistFavorite = async ({ diff --git a/x-pack/plugins/security_solution/public/timelines/containers/helpers.ts b/x-pack/plugins/security_solution/public/timelines/containers/helpers.ts index 17d0050488f5b..fef5fa22f0bfb 100644 --- a/x-pack/plugins/security_solution/public/timelines/containers/helpers.ts +++ b/x-pack/plugins/security_solution/public/timelines/containers/helpers.ts @@ -6,10 +6,10 @@ */ import { TableId } from '@kbn/securitysolution-data-table'; -import type { TimelineResult } from '../../../common/api/timeline'; +import type { TimelineResponse } from '../../../common/api/timeline'; import { DEFAULT_ALERTS_INDEX } from '../../../common/constants'; -export const getTimelineQueryTypes = (timeline: TimelineResult) => ({ +export const getTimelineQueryTypes = (timeline: TimelineResponse) => ({ hasQuery: (timeline.kqlQuery != null && timeline.kqlQuery.filterQuery != null && diff --git a/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_pinned_event.test.ts b/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_pinned_event.test.ts index 4c303b1414515..67374a66019db 100644 --- a/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_pinned_event.test.ts +++ b/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_pinned_event.test.ts @@ -66,6 +66,7 @@ describe('Timeline pinned event middleware', () => { data: { persistPinnedEventOnTimeline: { code: 200, + eventId: testEventId, }, }, }); diff --git a/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_pinned_event.ts b/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_pinned_event.ts index 8461ed3c2fc17..38e00af3f5f8e 100644 --- a/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_pinned_event.ts +++ b/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_pinned_event.ts @@ -74,7 +74,7 @@ export const addPinnedEventToTimelineMiddleware: (kibana: CoreStart) => Middlewa const currentTimeline = selectTimelineById(store.getState(), action.payload.id); // The response is null or empty in case we unpinned an event. // In that case we want to remove the locally pinned event. - if (!response || !('code' in response)) { + if (!response || !('eventId' in response)) { return store.dispatch( updateTimeline({ id: action.payload.id, diff --git a/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_save.test.ts b/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_save.test.ts index 6051c9c1bb4e5..3c8bcf4b55f58 100644 --- a/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_save.test.ts +++ b/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_save.test.ts @@ -167,7 +167,7 @@ describe('Timeline save middleware', () => { }); it('should show an error message when the call is unauthorized', async () => { - (persistTimeline as jest.Mock).mockResolvedValue({ data: { persistTimeline: { code: 403 } } }); + (persistTimeline as jest.Mock).mockResolvedValue({ status_code: 403 }); await store.dispatch(saveTimeline({ id: TimelineId.test, saveAsNew: false })); expect(refreshTimelines as unknown as jest.Mock).not.toHaveBeenCalled(); @@ -175,7 +175,7 @@ describe('Timeline save middleware', () => { }); describe('#convertTimelineAsInput ', () => { - test('should return a TimelineInput instead of TimelineModel ', () => { + test('should return a SavedTimeline instead of TimelineModel ', () => { const columns: TimelineModel['columns'] = [ { columnHeaderType: 'not-filtered', diff --git a/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_save.ts b/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_save.ts index dcbbc5cadb6d0..58e8aced4470b 100644 --- a/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_save.ts +++ b/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_save.ts @@ -34,8 +34,11 @@ import { selectTimelineById } from '../selectors'; import * as i18n from '../../pages/translations'; import type { inputsModel } from '../../../common/store/inputs'; import { TimelineStatusEnum, TimelineTypeEnum } from '../../../../common/api/timeline'; -import type { TimelineErrorResponse, TimelineResponse } from '../../../../common/api/timeline'; -import type { TimelineInput } from '../../../../common/search_strategy'; +import type { + TimelineErrorResponse, + PersistTimelineResponse, + SavedTimeline, +} from '../../../../common/api/timeline'; import type { TimelineModel } from '../model'; import type { ColumnHeaderOptions } from '../../../../common/types/timeline'; import { refreshTimelines } from './helpers'; @@ -83,6 +86,9 @@ export const saveTimelineMiddleware: (kibana: CoreStart) => Middleware<{}, State if (isTimelineErrorResponse(result)) { const error = getErrorFromResponse(result); switch (error?.errorCode) { + case 403: + store.dispatch(showCallOutUnauthorizedMsg()); + break; // conflict case 409: kibana.notifications.toasts.addDanger({ @@ -108,11 +114,6 @@ export const saveTimelineMiddleware: (kibana: CoreStart) => Middleware<{}, State return; } - if (response && response.code === 403) { - store.dispatch(showCallOutUnauthorizedMsg()); - return; - } - refreshTimelines(store.getState()); store.dispatch( @@ -155,7 +156,7 @@ export const saveTimelineMiddleware: (kibana: CoreStart) => Middleware<{}, State return ret; }; -const timelineInput: TimelineInput = { +const timelineInput: SavedTimeline = { columns: null, dataProviders: null, dataViewId: null, @@ -181,8 +182,8 @@ const timelineInput: TimelineInput = { export const convertTimelineAsInput = ( timeline: TimelineModel, timelineTimeRange: inputsModel.TimeRange -): TimelineInput => - Object.keys(timelineInput).reduce((acc, key) => { +): SavedTimeline => + Object.keys(timelineInput).reduce((acc, key) => { if (has(key, timeline)) { if (key === 'kqlQuery') { return set(`${key}.filterQuery`, get(`${key}.filterQuery`, timeline), acc); @@ -270,7 +271,7 @@ const convertToString = (obj: unknown) => { } }; -type PossibleResponse = TimelineResponse | TimelineErrorResponse; +type PossibleResponse = PersistTimelineResponse | TimelineErrorResponse; function isTimelineErrorResponse(response: PossibleResponse): response is TimelineErrorResponse { return response && ('status_code' in response || 'statusCode' in response); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/get_prebuilt_rules_and_timelines_status/get_prebuilt_rules_and_timelines_status_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/get_prebuilt_rules_and_timelines_status/get_prebuilt_rules_and_timelines_status_route.ts index 6b88ec1923d0d..3713176e919c5 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/get_prebuilt_rules_and_timelines_status/get_prebuilt_rules_and_timelines_status_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/get_prebuilt_rules_and_timelines_status/get_prebuilt_rules_and_timelines_status_route.ts @@ -6,8 +6,7 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; -import { validate } from '@kbn/securitysolution-io-ts-utils'; -import { checkTimelineStatusRt } from '../../../../../../common/api/timeline'; +import { InstallPrepackedTimelinesRequestBody } from '../../../../../../common/api/timeline'; import { buildSiemResponse } from '../../../routes/utils'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; @@ -69,10 +68,8 @@ export const getPrebuiltRulesAndTimelinesStatusRoute = (router: SecuritySolution const frameworkRequest = await buildFrameworkRequest(context, request); const prebuiltTimelineStatus = await checkTimelinesStatus(frameworkRequest); - const [validatedPrebuiltTimelineStatus] = validate( - prebuiltTimelineStatus, - checkTimelineStatusRt - ); + const validatedPrebuiltTimelineStatus = + InstallPrepackedTimelinesRequestBody.parse(prebuiltTimelineStatus); const responseBody: ReadPrebuiltRulesAndTimelinesStatusResponse = { rules_custom_installed: customRules.total, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/perform_timelines_installation.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/perform_timelines_installation.ts index 101883e8ccd9b..857c7a6b95814 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/perform_timelines_installation.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/perform_timelines_installation.ts @@ -5,8 +5,8 @@ * 2.0. */ -import { validate } from '@kbn/securitysolution-io-ts-utils'; -import { importTimelineResultSchema } from '../../../../../common/api/timeline'; +import { stringifyZodError } from '@kbn/zod-helpers'; +import { ImportTimelineResult } from '../../../../../common/api/timeline'; import type { SecuritySolutionApiRequestHandlerContext } from '../../../../types'; import { installPrepackagedTimelines } from '../../../timeline/routes/prepackaged_timelines/install_prepackaged_timelines'; @@ -18,10 +18,10 @@ export const performTimelinesInstallation = async ( securitySolutionContext.getFrameworkRequest(), true ); - const [result, error] = validate(timeline, importTimelineResultSchema); + const parsed = ImportTimelineResult.safeParse(timeline); return { - result, - error, + result: parsed.data, + error: parsed.error && stringifyZodError(parsed.error), }; }; diff --git a/x-pack/plugins/security_solution/server/lib/timeline/__mocks__/request_responses.ts b/x-pack/plugins/security_solution/server/lib/timeline/__mocks__/request_responses.ts index eb4649f941d11..70187dc9bf40a 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/__mocks__/request_responses.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/__mocks__/request_responses.ts @@ -6,7 +6,6 @@ */ import path, { join, resolve } from 'path'; -import type * as rt from 'io-ts'; import { TIMELINE_DRAFT_URL, @@ -17,9 +16,9 @@ import { } from '../../../../common/constants'; import type { SavedTimeline, - patchTimelineSchema, - createTimelineSchema, - GetTimelineQuery, + PatchTimelineRequestBody, + CreateTimelinesRequestBody, + GetTimelineRequestQuery, } from '../../../../common/api/timeline'; import { type TimelineType, @@ -135,14 +134,14 @@ export const updateTemplateTimelineWithTimelineId = { version: 'WzEyMjUsMV0=', }; -export const getCreateTimelinesRequest = (mockBody: rt.TypeOf) => +export const getCreateTimelinesRequest = (mockBody: CreateTimelinesRequestBody) => requestMock.create({ method: 'post', path: TIMELINE_URL, body: mockBody, }); -export const getUpdateTimelinesRequest = (mockBody: rt.TypeOf) => +export const getUpdateTimelinesRequest = (mockBody: PatchTimelineRequestBody) => requestMock.create({ method: 'patch', path: TIMELINE_URL, @@ -167,7 +166,7 @@ export const cleanDraftTimelinesRequest = (timelineType: TimelineType) => }, }); -export const getTimelineRequest = (query?: GetTimelineQuery) => +export const getTimelineRequest = (query?: GetTimelineRequestQuery) => requestMock.create({ method: 'get', path: TIMELINE_URL, diff --git a/x-pack/plugins/security_solution/server/lib/timeline/__mocks__/resolve_timeline.ts b/x-pack/plugins/security_solution/server/lib/timeline/__mocks__/resolve_timeline.ts index ea875a71416c1..932e6f3ce904d 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/__mocks__/resolve_timeline.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/__mocks__/resolve_timeline.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { ResolvedTimelineWithOutcomeSavedObject } from '../../../../common/api/timeline'; +import type { ResolvedTimeline } from '../../../../common/api/timeline'; import { TimelineStatusEnum, TimelineTypeEnum } from '../../../../common/api/timeline'; export const mockResolvedSavedObject = { @@ -117,7 +117,7 @@ export const mockPopulatedTimeline = { pinnedEventsSaveObject: [], }; -export const mockResolveTimelineResponse: ResolvedTimelineWithOutcomeSavedObject = { +export const mockResolveTimelineResponse: ResolvedTimeline = { timeline: mockPopulatedTimeline, outcome: 'aliasMatch', alias_target_id: 'new-saved-object-id', diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/clean_draft_timelines/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/clean_draft_timelines/index.ts index 387720b4a3b4f..6515817f28e11 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/clean_draft_timelines/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/clean_draft_timelines/index.ts @@ -6,10 +6,10 @@ */ import { v4 as uuidv4 } from 'uuid'; +import type { IKibanaResponse } from '@kbn/core-http-server'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; -import type { ConfigType } from '../../../../..'; import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; import { TIMELINE_DRAFT_URL } from '../../../../../../common/constants'; @@ -21,12 +21,13 @@ import { persistTimeline, } from '../../../saved_object/timelines'; import { draftTimelineDefaults } from '../../../utils/default_timeline'; +import type { CleanDraftTimelinesResponse } from '../../../../../../common/api/timeline'; import { CleanDraftTimelinesRequestBody, TimelineTypeEnum, } from '../../../../../../common/api/timeline'; -export const cleanDraftTimelinesRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { +export const cleanDraftTimelinesRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .post({ path: TIMELINE_DRAFT_URL, @@ -42,7 +43,7 @@ export const cleanDraftTimelinesRoute = (router: SecuritySolutionPluginRouter, _ }, version: '2023-10-31', }, - async (context, request, response) => { + async (context, request, response): Promise> => { const frameworkRequest = await buildFrameworkRequest(context, request); const siemResponse = buildSiemResponse(response); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/get_draft_timelines/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/get_draft_timelines/index.ts index 6619e4a0eb18b..1ba3167cdefae 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/get_draft_timelines/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/get_draft_timelines/index.ts @@ -5,19 +5,22 @@ * 2.0. */ +import type { IKibanaResponse } from '@kbn/core-http-server'; import { transformError } from '@kbn/securitysolution-es-utils'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; -import type { ConfigType } from '../../../../..'; import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; import { TIMELINE_DRAFT_URL } from '../../../../../../common/constants'; import { buildFrameworkRequest } from '../../../utils/common'; -import { buildRouteValidationWithExcess } from '../../../../../utils/build_validation/route_validation'; import { getDraftTimeline, persistTimeline } from '../../../saved_object/timelines'; import { draftTimelineDefaults } from '../../../utils/default_timeline'; -import { getDraftTimelineSchema } from '../../../../../../common/api/timeline'; +import { + GetDraftTimelinesRequestQuery, + type GetDraftTimelinesResponse, +} from '../../../../../../common/api/timeline'; -export const getDraftTimelinesRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { +export const getDraftTimelinesRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .get({ path: TIMELINE_DRAFT_URL, @@ -29,11 +32,11 @@ export const getDraftTimelinesRoute = (router: SecuritySolutionPluginRouter, _: .addVersion( { validate: { - request: { query: buildRouteValidationWithExcess(getDraftTimelineSchema) }, + request: { query: buildRouteValidationWithZod(GetDraftTimelinesRequestQuery) }, }, version: '2023-10-31', }, - async (context, request, response) => { + async (context, request, response): Promise> => { const frameworkRequest = await buildFrameworkRequest(context, request); const siemResponse = buildSiemResponse(response); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/index.ts index 6b44496b6c3c4..905e28872a5a4 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/index.ts @@ -28,25 +28,25 @@ import { persistNoteRoute, deleteNoteRoute, getNotesRoute } from './notes'; import { persistPinnedEventRoute } from './pinned_events'; export function registerTimelineRoutes(router: SecuritySolutionPluginRouter, config: ConfigType) { - createTimelinesRoute(router, config); - patchTimelinesRoute(router, config); + createTimelinesRoute(router); + patchTimelinesRoute(router); importTimelinesRoute(router, config); exportTimelinesRoute(router, config); - getDraftTimelinesRoute(router, config); - getTimelineRoute(router, config); - resolveTimelineRoute(router, config); - getTimelinesRoute(router, config); - cleanDraftTimelinesRoute(router, config); - deleteTimelinesRoute(router, config); - persistFavoriteRoute(router, config); - copyTimelineRoute(router, config); + getDraftTimelinesRoute(router); + getTimelineRoute(router); + resolveTimelineRoute(router); + getTimelinesRoute(router); + cleanDraftTimelinesRoute(router); + deleteTimelinesRoute(router); + persistFavoriteRoute(router); + copyTimelineRoute(router); installPrepackedTimelinesRoute(router, config); - persistNoteRoute(router, config); - deleteNoteRoute(router, config); - getNotesRoute(router, config); + persistNoteRoute(router); + deleteNoteRoute(router); + getNotesRoute(router); - persistPinnedEventRoute(router, config); + persistPinnedEventRoute(router); } diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/delete_note.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/delete_note.ts index 92be926453403..9e6aeb5473fc2 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/delete_note.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/delete_note.ts @@ -5,21 +5,20 @@ * 2.0. */ +import type { IKibanaResponse } from '@kbn/core-http-server'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { SecuritySolutionPluginRouter } from '../../../../types'; import { NOTE_URL } from '../../../../../common/constants'; -import type { ConfigType } from '../../../..'; - import { buildSiemResponse } from '../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../utils/common'; import { DeleteNoteRequestBody, type DeleteNoteResponse } from '../../../../../common/api/timeline'; import { deleteNote } from '../../saved_object/notes'; -export const deleteNoteRoute = (router: SecuritySolutionPluginRouter, config: ConfigType) => { +export const deleteNoteRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .delete({ path: NOTE_URL, @@ -35,7 +34,7 @@ export const deleteNoteRoute = (router: SecuritySolutionPluginRouter, config: Co }, version: '2023-10-31', }, - async (context, request, response) => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { @@ -55,9 +54,8 @@ export const deleteNoteRoute = (router: SecuritySolutionPluginRouter, config: Co noteIds, }); - const body: DeleteNoteResponse = { data: {} }; return response.ok({ - body, + body: { data: {} }, }); } catch (err) { const error = transformError(err); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.ts index 9cc8435d6aae0..920a7ef763dd5 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.ts @@ -5,21 +5,20 @@ * 2.0. */ +import type { IKibanaResponse } from '@kbn/core-http-server'; import { transformError } from '@kbn/securitysolution-es-utils'; import type { SortOrder } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { SecuritySolutionPluginRouter } from '../../../../types'; import { NOTE_URL } from '../../../../../common/constants'; -import type { ConfigType } from '../../../..'; - import { buildSiemResponse } from '../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../utils/common'; import { getAllSavedNote, MAX_UNASSOCIATED_NOTES } from '../../saved_object/notes'; import { noteSavedObjectType } from '../../saved_object_mappings/notes'; import { GetNotesRequestQuery, type GetNotesResponse } from '../../../../../common/api/timeline'; -export const getNotesRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { +export const getNotesRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .get({ path: NOTE_URL, @@ -35,7 +34,7 @@ export const getNotesRoute = (router: SecuritySolutionPluginRouter, _: ConfigTyp }, version: '2023-10-31', }, - async (context, request, response) => { + async (context, request, response): Promise> => { try { const queryParams = request.query; const frameworkRequest = await buildFrameworkRequest(context, request); @@ -60,8 +59,7 @@ export const getNotesRoute = (router: SecuritySolutionPluginRouter, _: ConfigTyp perPage: MAX_UNASSOCIATED_NOTES, }; const res = await getAllSavedNote(frameworkRequest, options); - const body: GetNotesResponse = res ?? {}; - return response.ok({ body }); + return response.ok({ body: res ?? {} }); } } else { const perPage = queryParams?.perPage ? parseInt(queryParams.perPage, 10) : 10; diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/persist_note.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/persist_note.ts index 7ee0dc886a787..2e825b4ff3a15 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/persist_note.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/persist_note.ts @@ -5,14 +5,13 @@ * 2.0. */ +import type { IKibanaResponse } from '@kbn/core-http-server'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { SecuritySolutionPluginRouter } from '../../../../types'; import { NOTE_URL } from '../../../../../common/constants'; -import type { ConfigType } from '../../../..'; - import { buildSiemResponse } from '../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../utils/common'; @@ -22,7 +21,7 @@ import { } from '../../../../../common/api/timeline'; import { persistNote } from '../../saved_object/notes'; -export const persistNoteRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { +export const persistNoteRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .patch({ path: NOTE_URL, @@ -38,7 +37,7 @@ export const persistNoteRoute = (router: SecuritySolutionPluginRouter, _: Config }, version: '2023-10-31', }, - async (context, request, response) => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/pinned_events/persist_pinned_event.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/pinned_events/persist_pinned_event.ts index c1e245cda40fb..74db9e58d904b 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/pinned_events/persist_pinned_event.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/pinned_events/persist_pinned_event.ts @@ -5,6 +5,7 @@ * 2.0. */ +import type { IKibanaResponse } from '@kbn/core-http-server'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; @@ -12,8 +13,6 @@ import type { SecuritySolutionPluginRouter } from '../../../../types'; import { PINNED_EVENT_URL } from '../../../../../common/constants'; -import type { ConfigType } from '../../../..'; - import { buildSiemResponse } from '../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../utils/common'; @@ -23,10 +22,7 @@ import { } from '../../../../../common/api/timeline'; import { persistPinnedEventOnTimeline } from '../../saved_object/pinned_events'; -export const persistPinnedEventRoute = ( - router: SecuritySolutionPluginRouter, - config: ConfigType -) => { +export const persistPinnedEventRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .patch({ path: PINNED_EVENT_URL, @@ -42,7 +38,11 @@ export const persistPinnedEventRoute = ( }, version: '2023-10-31', }, - async (context, request, response) => { + async ( + context, + request, + response + ): Promise> => { const siemResponse = buildSiemResponse(response); try { @@ -58,12 +58,10 @@ export const persistPinnedEventRoute = ( timelineId ); - const body: PersistPinnedEventRouteResponse = { - data: { persistPinnedEventOnTimeline: res }, - }; - return response.ok({ - body, + body: { + data: { persistPinnedEventOnTimeline: res }, + }, }); } catch (err) { const error = transformError(err); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/helpers.test.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/helpers.test.ts index 7a4e7a41a1ee7..6b8124f16aa91 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/helpers.test.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/helpers.test.ts @@ -20,7 +20,6 @@ import { import * as helpers from './helpers'; import { importTimelines } from '../../timelines/import_timelines/helpers'; import { buildFrameworkRequest } from '../../../utils/common'; -import type { ImportTimelineResultSchema } from '../../../../../../common/api/timeline'; jest.mock('../../timelines/import_timelines/helpers'); @@ -231,9 +230,8 @@ describe('installPrepackagedTimelines', () => { ); expect( - (result as ImportTimelineResultSchema).errors[0].error.message.includes( - 'read prepackaged timelines error:' - ) + 'errors' in result && + result.errors?.[0].error?.message?.includes('read prepackaged timelines error:') ).toBeTruthy(); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/helpers.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/helpers.ts index dee31d479e2da..f6f43435e5641 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/helpers.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/helpers.ts @@ -8,7 +8,7 @@ import path, { join, resolve } from 'path'; import { Readable } from 'stream'; -import type { ImportTimelineResultSchema } from '../../../../../../common/api/timeline'; +import type { ImportTimelineResult } from '../../../../../../common/api/timeline'; import type { FrameworkRequest } from '../../../../framework'; @@ -22,7 +22,7 @@ export const installPrepackagedTimelines = async ( isImmutable: boolean, filePath?: string, fileName?: string -): Promise => { +): Promise => { let readStream; const dir = resolve( join( @@ -47,7 +47,7 @@ export const installPrepackagedTimelines = async ( ], }; } - return loadData(readStream, (docs: T) => + return loadData(readStream, (docs: T) => docs instanceof Readable ? importTimelines(docs, maxTimelineImportExportSize, frameworkRequest, isImmutable) : Promise.reject(new Error(`read prepackaged timelines error`)) diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/index.ts index 0b150b4e47f56..b1a6e2f781f45 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/index.ts @@ -6,14 +6,17 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; -import { validate } from '@kbn/securitysolution-io-ts-utils'; -import { checkTimelineStatusRt } from '../../../../../../common/api/timeline'; +import type { IKibanaResponse } from '@kbn/core-http-server'; + import type { SecuritySolutionPluginRouter } from '../../../../../types'; import { TIMELINE_PREPACKAGED_URL } from '../../../../../../common/constants'; import type { ConfigType } from '../../../../../config'; - +import { + InstallPrepackedTimelinesRequestBody, + type InstallPrepackedTimelinesResponse, +} from '../../../../../../common/api/timeline'; import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; import { installPrepackagedTimelines } from './helpers'; @@ -45,23 +48,24 @@ export const installPrepackedTimelinesRoute = ( validate: {}, version: '2023-10-31', }, - async (context, request, response) => { + async ( + context, + request, + response + ): Promise> => { try { const frameworkRequest = await buildFrameworkRequest(context, request); const prepackagedTimelineStatus = await checkTimelinesStatus(frameworkRequest); - const [validatedprepackagedTimelineStatus, prepackagedTimelineStatusError] = validate( - prepackagedTimelineStatus, - checkTimelineStatusRt - ); - if (prepackagedTimelineStatusError != null) { - throw prepackagedTimelineStatusError; + const installResult = + InstallPrepackedTimelinesRequestBody.safeParse(prepackagedTimelineStatus); + + if (installResult.error) { + throw installResult.error; } - const timelinesToInstalled = - validatedprepackagedTimelineStatus?.timelinesToInstall.length ?? 0; - const timelinesNotUpdated = - validatedprepackagedTimelineStatus?.timelinesToUpdate.length ?? 0; + const timelinesToInstalled = installResult.data.timelinesToInstall.length ?? 0; + const timelinesNotUpdated = installResult.data.timelinesToUpdate.length ?? 0; let res = null; if (timelinesToInstalled > 0 || timelinesNotUpdated > 0) { diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/copy_timeline/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/copy_timeline/index.ts index 5bdb4e0f93d67..e795ec89dd926 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/copy_timeline/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/copy_timeline/index.ts @@ -5,10 +5,13 @@ * 2.0. */ +import type { IKibanaResponse } from '@kbn/core-http-server'; import { transformError } from '@kbn/securitysolution-es-utils'; -import { buildRouteValidationWithExcess } from '../../../../../utils/build_validation/route_validation'; -import type { ConfigType } from '../../../../..'; -import { copyTimelineSchema } from '../../../../../../common/api/timeline'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; +import { + CopyTimelineRequestBody, + type CopyTimelineResponse, +} from '../../../../../../common/api/timeline'; import { copyTimeline } from '../../../saved_object/timelines'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; import { TIMELINE_COPY_URL } from '../../../../../../common/constants'; @@ -16,7 +19,7 @@ import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../../utils/common'; -export const copyTimelineRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { +export const copyTimelineRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .post({ path: TIMELINE_COPY_URL, @@ -29,17 +32,16 @@ export const copyTimelineRoute = (router: SecuritySolutionPluginRouter, _: Confi { version: '1', validate: { - request: { body: buildRouteValidationWithExcess(copyTimelineSchema) }, + request: { body: buildRouteValidationWithZod(CopyTimelineRequestBody) }, }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { const frameworkRequest = await buildFrameworkRequest(context, request); const { timeline, timelineIdToCopy } = request.body; const copiedTimeline = await copyTimeline(frameworkRequest, timeline, timelineIdToCopy); - return response.ok({ body: { data: { persistTimeline: copiedTimeline } }, }); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/create_timelines/helpers.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/create_timelines/helpers.ts index 1428f09d39560..ac05fe3f880e9 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/create_timelines/helpers.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/create_timelines/helpers.ts @@ -10,8 +10,9 @@ import { isEmpty } from 'lodash/fp'; import moment from 'moment'; import { timeline as timelineLib, pinnedEvent as pinnedEventLib } from '../../../saved_object'; import type { FrameworkRequest } from '../../../../framework'; -import type { ResponseTimeline, SavedTimeline, Note } from '../../../../../../common/api/timeline'; +import type { SavedTimeline, Note } from '../../../../../../common/api/timeline'; import { persistNotes } from '../../../saved_object/notes/persist_notes'; +import type { InternalTimelineResponse } from '../../../saved_object/timelines'; interface CreateTimelineProps { frameworkRequest: FrameworkRequest; @@ -21,7 +22,7 @@ interface CreateTimelineProps { overrideNotesOwner?: boolean; pinnedEventIds?: string[] | null; notes?: Note[]; - existingNoteIds?: string[]; + existingNoteIds?: string[] | null; isImmutable?: boolean; } @@ -40,7 +41,7 @@ export const createTimelines = async ({ existingNoteIds = [], isImmutable, overrideNotesOwner = true, -}: CreateTimelineProps): Promise => { +}: CreateTimelineProps): Promise => { const timerangeStart = isImmutable ? moment().subtract(24, 'hours').toISOString() : timeline.dateRange?.start; diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/create_timelines/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/create_timelines/index.ts index 0fcf286661b96..95fb09fb28e56 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/create_timelines/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/create_timelines/index.ts @@ -7,16 +7,13 @@ import { transformError } from '@kbn/securitysolution-es-utils'; import type { IKibanaResponse } from '@kbn/core/server'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; import { TIMELINE_URL } from '../../../../../../common/constants'; -import type { ConfigType } from '../../../../..'; -import { buildRouteValidationWithExcess } from '../../../../../utils/build_validation/route_validation'; - import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; -import { createTimelineSchema } from '../../../../../../common/api/timeline'; import { buildFrameworkRequest, CompareTimelinesStatus, @@ -24,11 +21,14 @@ import { } from '../../../utils/common'; import { DEFAULT_ERROR } from '../../../utils/failure_cases'; import { createTimelines } from './helpers'; -import type { CreateTimelinesResponse } from '../../../../../../common/api/timeline'; +import { + CreateTimelinesRequestBody, + type CreateTimelinesResponse, +} from '../../../../../../common/api/timeline'; export * from './helpers'; -export const createTimelinesRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { +export const createTimelinesRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .post({ path: TIMELINE_URL, @@ -42,7 +42,7 @@ export const createTimelinesRoute = (router: SecuritySolutionPluginRouter, _: Co version: '2023-10-31', validate: { request: { - body: buildRouteValidationWithExcess(createTimelineSchema), + body: buildRouteValidationWithZod(CreateTimelinesRequestBody), }, }, }, diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/delete_timelines/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/delete_timelines/index.ts index a11b16c96fb1f..8dd476c9f4e44 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/delete_timelines/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/delete_timelines/index.ts @@ -5,9 +5,9 @@ * 2.0. */ +import type { IKibanaResponse } from '@kbn/core-http-server'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; -import type { ConfigType } from '../../../../..'; import { DeleteTimelinesRequestBody, type DeleteTimelinesResponse, @@ -19,7 +19,7 @@ import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../../utils/common'; import { deleteTimeline } from '../../../saved_object/timelines'; -export const deleteTimelinesRoute = (router: SecuritySolutionPluginRouter, config: ConfigType) => { +export const deleteTimelinesRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .delete({ path: TIMELINE_URL, @@ -35,7 +35,7 @@ export const deleteTimelinesRoute = (router: SecuritySolutionPluginRouter, confi request: { body: buildRouteValidationWithZod(DeleteTimelinesRequestBody) }, }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/helpers.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/helpers.ts index 4974e6bd0edda..6e4f3d84da1ff 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/helpers.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/helpers.ts @@ -9,11 +9,11 @@ import { omit } from 'lodash/fp'; import { transformDataToNdjson } from '@kbn/securitysolution-utils'; import type { - ExportedTimelines, ExportedNotes, ExportTimelineNotFoundError, Note, PinnedEvent, + TimelineResponse, } from '../../../../../../common/api/timeline'; import type { FrameworkRequest } from '../../../../framework'; @@ -45,7 +45,7 @@ const getPinnedEventsIdsByTimelineId = (currentPinnedEvents: PinnedEvent[]): str const getTimelinesFromObjects = async ( request: FrameworkRequest, ids?: string[] | null -): Promise> => { +): Promise> => { const { timelines, errors } = await getSelectedTimelines(request, ids); const exportedIds = timelines.map((t) => t.savedObjectId); @@ -65,7 +65,7 @@ const getTimelinesFromObjects = async ( [] ); - const myResponse = exportedIds.reduce((acc, timelineId) => { + const myResponse = exportedIds.reduce((acc, timelineId) => { const myTimeline = timelines.find((t) => t.savedObjectId === timelineId); if (myTimeline != null) { const timelineNotes = myNotes.filter((n) => n.timelineId === timelineId); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timeline/index.test.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timeline/index.test.ts index 78df97fa441be..781da93355442 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timeline/index.test.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timeline/index.test.ts @@ -5,11 +5,7 @@ * 2.0. */ -import { - serverMock, - requestContextMock, - createMockConfig, -} from '../../../../detection_engine/routes/__mocks__'; +import { serverMock, requestContextMock } from '../../../../detection_engine/routes/__mocks__'; import { getTimelineOrNull, getTimelineTemplateOrNull } from '../../../saved_object/timelines'; import { getTimelineRequest } from '../../../__mocks__/request_responses'; @@ -33,7 +29,7 @@ describe('get timeline', () => { server = serverMock.create(); context = requestContextMock.createTools().context; - getTimelineRoute(server.router, createMockConfig()); + getTimelineRoute(server.router); }); test('should call getTimelineTemplateOrNull if templateTimelineId is given', async () => { diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timeline/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timeline/index.ts index 321e6aafe4903..870955f7e8691 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timeline/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timeline/index.ts @@ -5,25 +5,24 @@ * 2.0. */ +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; +import type { IKibanaResponse } from '@kbn/core-http-server'; import { transformError } from '@kbn/securitysolution-es-utils'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; import { TIMELINE_URL } from '../../../../../../common/constants'; -import type { ConfigType } from '../../../../..'; -import { buildRouteValidationWithExcess } from '../../../../../utils/build_validation/route_validation'; - import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../../utils/common'; -import { getTimelineQuerySchema } from '../../../../../../common/api/timeline'; -import { getTimelineTemplateOrNull, getTimelineOrNull } from '../../../saved_object/timelines'; -import type { - TimelineSavedObject, - ResolvedTimelineWithOutcomeSavedObject, +import { + GetTimelineRequestQuery, + type GetTimelineResponse, } from '../../../../../../common/api/timeline'; +import { getTimelineTemplateOrNull, getTimelineOrNull } from '../../../saved_object/timelines'; +import type { ResolvedTimeline, TimelineResponse } from '../../../../../../common/api/timeline'; -export const getTimelineRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { +export const getTimelineRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .get({ path: TIMELINE_URL, @@ -36,16 +35,16 @@ export const getTimelineRoute = (router: SecuritySolutionPluginRouter, _: Config { version: '2023-10-31', validate: { - request: { query: buildRouteValidationWithExcess(getTimelineQuerySchema) }, + request: { query: buildRouteValidationWithZod(GetTimelineRequestQuery) }, }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { try { const frameworkRequest = await buildFrameworkRequest(context, request); const query = request.query ?? {}; const { template_timeline_id: templateTimelineId, id } = query; - let res: TimelineSavedObject | ResolvedTimelineWithOutcomeSavedObject | null = null; + let res: TimelineResponse | ResolvedTimeline | null = null; if (templateTimelineId != null && id == null) { res = await getTimelineTemplateOrNull(frameworkRequest, templateTimelineId); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timelines/index.test.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timelines/index.test.ts index b006b77c9a595..753ac1eb15aea 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timelines/index.test.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timelines/index.test.ts @@ -5,11 +5,7 @@ * 2.0. */ -import { - serverMock, - requestContextMock, - createMockConfig, -} from '../../../../detection_engine/routes/__mocks__'; +import { serverMock, requestContextMock } from '../../../../detection_engine/routes/__mocks__'; import { getAllTimeline } from '../../../saved_object/timelines'; import { getTimelineRequest } from '../../../__mocks__/request_responses'; import { getTimelinesRoute } from '.'; @@ -29,7 +25,7 @@ describe('get all timelines', () => { server = serverMock.create(); context = requestContextMock.createTools().context; - getTimelinesRoute(server.router, createMockConfig()); + getTimelinesRoute(server.router); }); test('should get the total count', async () => { diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timelines/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timelines/index.ts index 97d9bf51a0876..52995efcf4be1 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timelines/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timelines/index.ts @@ -5,24 +5,23 @@ * 2.0. */ -import { pipe } from 'fp-ts/lib/pipeable'; -import { fold } from 'fp-ts/lib/Either'; -import { identity } from 'fp-ts/lib/function'; +import type { IKibanaResponse } from '@kbn/core-http-server'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import { transformError } from '@kbn/securitysolution-es-utils'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; import { TIMELINES_URL } from '../../../../../../common/constants'; -import type { ConfigType } from '../../../../..'; - import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; -import { CustomHttpRequestError } from '../../../../../utils/custom_http_request_error'; -import { buildFrameworkRequest, escapeHatch, throwErrors } from '../../../utils/common'; +import { buildFrameworkRequest } from '../../../utils/common'; import { getAllTimeline } from '../../../saved_object/timelines'; -import { getTimelinesQuerySchema } from '../../../../../../common/api/timeline'; +import { + GetTimelinesRequestQuery, + type GetTimelinesResponse, +} from '../../../../../../common/api/timeline'; -export const getTimelinesRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { +export const getTimelinesRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .get({ path: TIMELINES_URL, @@ -34,27 +33,23 @@ export const getTimelinesRoute = (router: SecuritySolutionPluginRouter, _: Confi .addVersion( { validate: { - request: { query: escapeHatch }, + request: { query: buildRouteValidationWithZod(GetTimelinesRequestQuery) }, }, version: '2023-10-31', }, - async (context, request, response) => { - const customHttpRequestError = (message: string) => - new CustomHttpRequestError(message, 400); + async (context, request, response): Promise> => { try { const frameworkRequest = await buildFrameworkRequest(context, request); - const queryParams = pipe( - getTimelinesQuerySchema.decode(request.query), - fold(throwErrors(customHttpRequestError), identity) - ); - const onlyUserFavorite = queryParams?.only_user_favorite === 'true' ? true : false; - const pageSize = queryParams?.page_size ? parseInt(queryParams.page_size, 10) : null; - const pageIndex = queryParams?.page_index ? parseInt(queryParams.page_index, 10) : null; - const search = queryParams?.search ?? null; - const sortField = queryParams?.sort_field ?? null; - const sortOrder = queryParams?.sort_order ?? null; - const status = queryParams?.status ?? null; - const timelineType = queryParams?.timeline_type ?? null; + const onlyUserFavorite = request.query?.only_user_favorite === 'true'; + const pageSize = request.query?.page_size ? parseInt(request.query.page_size, 10) : null; + const pageIndex = request.query?.page_index + ? parseInt(request.query.page_index, 10) + : null; + const search = request.query?.search ?? null; + const sortField = request.query?.sort_field ?? null; + const sortOrder = request.query?.sort_order ?? null; + const status = request.query?.status ?? null; + const timelineType = request.query?.timeline_type ?? null; const sort = sortField && sortOrder ? { diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/create_timelines_stream_from_ndjson.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/create_timelines_stream_from_ndjson.ts index 65f3510c75f8c..83a25ee38cd63 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/create_timelines_stream_from_ndjson.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/create_timelines_stream_from_ndjson.ts @@ -5,11 +5,7 @@ * 2.0. */ -import type * as rt from 'io-ts'; import type { Transform } from 'stream'; -import { pipe } from 'fp-ts/lib/pipeable'; -import { fold } from 'fp-ts/lib/Either'; -import { identity } from 'fp-ts/lib/function'; import { createConcatStream, createSplitStream, createMapStream } from '@kbn/utils'; import { BadRequestError } from '@kbn/securitysolution-es-utils'; import { @@ -19,23 +15,15 @@ import { } from '../../../../../utils/read_stream/create_stream_from_ndjson'; import type { ImportTimelineResponse } from './types'; -import { ImportTimelinesSchemaRt } from '../../../../../../common/api/timeline'; -import { throwErrors } from '../../../utils/common'; +import { ImportTimelines } from '../../../../../../common/api/timeline'; +import { parseOrThrowErrorFactory } from '../../../../../../common/timelines/zod_errors'; -type ErrorFactory = (message: string) => Error; +const createPlainError = (message: string) => new Error(message); +const parseOrThrow = parseOrThrowErrorFactory(createPlainError); -export const createPlainError = (message: string) => new Error(message); - -export const decodeOrThrow = - (runtimeType: rt.Type, createError: ErrorFactory = createPlainError) => - (inputValue: I) => - pipe(runtimeType.decode(inputValue), fold(throwErrors(createError), identity)); - -export const validateTimelines = (): Transform => +const validateTimelines = (): Transform => createMapStream((obj: ImportTimelineResponse) => - obj instanceof Error - ? new BadRequestError(obj.message) - : decodeOrThrow(ImportTimelinesSchemaRt)(obj) + obj instanceof Error ? new BadRequestError(obj.message) : parseOrThrow(ImportTimelines)(obj) ); export const createTimelinesStreamFromNdJson = (ruleLimit: number) => { return [ diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/helpers.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/helpers.ts index 6f7767247396d..5539631c66a67 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/helpers.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/helpers.ts @@ -10,12 +10,8 @@ import type { Readable } from 'stream'; import { v4 as uuidv4 } from 'uuid'; import { createPromiseFromStreams } from '@kbn/utils'; -import { validate } from '@kbn/securitysolution-io-ts-utils'; -import type { ImportTimelineResultSchema } from '../../../../../../common/api/timeline'; -import { - importTimelineResultSchema, - TimelineStatusEnum, -} from '../../../../../../common/api/timeline'; +import { stringifyZodError } from '@kbn/zod-helpers'; +import { ImportTimelineResult, TimelineStatusEnum } from '../../../../../../common/api/timeline'; import type { BulkError } from '../../../../detection_engine/routes/utils'; import { createBulkErrorObject } from '../../../../detection_engine/routes/utils'; @@ -88,7 +84,7 @@ export const importTimelines = async ( maxTimelineImportExportSize: number, frameworkRequest: FrameworkRequest, isImmutable?: boolean -): Promise => { +): Promise => { const readStream = createTimelinesStreamFromNdJson(maxTimelineImportExportSize); const parsedObjects = await createPromiseFromStreams([file, ...readStream]); @@ -262,17 +258,17 @@ export const importTimelines = async ( const timelinesUpdated = importTimelineResponse.filter( (resp) => isImportRegular(resp) && resp.action === 'updateViaImport' ); - const importTimelinesRes: ImportTimelineResultSchema = { + const importTimelinesRes: ImportTimelineResult = { success: errorsResp.length === 0, success_count: successes.length, errors: errorsResp, timelines_installed: timelinesInstalled.length ?? 0, timelines_updated: timelinesUpdated.length ?? 0, }; - const [validated, errors] = validate(importTimelinesRes, importTimelineResultSchema); - if (errors != null || validated == null) { - return new Error(errors || 'Import timeline error'); + const parseResult = ImportTimelineResult.safeParse(importTimelinesRes); + if (parseResult.success && parseResult.data) { + return parseResult.data; } else { - return validated; + return new Error(stringifyZodError(parseResult.error) || 'Import timeline error'); } }; diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/index.test.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/index.test.ts index 3415df46e9ac4..5528d92d34240 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/index.test.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/index.test.ts @@ -39,7 +39,6 @@ import { describe('import timelines', () => { let server: ReturnType; - let request: ReturnType; let securitySetup: SecurityPluginSetup; let { context } = requestContextMock.createTools(); let mockGetTimeline: jest.Mock; @@ -452,48 +451,6 @@ describe('import timelines', () => { }); }); }); - - describe('request validation', () => { - beforeEach(() => { - jest.doMock('../../../saved_object/timelines', () => { - return { - getTimelineOrNull: mockGetTimeline.mockReturnValue(null), - persistTimeline: mockPersistTimeline.mockReturnValue({ - timeline: { savedObjectId: '79deb4c0-6bc1-11ea-9999-f5341fb7a189' }, - }), - }; - }); - - jest.doMock('../../../saved_object/pinned_events', () => { - return { - savePinnedEvents: mockPersistPinnedEventOnTimeline.mockReturnValue( - new Error('Test error') - ), - }; - }); - - jest.doMock('../../../saved_object/notes/saved_object', () => { - return { - persistNote: mockPersistNote, - }; - }); - }); - test('disallows invalid query', async () => { - request = requestMock.create({ - method: 'post', - path: TIMELINE_EXPORT_URL, - body: { id: 'someId' }, - }); - const importTimelinesRoute = jest.requireActual('.').importTimelinesRoute; - - importTimelinesRoute(server.router, createMockConfig(), securitySetup); - const result = server.validate(request); - - expect(result.badRequest).toHaveBeenCalledWith( - 'Invalid value {"id":"someId"}, excess properties: ["id"]' - ); - }); - }); }); describe('import timeline templates', () => { @@ -904,7 +861,7 @@ describe('import timeline templates', () => { request = requestMock.create({ method: 'post', path: TIMELINE_EXPORT_URL, - body: { id: 'someId' }, + body: { isImmutable: 1 }, }); const importTimelinesRoute = jest.requireActual('.').importTimelinesRoute; @@ -912,7 +869,7 @@ describe('import timeline templates', () => { const result = server.validate(request); expect(result.badRequest).toHaveBeenCalledWith( - 'Invalid value {"id":"someId"}, excess properties: ["id"]' + "isImmutable: Expected 'true' | 'false', received number" ); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/index.ts index be5ebc44e7faa..59a86238941ab 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/index.ts @@ -7,18 +7,23 @@ import { extname } from 'path'; import type { Readable } from 'stream'; +import { get } from 'lodash/fp'; +import type { IKibanaResponse } from '@kbn/core-http-server'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import { transformError } from '@kbn/securitysolution-es-utils'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; import { TIMELINE_IMPORT_URL } from '../../../../../../common/constants'; import type { ConfigType } from '../../../../../config'; -import { buildRouteValidationWithExcess } from '../../../../../utils/build_validation/route_validation'; import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; import { importTimelines } from './helpers'; -import { ImportTimelinesPayloadSchemaRt } from '../../../../../../common/api/timeline'; +import { + ImportTimelinesRequestBody, + type ImportTimelinesResponse, +} from '../../../../../../common/api/timeline'; import { buildFrameworkRequest } from '../../../utils/common'; export { importTimelines } from './helpers'; @@ -39,11 +44,13 @@ export const importTimelinesRoute = (router: SecuritySolutionPluginRouter, confi .addVersion( { validate: { - request: { body: buildRouteValidationWithExcess(ImportTimelinesPayloadSchemaRt) }, + request: { + body: buildRouteValidationWithZod(ImportTimelinesRequestBody), + }, }, version: '2023-10-31', }, - async (context, request, response) => { + async (context, request, response): Promise> => { try { const siemResponse = buildSiemResponse(response); const savedObjectsClient = (await context.core).savedObjects.client; @@ -52,7 +59,7 @@ export const importTimelinesRoute = (router: SecuritySolutionPluginRouter, confi } const { file, isImmutable } = request.body; - const { filename } = file.hapi; + const filename = extractFilename(file); const fileExtension = extname(filename).toLowerCase(); if (fileExtension !== '.ndjson') { @@ -69,8 +76,11 @@ export const importTimelinesRoute = (router: SecuritySolutionPluginRouter, confi frameworkRequest, isImmutable === 'true' ); - if (typeof res !== 'string') return response.ok({ body: res ?? {} }); - else throw res; + if (res instanceof Error || typeof res === 'string') { + throw res; + } else { + return response.ok({ body: res ?? {} }); + } } catch (err) { const error = transformError(err); const siemResponse = buildSiemResponse(response); @@ -82,3 +92,11 @@ export const importTimelinesRoute = (router: SecuritySolutionPluginRouter, confi } ); }; + +function extractFilename(fileObj: unknown) { + const filename = get('hapi.filename', fileObj); + if (filename && typeof filename === 'string') { + return filename; + } + throw new Error('`filename` missing in file'); +} diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/patch_timelines/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/patch_timelines/index.ts index 1c3cba9fdcb91..1297f0cb1a829 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/patch_timelines/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/patch_timelines/index.ts @@ -7,22 +7,22 @@ import { transformError } from '@kbn/securitysolution-es-utils'; import type { IKibanaResponse } from '@kbn/core/server'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; import { TIMELINE_URL } from '../../../../../../common/constants'; -import { buildRouteValidationWithExcess } from '../../../../../utils/build_validation/route_validation'; -import type { ConfigType } from '../../../../..'; - import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; -import { patchTimelineSchema } from '../../../../../../common/api/timeline'; +import { + PatchTimelineRequestBody, + type PatchTimelineResponse, +} from '../../../../../../common/api/timeline'; import { buildFrameworkRequest, TimelineStatusActions } from '../../../utils/common'; import { createTimelines } from '../create_timelines'; import { CompareTimelinesStatus } from '../../../utils/compare_timelines_status'; -import type { PatchTimelinesResponse } from '../../../../../../common/api/timeline'; -export const patchTimelinesRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { +export const patchTimelinesRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .patch({ path: TIMELINE_URL, @@ -34,11 +34,11 @@ export const patchTimelinesRoute = (router: SecuritySolutionPluginRouter, _: Con .addVersion( { validate: { - request: { body: buildRouteValidationWithExcess(patchTimelineSchema) }, + request: { body: buildRouteValidationWithZod(PatchTimelineRequestBody) }, }, version: '2023-10-31', }, - async (context, request, response): Promise> => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/persist_favorite/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/persist_favorite/index.ts index b8416b9ffe7bc..cf66c02cf9c97 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/persist_favorite/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/persist_favorite/index.ts @@ -5,14 +5,13 @@ * 2.0. */ +import type { IKibanaResponse } from '@kbn/core-http-server'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; import { TIMELINE_FAVORITE_URL } from '../../../../../../common/constants'; -import type { ConfigType } from '../../../../..'; - import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../../utils/common'; @@ -23,7 +22,7 @@ import { TimelineTypeEnum, } from '../../../../../../common/api/timeline'; -export const persistFavoriteRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { +export const persistFavoriteRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .patch({ path: TIMELINE_FAVORITE_URL, @@ -39,7 +38,11 @@ export const persistFavoriteRoute = (router: SecuritySolutionPluginRouter, _: Co request: { body: buildRouteValidationWithZod(PersistFavoriteRouteRequestBody) }, }, }, - async (context, request, response) => { + async ( + context, + request, + response + ): Promise> => { const siemResponse = buildSiemResponse(response); try { diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/resolve_timeline/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/resolve_timeline/index.ts index 09549f9b9034f..0afc7d21ae296 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/resolve_timeline/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/resolve_timeline/index.ts @@ -6,24 +6,24 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; +import type { IKibanaResponse } from '@kbn/core-http-server'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; + import type { SecuritySolutionPluginRouter } from '../../../../../types'; import { TIMELINE_RESOLVE_URL } from '../../../../../../common/constants'; -import type { ConfigType } from '../../../../..'; -import { buildRouteValidationWithExcess } from '../../../../../utils/build_validation/route_validation'; - import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../../utils/common'; -import { getTimelineQuerySchema } from '../../../../../../common/api/timeline'; -import { getTimelineTemplateOrNull, resolveTimelineOrNull } from '../../../saved_object/timelines'; -import type { - SavedTimeline, - ResolvedTimelineWithOutcomeSavedObject, +import { + ResolveTimelineRequestQuery, + type ResolveTimelineResponse, } from '../../../../../../common/api/timeline'; +import { getTimelineTemplateOrNull, resolveTimelineOrNull } from '../../../saved_object/timelines'; +import type { SavedTimeline, ResolvedTimeline } from '../../../../../../common/api/timeline'; -export const resolveTimelineRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { +export const resolveTimelineRoute = (router: SecuritySolutionPluginRouter) => { router.versioned .get({ path: TIMELINE_RESOLVE_URL, @@ -36,16 +36,16 @@ export const resolveTimelineRoute = (router: SecuritySolutionPluginRouter, _: Co { version: '2023-10-31', validate: { - request: { query: buildRouteValidationWithExcess(getTimelineQuerySchema) }, + request: { query: buildRouteValidationWithZod(ResolveTimelineRequestQuery) }, }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { try { const frameworkRequest = await buildFrameworkRequest(context, request); const query = request.query ?? {}; const { template_timeline_id: templateTimelineId, id } = query; - let res: SavedTimeline | ResolvedTimelineWithOutcomeSavedObject | null = null; + let res: SavedTimeline | ResolvedTimeline | null = null; if (templateTimelineId != null && id == null) { // Template timelineId is not a SO id, so it does not need to be updated to use resolve diff --git a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/notes/persist_notes.ts b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/notes/persist_notes.ts index a12aaeb010234..571e0f4da8616 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/notes/persist_notes.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/notes/persist_notes.ts @@ -13,7 +13,7 @@ import type { Note } from '../../../../../common/api/timeline'; export const persistNotes = async ( frameworkRequest: FrameworkRequest, timelineSavedObjectId: string, - existingNoteIds?: string[], + existingNoteIds?: string[] | null, newNotes?: Note[], overrideOwner: boolean = true ) => { diff --git a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/convert_saved_object_to_savedtimeline.ts b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/convert_saved_object_to_savedtimeline.ts index 2cde936f1c462..88054f0eb6953 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/convert_saved_object_to_savedtimeline.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/convert_saved_object_to_savedtimeline.ts @@ -16,7 +16,7 @@ import { SavedObjectTimelineType, SavedObjectTimelineStatus, } from '../../../../../common/types/timeline/saved_object'; -import type { TimelineSavedObject } from '../../../../../common/api/timeline'; +import type { TimelineResponse } from '../../../../../common/api/timeline'; import { type TimelineType, TimelineTypeEnum, @@ -49,7 +49,7 @@ const getTimelineTypeAndStatus = ( }; }; -export const convertSavedObjectToSavedTimeline = (savedObject: unknown): TimelineSavedObject => +export const convertSavedObjectToSavedTimeline = (savedObject: unknown): TimelineResponse => pipe( TimelineSavedObjectWithDraftRuntime.decode(savedObject), map((savedTimeline) => { diff --git a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/index.test.ts b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/index.test.ts index 20049a63bddba..7e25a38363e2a 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/index.test.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/index.test.ts @@ -23,8 +23,8 @@ import { getNotesByTimelineId, persistNote } from '../notes/saved_object'; import { getAllPinnedEventsByTimelineId, persistPinnedEventOnTimeline } from '../pinned_events'; import { TimelineTypeEnum } from '../../../../../common/api/timeline'; import type { - AllTimelinesResponse, - ResolvedTimelineWithOutcomeSavedObject, + GetTimelinesResponse, + ResolvedTimeline, SavedTimeline, } from '../../../../../common/api/timeline'; import { @@ -141,7 +141,7 @@ describe('saved_object', () => { pageSize: 10, pageIndex: 1, }; - let result = null as unknown as AllTimelinesResponse; + let result = null as unknown as GetTimelinesResponse; beforeEach(async () => { (convertSavedObjectToSavedTimeline as jest.Mock).mockReturnValue(mockGetTimelineValue); mockFindSavedObject = jest @@ -275,7 +275,7 @@ describe('saved_object', () => { describe('resolveTimelineOrNull', () => { let mockResolveSavedObject: jest.Mock; let mockRequest: FrameworkRequest; - let result: ResolvedTimelineWithOutcomeSavedObject | null = null; + let result: ResolvedTimeline | null = null; beforeEach(async () => { (convertSavedObjectToSavedTimeline as jest.Mock).mockReturnValue(mockResolvedTimeline); mockResolveSavedObject = jest.fn().mockReturnValue(mockResolvedSavedObject); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/index.ts index 08eeda3d8ab56..c3016164d4e7e 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/index.ts @@ -19,20 +19,17 @@ import type { Note, BareNote, PinnedEvent, - AllTimelinesResponse, + GetTimelinesResponse, ExportTimelineNotFoundError, PageInfoTimeline, - ResponseTimelines, FavoriteTimelineResponse, - ResponseTimeline, SortTimeline, - TimelineResult, + TimelineResponse, TimelineType, TimelineStatus, - ResolvedTimelineWithOutcomeSavedObject, - TimelineSavedObject, + ResolvedTimeline, SavedTimeline, - TimelineWithoutExternalRefs, + SavedTimelineWithSavedObjectId, } from '../../../../../common/api/timeline'; import { TimelineStatusEnum, TimelineTypeEnum } from '../../../../../common/api/timeline'; import type { SavedObjectTimelineWithoutExternalRefs } from '../../../../../common/types/timeline/saved_object'; @@ -49,11 +46,13 @@ import { timelineFieldsMigrator } from './field_migrator'; export { pickSavedTimeline } from './pick_saved_timeline'; export { convertSavedObjectToSavedTimeline } from './convert_saved_object_to_savedtimeline'; +type TimelineWithoutExternalRefs = Omit; + export const getTimeline = async ( request: FrameworkRequest, timelineId: string, timelineType: TimelineType | null = TimelineTypeEnum.default -): Promise => { +): Promise => { let timelineIdToUse = timelineId; try { if (timelineType === TimelineTypeEnum.template) { @@ -77,7 +76,7 @@ export const getTimeline = async ( export const getTimelineOrNull = async ( frameworkRequest: FrameworkRequest, savedObjectId: string -): Promise => { +): Promise => { let timeline = null; try { timeline = await getTimeline(frameworkRequest, savedObjectId); @@ -89,23 +88,19 @@ export const getTimelineOrNull = async ( export const resolveTimelineOrNull = async ( frameworkRequest: FrameworkRequest, savedObjectId: string -): Promise => { - let resolvedTimeline = null; +): Promise => { try { - resolvedTimeline = await resolveSavedTimeline(frameworkRequest, savedObjectId); - // eslint-disable-next-line no-empty - } catch (e) {} - return resolvedTimeline; - // } + const resolvedTimeline = await resolveSavedTimeline(frameworkRequest, savedObjectId); + return resolvedTimeline; + } catch (e) { + return null; + } }; export const getTimelineByTemplateTimelineId = async ( request: FrameworkRequest, templateTimelineId: string -): Promise<{ - totalCount: number; - timeline: TimelineSavedObject[]; -}> => { +): Promise => { const options: SavedObjectsFindOptions = { type: timelineSavedObjectType, filter: `siem-ui-timeline.attributes.templateTimelineId: "${templateTimelineId}"`, @@ -117,7 +112,7 @@ export const getTimelineByTemplateTimelineId = async ( export const getTimelineTemplateOrNull = async ( frameworkRequest: FrameworkRequest, templateTimelineId: string -): Promise => { +): Promise => { let templateTimeline = null; try { templateTimeline = await getTimelineByTemplateTimelineId(frameworkRequest, templateTimelineId); @@ -190,10 +185,7 @@ export const getExistingPrepackagedTimelines = async ( request: FrameworkRequest, countsOnly?: boolean, pageInfo?: PageInfoTimeline -): Promise<{ - totalCount: number; - timeline: TimelineSavedObject[]; -}> => { +): Promise => { const queryPageInfo = countsOnly && pageInfo == null ? { @@ -218,7 +210,7 @@ export const getAllTimeline = async ( sort: SortTimeline | null, status: TimelineStatus | null, timelineType: TimelineType | null -): Promise => { +): Promise => { const searchTerm = search != null ? search : undefined; const searchFields = ['title', 'description']; const filter = combineFilters([ @@ -291,7 +283,7 @@ export const getAllTimeline = async ( export const getDraftTimeline = async ( request: FrameworkRequest, timelineType: TimelineType | null -): Promise => { +): Promise => { const filter = combineFilters([ getTimelineTypeFilter(timelineType ?? null, TimelineStatusEnum.draft), getTimelinesCreatedAndUpdatedByCurrentUser({ request }), @@ -385,13 +377,19 @@ export const persistFavorite = async ( } }; +export interface InternalTimelineResponse { + code: number; + message: string; + timeline: TimelineResponse; +} + export const persistTimeline = async ( request: FrameworkRequest, timelineId: string | null, version: string | null, timeline: SavedTimeline, isImmutable?: boolean -): Promise => { +): Promise => { const savedObjectsClient = (await request.context.core).savedObjects.client; const userInfo = isImmutable ? ({ username: 'Elastic' } as AuthenticatedUser) : request.user; try { @@ -414,7 +412,7 @@ export const persistTimeline = async ( timeline: await getSavedTimeline(request, timelineId), }; } else if (getOr(null, 'output.statusCode', err) === 403) { - const timelineToReturn: TimelineResult = { + const timelineToReturn: TimelineResponse = { ...timeline, savedObjectId: '', version: '', @@ -439,7 +437,7 @@ export const createTimeline = async ({ timeline: SavedTimeline; savedObjectsClient: SavedObjectsClientContract; userInfo: AuthenticatedUser | null; -}) => { +}): Promise => { const { transformedFields: migratedAttributes, references } = timelineFieldsMigrator.extractFieldsToReferences({ data: pickSavedTimeline(timelineId, timeline, userInfo), @@ -479,7 +477,7 @@ const updateTimeline = async ({ savedObjectsClient: SavedObjectsClientContract; userInfo: AuthenticatedUser | null; version: string | null; -}) => { +}): Promise => { const rawTimelineSavedObject = await savedObjectsClient.get( timelineSavedObjectType, @@ -516,11 +514,12 @@ export const updatePartialSavedTimeline = async ( timelineId ); - const { transformedFields, references } = - timelineFieldsMigrator.extractFieldsToReferences({ - data: timeline, - existingReferences: currentSavedTimeline.references, - }); + const { transformedFields, references } = timelineFieldsMigrator.extractFieldsToReferences< + Omit + >({ + data: timeline, + existingReferences: currentSavedTimeline.references, + }); const timelineUpdateAttributes = pickSavedTimeline( null, @@ -588,7 +587,7 @@ export const copyTimeline = async ( request: FrameworkRequest, timeline: SavedTimeline, timelineId: string -): Promise => { +): Promise => { const savedObjectsClient = (await request.context.core).savedObjects.client; // Fetch all objects that need to be copied @@ -658,7 +657,10 @@ const resolveBasicSavedTimeline = async (request: FrameworkRequest, timelineId: }; }; -const resolveSavedTimeline = async (request: FrameworkRequest, timelineId: string) => { +const resolveSavedTimeline = async ( + request: FrameworkRequest, + timelineId: string +): Promise => { const userName = request.user?.username ?? UNAUTHENTICATED_USER; const { resolvedTimelineSavedObject, ...resolveAttributes } = await resolveBasicSavedTimeline( @@ -673,7 +675,6 @@ const resolveSavedTimeline = async (request: FrameworkRequest, timelineId: strin ]); const [notes, pinnedEvents, timeline] = timelineWithNotesAndPinnedEvents; - return { timeline: timelineWithReduxProperties(notes, pinnedEvents, timeline, userName), ...resolveAttributes, @@ -742,9 +743,9 @@ export const convertStringToBase64 = (text: string): string => Buffer.from(text) export const timelineWithReduxProperties = ( notes: Note[], pinnedEvents: PinnedEvent[], - timeline: TimelineSavedObject, + timeline: TimelineResponse, userName: string -): TimelineSavedObject => ({ +): TimelineResponse => ({ ...timeline, favorite: timeline.favorite != null && userName != null @@ -789,7 +790,7 @@ export const getSelectedTimelines = async ( ); const timelineObjects: { - timelines: TimelineSavedObject[]; + timelines: TimelineResponse[]; errors: ExportTimelineNotFoundError[]; } = savedObjects.saved_objects.reduce( (acc, savedObject) => { @@ -805,7 +806,7 @@ export const getSelectedTimelines = async ( return { errors: [...acc.errors, savedObject.error], timelines: acc.timelines }; }, { - timelines: [] as TimelineSavedObject[], + timelines: [] as TimelineResponse[], errors: [] as ExportTimelineNotFoundError[], } ); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/pick_saved_timeline.ts b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/pick_saved_timeline.ts index 50b57bf96bd5b..221e088bdab02 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/pick_saved_timeline.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/pick_saved_timeline.ts @@ -9,14 +9,14 @@ import { isEmpty } from 'lodash/fp'; import type { AuthenticatedUser } from '@kbn/security-plugin/common'; import { getUserDisplayName } from '@kbn/user-profile-components'; import { UNAUTHENTICATED_USER } from '../../../../../common/constants'; -import type { SavedTimelineWithSavedObjectId } from '../../../../../common/api/timeline'; +import type { SavedTimeline } from '../../../../../common/api/timeline'; import { TimelineTypeEnum, TimelineStatusEnum } from '../../../../../common/api/timeline'; export const pickSavedTimeline = ( timelineId: string | null, - savedTimeline: SavedTimelineWithSavedObjectId, + savedTimeline: SavedTimeline, userInfo: AuthenticatedUser | null -): SavedTimelineWithSavedObjectId => { +): SavedTimeline => { const dateNow = new Date().valueOf(); if (timelineId == null) { diff --git a/x-pack/plugins/security_solution/server/lib/timeline/utils/check_timelines_status.ts b/x-pack/plugins/security_solution/server/lib/timeline/utils/check_timelines_status.ts index a5e88a3ea04d5..caf4bee68e70f 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/utils/check_timelines_status.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/utils/check_timelines_status.ts @@ -7,9 +7,9 @@ import path, { join, resolve } from 'path'; import type { - CheckTimelineStatusRt, - TimelineSavedObject, - ImportTimelinesSchema, + TimelineResponse, + ImportTimelines, + InstallPrepackedTimelinesRequestBody, } from '../../../../common/api/timeline'; import type { FrameworkRequest } from '../../framework'; @@ -19,9 +19,9 @@ import { getExistingPrepackagedTimelines } from '../saved_object/timelines'; import { loadData, getReadables } from './common'; export const getTimelinesToUpdate = ( - timelinesFromFileSystem: ImportTimelinesSchema[], - installedTimelines: TimelineSavedObject[] -): ImportTimelinesSchema[] => { + timelinesFromFileSystem: ImportTimelines[], + installedTimelines: TimelineResponse[] +): ImportTimelines[] => { return timelinesFromFileSystem.filter((timeline) => installedTimelines.some((installedTimeline) => { return ( @@ -34,9 +34,9 @@ export const getTimelinesToUpdate = ( }; export const getTimelinesToInstall = ( - timelinesFromFileSystem: ImportTimelinesSchema[], - installedTimelines: TimelineSavedObject[] -): ImportTimelinesSchema[] => { + timelinesFromFileSystem: ImportTimelines[], + installedTimelines: TimelineResponse[] +): ImportTimelines[] => { return timelinesFromFileSystem.filter( (timeline) => !installedTimelines.some( @@ -49,11 +49,11 @@ export const checkTimelinesStatus = async ( frameworkRequest: FrameworkRequest, filePath?: string, fileName?: string -): Promise => { +): Promise => { let readStream; let timeline: { totalCount: number; - timeline: TimelineSavedObject[]; + timeline: TimelineResponse[]; }; const dir = resolve( join( @@ -75,7 +75,7 @@ export const checkTimelinesStatus = async ( }; } - return loadData<'utf-8', CheckTimelineStatusRt>( + return loadData<'utf-8', InstallPrepackedTimelinesRequestBody>( readStream, (timelinesFromFileSystem: T) => { if (Array.isArray(timelinesFromFileSystem)) { diff --git a/x-pack/plugins/security_solution/server/lib/timeline/utils/common.ts b/x-pack/plugins/security_solution/server/lib/timeline/utils/common.ts index edee5ee4cd912..259719a18bdf0 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/utils/common.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/utils/common.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type * as rt from 'io-ts'; + import { set } from '@kbn/safer-lodash-set/fp'; import readline from 'readline'; import fs from 'fs'; @@ -13,7 +13,6 @@ import { createListStream } from '@kbn/utils'; import { schema } from '@kbn/config-schema'; import type { KibanaRequest, RequestHandlerContext } from '@kbn/core/server'; -import { formatErrors } from '@kbn/securitysolution-io-ts-utils'; import type { FrameworkRequest } from '../../framework'; @@ -38,12 +37,6 @@ export const buildFrameworkRequest = async ( export const escapeHatch = schema.object({}, { unknowns: 'allow' }); -type ErrorFactory = (message: string) => Error; - -export const throwErrors = (createError: ErrorFactory) => (errors: rt.Errors) => { - throw createError(formatErrors(errors).join('\n')); -}; - export const getReadables = (dataPath: string): Promise => new Promise((resolved, reject) => { const contents: string[] = []; diff --git a/x-pack/plugins/security_solution/server/lib/timeline/utils/failure_cases.test.ts b/x-pack/plugins/security_solution/server/lib/timeline/utils/failure_cases.test.ts index e5e247c1209fe..716bacaacf5ac 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/utils/failure_cases.test.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/utils/failure_cases.test.ts @@ -26,7 +26,7 @@ import { NOT_ALLOW_UPDATE_STATUS_ERROR_MESSAGE, TEMPLATE_TIMELINE_VERSION_CONFLICT_MESSAGE, } from './failure_cases'; -import type { TimelineSavedObject } from '../../../../common/api/timeline'; +import type { TimelineResponse } from '../../../../common/api/timeline'; import { TimelineStatusEnum, TimelineTypeEnum } from '../../../../common/api/timeline'; import { mockGetTimelineValue, mockGetTemplateTimelineValue } from '../__mocks__/import_timelines'; @@ -69,7 +69,7 @@ describe('failure cases', () => { const version = null; const templateTimelineVersion = null; const templateTimelineId = null; - const existTimeline = mockGetTimelineValue as TimelineSavedObject; + const existTimeline = mockGetTimelineValue as TimelineResponse; const existTemplateTimeline = null; const result = checkIsCreateFailureCases( isHandlingTemplateTimeline, @@ -94,7 +94,7 @@ describe('failure cases', () => { const templateTimelineVersion = 1; const templateTimelineId = 'template-timeline-id-one'; const existTimeline = null; - const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineSavedObject; + const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineResponse; const result = checkIsCreateFailureCases( isHandlingTemplateTimeline, TimelineStatusEnum.active, @@ -144,7 +144,7 @@ describe('failure cases', () => { const templateTimelineVersion = null; const templateTimelineId = null; const existTimeline = { - ...(mockGetTimelineValue as TimelineSavedObject), + ...(mockGetTimelineValue as TimelineResponse), status: TimelineStatusEnum.immutable, }; const existTemplateTimeline = null; @@ -172,7 +172,7 @@ describe('failure cases', () => { const templateTimelineId = mockGetTemplateTimelineValue.templateTimelineId; const existTimeline = null; const existTemplateTimeline = { - ...(mockGetTemplateTimelineValue as TimelineSavedObject), + ...(mockGetTemplateTimelineValue as TimelineResponse), status: TimelineStatusEnum.immutable, }; const result = checkIsUpdateFailureCases( @@ -198,7 +198,7 @@ describe('failure cases', () => { const templateTimelineVersion = mockGetTemplateTimelineValue.templateTimelineVersion; const templateTimelineId = mockGetTemplateTimelineValue.templateTimelineId; const existTimeline = null; - const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineSavedObject; + const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineResponse; const result = checkIsUpdateFailureCases( isHandlingTemplateTimeline, TimelineStatusEnum.active, @@ -246,10 +246,10 @@ describe('failure cases', () => { const templateTimelineVersion = mockGetTemplateTimelineValue.templateTimelineVersion; const templateTimelineId = mockGetTemplateTimelineValue.templateTimelineId; const existTimeline = { - ...(mockGetTemplateTimelineValue as TimelineSavedObject), + ...(mockGetTemplateTimelineValue as TimelineResponse), savedObjectId: 'someOtherId', }; - const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineSavedObject; + const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineResponse; const result = checkIsUpdateFailureCases( isHandlingTemplateTimeline, TimelineStatusEnum.active, @@ -273,7 +273,7 @@ describe('failure cases', () => { const templateTimelineVersion = mockGetTemplateTimelineValue.templateTimelineVersion; const templateTimelineId = mockGetTemplateTimelineValue.templateTimelineId; const existTimeline = null; - const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineSavedObject; + const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineResponse; const result = checkIsUpdateFailureCases( isHandlingTemplateTimeline, TimelineStatusEnum.active, @@ -297,7 +297,7 @@ describe('failure cases', () => { const templateTimelineVersion = null; const templateTimelineId = null; const existTimeline = { - ...(mockGetTemplateTimelineValue as TimelineSavedObject), + ...(mockGetTemplateTimelineValue as TimelineResponse), savedObjectId: 'someOtherId', }; const existTemplateTimeline = null; @@ -326,7 +326,7 @@ describe('failure cases', () => { const templateTimelineVersion = mockGetTemplateTimelineValue.templateTimelineVersion; const templateTimelineId = mockGetTemplateTimelineValue.templateTimelineId; const existTimeline = null; - const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineSavedObject; + const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineResponse; const result = checkIsCreateViaImportFailureCases( isHandlingTemplateTimeline, TimelineStatusEnum.draft, @@ -350,7 +350,7 @@ describe('failure cases', () => { const templateTimelineVersion = mockGetTemplateTimelineValue.templateTimelineVersion; const templateTimelineId = mockGetTemplateTimelineValue.templateTimelineId; const existTimeline = null; - const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineSavedObject; + const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineResponse; const result = checkIsCreateViaImportFailureCases( isHandlingTemplateTimeline, TimelineStatusEnum.active, @@ -373,7 +373,7 @@ describe('failure cases', () => { const version = mockGetTimelineValue.version; const templateTimelineVersion = null; const templateTimelineId = null; - const existTimeline = mockGetTimelineValue as TimelineSavedObject; + const existTimeline = mockGetTimelineValue as TimelineResponse; const existTemplateTimeline = null; const result = checkIsCreateViaImportFailureCases( isHandlingTemplateTimeline, @@ -399,7 +399,7 @@ describe('failure cases', () => { const version = mockGetTimelineValue.version; const templateTimelineVersion = null; const templateTimelineId = null; - const existTimeline = mockGetTimelineValue as TimelineSavedObject; + const existTimeline = mockGetTimelineValue as TimelineResponse; const existTemplateTimeline = null; const result = checkIsUpdateViaImportFailureCases( isHandlingTemplateTimeline, @@ -424,7 +424,7 @@ describe('failure cases', () => { const templateTimelineVersion = mockGetTemplateTimelineValue.templateTimelineVersion; const templateTimelineId = mockGetTemplateTimelineValue.templateTimelineId; const existTimeline = null; - const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineSavedObject; + const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineResponse; const result = checkIsUpdateViaImportFailureCases( isHandlingTemplateTimeline, TimelineStatusEnum.active, @@ -448,7 +448,7 @@ describe('failure cases', () => { const templateTimelineVersion = mockGetTemplateTimelineValue.templateTimelineVersion; const templateTimelineId = mockGetTemplateTimelineValue.templateTimelineId; const existTimeline = null; - const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineSavedObject; + const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineResponse; const result = checkIsUpdateViaImportFailureCases( isHandlingTemplateTimeline, TimelineStatusEnum.immutable, @@ -496,10 +496,10 @@ describe('failure cases', () => { const templateTimelineVersion = mockGetTemplateTimelineValue.templateTimelineVersion; const templateTimelineId = mockGetTemplateTimelineValue.templateTimelineId; const existTimeline = { - ...(mockGetTemplateTimelineValue as TimelineSavedObject), + ...(mockGetTemplateTimelineValue as TimelineResponse), savedObjectId: 'someOtherId', }; - const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineSavedObject; + const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineResponse; const result = checkIsUpdateViaImportFailureCases( isHandlingTemplateTimeline, TimelineStatusEnum.active, @@ -523,7 +523,7 @@ describe('failure cases', () => { const templateTimelineVersion = mockGetTemplateTimelineValue.templateTimelineVersion; const templateTimelineId = mockGetTemplateTimelineValue.templateTimelineId; const existTimeline = null; - const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineSavedObject; + const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineResponse; const result = checkIsUpdateViaImportFailureCases( isHandlingTemplateTimeline, TimelineStatusEnum.active, @@ -547,7 +547,7 @@ describe('failure cases', () => { const templateTimelineVersion = mockGetTemplateTimelineValue.templateTimelineVersion; const templateTimelineId = mockGetTemplateTimelineValue.templateTimelineId; const existTimeline = null; - const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineSavedObject; + const existTemplateTimeline = mockGetTemplateTimelineValue as TimelineResponse; const result = checkIsUpdateViaImportFailureCases( isHandlingTemplateTimeline, TimelineStatusEnum.active, diff --git a/x-pack/plugins/security_solution/server/lib/timeline/utils/failure_cases.ts b/x-pack/plugins/security_solution/server/lib/timeline/utils/failure_cases.ts index 045793e2251ba..7dace57181239 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/utils/failure_cases.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/utils/failure_cases.ts @@ -6,7 +6,7 @@ */ import { isEmpty } from 'lodash/fp'; -import type { TimelineType, TimelineSavedObject } from '../../../../common/api/timeline'; +import type { TimelineType, TimelineResponse } from '../../../../common/api/timeline'; import { type TimelineStatus, TimelineStatusEnum } from '../../../../common/api/timeline'; export const UPDATE_TIMELINE_ERROR_MESSAGE = @@ -42,8 +42,8 @@ export const DEFAULT_ERROR = `Something has gone wrong. We didn't handle somethi const isUpdatingStatus = ( isHandlingTemplateTimeline: boolean, status: TimelineStatus | null | undefined, - existTimeline: TimelineSavedObject | null, - existTemplateTimeline: TimelineSavedObject | null + existTimeline: TimelineResponse | null, + existTemplateTimeline: TimelineResponse | null ) => { const obj = isHandlingTemplateTimeline ? existTemplateTimeline : existTimeline; return obj?.status === TimelineStatusEnum.immutable ? UPDATE_STATUS_ERROR_MESSAGE : null; @@ -76,8 +76,8 @@ const commonUpdateTemplateTimelineCheck = ( version: string | null, templateTimelineVersion: number | null, templateTimelineId: string | null | undefined, - existTimeline: TimelineSavedObject | null, - existTemplateTimeline: TimelineSavedObject | null + existTimeline: TimelineResponse | null, + existTemplateTimeline: TimelineResponse | null ) => { if (isHandlingTemplateTimeline) { if ( @@ -129,8 +129,8 @@ const commonUpdateTimelineCheck = ( version: string | null, templateTimelineVersion: number | null, templateTimelineId: string | null | undefined, - existTimeline: TimelineSavedObject | null, - existTemplateTimeline: TimelineSavedObject | null + existTimeline: TimelineResponse | null, + existTemplateTimeline: TimelineResponse | null ) => { if (existTimeline == null) { // timeline !exists @@ -158,8 +158,8 @@ const commonUpdateCases = ( version: string | null, templateTimelineVersion: number | null, templateTimelineId: string | null | undefined, - existTimeline: TimelineSavedObject | null, - existTemplateTimeline: TimelineSavedObject | null + existTimeline: TimelineResponse | null, + existTemplateTimeline: TimelineResponse | null ) => { if (isHandlingTemplateTimeline) { return commonUpdateTemplateTimelineCheck( @@ -193,8 +193,8 @@ const createTemplateTimelineCheck = ( version: string | null, templateTimelineVersion: number | null, templateTimelineId: string | null | undefined, - existTimeline: TimelineSavedObject | null, - existTemplateTimeline: TimelineSavedObject | null + existTimeline: TimelineResponse | null, + existTemplateTimeline: TimelineResponse | null ) => { if (isHandlingTemplateTimeline && existTemplateTimeline != null) { // Throw error to create timeline template in patch @@ -219,8 +219,8 @@ export const checkIsUpdateViaImportFailureCases = ( version: string | null, templateTimelineVersion: number | null, templateTimelineId: string | null | undefined, - existTimeline: TimelineSavedObject | null, - existTemplateTimeline: TimelineSavedObject | null + existTimeline: TimelineResponse | null, + existTemplateTimeline: TimelineResponse | null ) => { if (!isHandlingTemplateTimeline) { if (existTimeline == null) { @@ -281,8 +281,8 @@ export const checkIsUpdateFailureCases = ( version: string | null, templateTimelineVersion: number | null, templateTimelineId: string | null | undefined, - existTimeline: TimelineSavedObject | null, - existTemplateTimeline: TimelineSavedObject | null + existTimeline: TimelineResponse | null, + existTemplateTimeline: TimelineResponse | null ) => { const error = isUpdatingStatus( isHandlingTemplateTimeline, @@ -315,8 +315,8 @@ export const checkIsCreateFailureCases = ( version: string | null, templateTimelineVersion: number | null, templateTimelineId: string | null | undefined, - existTimeline: TimelineSavedObject | null, - existTemplateTimeline: TimelineSavedObject | null + existTimeline: TimelineResponse | null, + existTemplateTimeline: TimelineResponse | null ) => { if (!isHandlingTemplateTimeline && existTimeline != null) { return { @@ -346,8 +346,8 @@ export const checkIsCreateViaImportFailureCases = ( version: string | null, templateTimelineVersion: number | null, templateTimelineId: string | null | undefined, - existTimeline: TimelineSavedObject | null, - existTemplateTimeline: TimelineSavedObject | null + existTimeline: TimelineResponse | null, + existTemplateTimeline: TimelineResponse | null ) => { if (status === TimelineStatusEnum.draft) { return { diff --git a/x-pack/plugins/security_solution/server/lib/timeline/utils/timeline_object.ts b/x-pack/plugins/security_solution/server/lib/timeline/utils/timeline_object.ts index 360125e450764..44afe078f9104 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/utils/timeline_object.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/utils/timeline_object.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { TimelineSavedObject } from '../../../../common/api/timeline'; +import type { TimelineResponse } from '../../../../common/api/timeline'; import { type TimelineType, TimelineTypeEnum, @@ -27,7 +27,7 @@ export class TimelineObject { public readonly version: string | number | null; private frameworkRequest: FrameworkRequest; - public data: TimelineSavedObject | null; + public data: TimelineResponse | null; constructor({ id = null, diff --git a/x-pack/test/api_integration/services/security_solution_api.gen.ts b/x-pack/test/api_integration/services/security_solution_api.gen.ts index 95644a6d8db2e..aba6550ea9c3b 100644 --- a/x-pack/test/api_integration/services/security_solution_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_api.gen.ts @@ -28,6 +28,7 @@ import { BulkPatchRulesRequestBodyInput } from '@kbn/security-solution-plugin/co import { BulkUpdateRulesRequestBodyInput } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management/bulk_crud/bulk_update_rules/bulk_update_rules_route.gen'; import { BulkUpsertAssetCriticalityRecordsRequestBodyInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/asset_criticality/bulk_upload_asset_criticality.gen'; import { CleanDraftTimelinesRequestBodyInput } from '@kbn/security-solution-plugin/common/api/timeline/clean_draft_timelines/clean_draft_timelines_route.gen'; +import { CopyTimelineRequestBodyInput } from '@kbn/security-solution-plugin/common/api/timeline/copy_timeline/copy_timeline_route.gen'; import { CreateAlertsMigrationRequestBodyInput } from '@kbn/security-solution-plugin/common/api/detection_engine/signals_migration/create_signals_migration/create_signals_migration.gen'; import { CreateAssetCriticalityRecordRequestBodyInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/asset_criticality/create_asset_criticality.gen'; import { CreateRuleRequestBodyInput } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management/crud/create_rule/create_rule_route.gen'; @@ -272,6 +273,18 @@ If asset criticality records already exist for the specified entities, those rec .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, + /** + * Copies and returns a timeline or timeline template. + + */ + copyTimeline(props: CopyTimelineProps, kibanaSpace: string = 'default') { + return supertest + .get(routeWithNamespace('/api/timeline/_copy', kibanaSpace)) + .set('kbn-xsrf', 'true') + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .send(props.body as object); + }, createAlertsIndex(kibanaSpace: string = 'default') { return supertest .post(routeWithNamespace('/api/detection_engine/index', kibanaSpace)) @@ -1350,6 +1363,9 @@ export interface BulkUpsertAssetCriticalityRecordsProps { export interface CleanDraftTimelinesProps { body: CleanDraftTimelinesRequestBodyInput; } +export interface CopyTimelineProps { + body: CopyTimelineRequestBodyInput; +} export interface CreateAlertsMigrationProps { body: CreateAlertsMigrationRequestBodyInput; } diff --git a/x-pack/test/security_solution_api_integration/test_suites/investigation/saved_objects/trial_license_complete_tier/timeline.ts b/x-pack/test/security_solution_api_integration/test_suites/investigation/saved_objects/trial_license_complete_tier/timeline.ts index 6895d79c5aa8e..3206c14eee04d 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/investigation/saved_objects/trial_license_complete_tier/timeline.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/investigation/saved_objects/trial_license_complete_tier/timeline.ts @@ -7,7 +7,7 @@ import expect from '@kbn/expect'; import { - TimelineResult, + TimelineResponse, TimelineTypeEnum, } from '@kbn/security-solution-plugin/common/api/timeline'; import { FtrProviderContext } from '../../../../../api_integration/ftr_provider_context'; @@ -419,8 +419,8 @@ export default function ({ getService }: FtrProviderContext) { }); } -const omitTypename = (key: string, value: keyof TimelineResult) => +const omitTypename = (key: string, value: keyof TimelineResponse) => key === '__typename' ? undefined : value; -const omitTypenameInTimeline = (timeline: TimelineResult) => +const omitTypenameInTimeline = (timeline: TimelineResponse) => JSON.parse(JSON.stringify(timeline), omitTypename); diff --git a/x-pack/test/security_solution_cypress/cypress/objects/timeline.ts b/x-pack/test/security_solution_cypress/cypress/objects/timeline.ts index a5e732c86b65f..1dcaae65a3392 100644 --- a/x-pack/test/security_solution_cypress/cypress/objects/timeline.ts +++ b/x-pack/test/security_solution_cypress/cypress/objects/timeline.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { TimelineResponse } from '@kbn/security-solution-plugin/common/api/timeline'; +import type { PersistTimelineResponse } from '@kbn/security-solution-plugin/common/api/timeline'; export interface Timeline { title: string; @@ -69,7 +69,7 @@ export const getTimelineNonValidQuery = (): CompleteTimeline => ({ }); export const expectedExportedTimelineTemplate = ( - templateResponse: Cypress.Response + templateResponse: Cypress.Response ) => { const timelineTemplateBody = templateResponse.body.data.persistTimeline.timeline; @@ -113,7 +113,9 @@ export const expectedExportedTimelineTemplate = ( }; }; -export const expectedExportedTimeline = (timelineResponse: Cypress.Response) => { +export const expectedExportedTimeline = ( + timelineResponse: Cypress.Response +) => { const timelineBody = timelineResponse.body.data.persistTimeline.timeline; return { diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/timelines.ts b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/timelines.ts index 864767d0504f9..055d98a2efcfd 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/timelines.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/timelines.ts @@ -6,8 +6,9 @@ */ import type { - AllTimelinesResponse, - TimelineResponse, + DeleteTimelinesResponse, + GetTimelinesResponse, + PatchTimelineResponse, } from '@kbn/security-solution-plugin/common/api/timeline'; import type { CompleteTimeline } from '../../objects/timeline'; import { getTimeline } from '../../objects/timeline'; @@ -21,7 +22,7 @@ const mockTimeline = getTimeline(); * @returns undefined */ export const createTimeline = (timeline: CompleteTimeline = mockTimeline) => - rootRequest({ + rootRequest({ method: 'POST', url: 'api/timeline', body: { @@ -75,7 +76,7 @@ export const createTimeline = (timeline: CompleteTimeline = mockTimeline) => * @returns undefined */ export const createTimelineTemplate = (timeline: CompleteTimeline = mockTimeline) => - rootRequest({ + rootRequest({ method: 'POST', url: 'api/timeline', body: { @@ -159,7 +160,7 @@ export const favoriteTimeline = ({ }); export const getAllTimelines = () => - rootRequest({ + rootRequest({ method: 'GET', url: 'api/timelines?page_size=100&page_index=1&sort_field=updated&sort_order=desc&timeline_type=default', }); @@ -167,7 +168,7 @@ export const getAllTimelines = () => export const deleteTimelines = () => { getAllTimelines().then(($timelines) => { const savedObjectIds = $timelines.body.timeline.map((timeline) => timeline.savedObjectId); - rootRequest({ + rootRequest({ method: 'DELETE', url: 'api/timeline', body: { diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_solution_integrations.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_solution_integrations.ts index 16fb1bb48808a..580b96bfd2340 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_solution_integrations.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_solution_integrations.ts @@ -6,7 +6,7 @@ */ import { IndexedHostsAndAlertsResponse } from '@kbn/security-solution-plugin/common/endpoint/index_data'; -import { TimelineResponse } from '@kbn/security-solution-plugin/common/api/timeline'; +import { PatchTimelineResponse } from '@kbn/security-solution-plugin/common/api/timeline'; // @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail import { kibanaPackageJson } from '@kbn/repo-info'; import { type IndexedEndpointRuleAlerts } from '@kbn/security-solution-plugin/common/endpoint/data_loaders/index_endpoint_rule_alerts'; @@ -64,7 +64,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { // failing tests: https://github.com/elastic/kibana/issues/170705 describe.skip('from Timeline', () => { - let timeline: TimelineResponse; + let timeline: PatchTimelineResponse; before(async () => { log.info( diff --git a/x-pack/test/security_solution_ftr/services/timeline/index.ts b/x-pack/test/security_solution_ftr/services/timeline/index.ts index ebf6497567d81..8195f63ffc246 100644 --- a/x-pack/test/security_solution_ftr/services/timeline/index.ts +++ b/x-pack/test/security_solution_ftr/services/timeline/index.ts @@ -8,8 +8,12 @@ import { Response } from 'superagent'; import { EndpointError } from '@kbn/security-solution-plugin/common/endpoint/errors'; import { TIMELINE_DRAFT_URL, TIMELINE_URL } from '@kbn/security-solution-plugin/common/constants'; -import { TimelineResponse } from '@kbn/security-solution-plugin/common/api/timeline'; -import { TimelineInput } from '@kbn/security-solution-plugin/common/search_strategy'; +import { + DeleteTimelinesResponse, + GetDraftTimelinesResponse, + PatchTimelineResponse, + SavedTimeline, +} from '@kbn/security-solution-plugin/common/api/timeline'; import moment from 'moment'; import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; import { FtrService } from '../../../functional/ftr_provider_context'; @@ -52,7 +56,7 @@ export class TimelineTestService extends FtrService { * for display (not sure why). TO get around this, just select a date range from the user date * picker and that seems to trigger the events to be fetched. */ - async createTimeline(title: string): Promise { + async createTimeline(title: string): Promise { // Create a new timeline draft const createdTimeline = ( await this.supertest @@ -61,7 +65,7 @@ export class TimelineTestService extends FtrService { .set('elastic-api-version', '2023-10-31') .send({ timelineType: 'default' }) .then(this.getHttpResponseFailureHandler()) - .then((response) => response.body as TimelineResponse) + .then((response) => response.body as GetDraftTimelinesResponse) ).data.persistTimeline.timeline; this.log.info('Draft timeline:'); @@ -71,7 +75,7 @@ export class TimelineTestService extends FtrService { const { savedObjectId: timelineId, version } = createdTimeline; - const timelineUpdate: TimelineInput = { + const timelineUpdate: SavedTimeline = { title, // Set date range to the last 1 year dateRange: { @@ -79,7 +83,7 @@ export class TimelineTestService extends FtrService { end: moment().toISOString(), // Not sure why `start`/`end` are defined as numbers in the type, but looking at the // UI's use of it, I can see they are being set to strings, so I'm forcing a cast here - } as unknown as TimelineInput['dateRange'], + } as unknown as SavedTimeline['dateRange'], // Not sure why, but the following fields are not in the created timeline, which causes // the timeline to not be able to pull in the event for display @@ -107,9 +111,9 @@ export class TimelineTestService extends FtrService { async updateTimeline( timelineId: string, - updates: TimelineInput, + updates: SavedTimeline, version: string - ): Promise { + ): Promise { return await this.supertest .patch(TIMELINE_URL) .set('kbn-xsrf', 'true') @@ -120,11 +124,11 @@ export class TimelineTestService extends FtrService { timeline: updates, }) .then(this.getHttpResponseFailureHandler()) - .then((response) => response.body as TimelineResponse); + .then((response) => response.body as PatchTimelineResponse); } /** Deletes a timeline using it timeline id */ - async deleteTimeline(id: string | string[]): Promise { + async deleteTimeline(id: string | string[]) { await this.supertest .delete(TIMELINE_URL) .set('kbn-xsrf', 'true') @@ -133,7 +137,7 @@ export class TimelineTestService extends FtrService { savedObjectIds: Array.isArray(id) ? id : [id], }) .then(this.getHttpResponseFailureHandler()) - .then((response) => response.body as TimelineResponse); + .then((response) => response.body as DeleteTimelinesResponse); } /** @@ -173,7 +177,7 @@ export class TimelineTestService extends FtrService { /** If defined, then only alerts from the specific `agent.id` will be displayed */ endpointAgentId: string; }> - ): Promise { + ): Promise { const newTimeline = await this.createTimeline(title); const { expression, esQuery } = this.getEndpointAlertsKqlQuery(endpointAgentId); From 6f4fa579d6d3e578622ebedc62f47a9af8e13dae Mon Sep 17 00:00:00 2001 From: Shahzad Date: Mon, 30 Sep 2024 21:16:49 +0200 Subject: [PATCH 46/60] [SLO] set form index max width (#194463) ## Summary fixes https://github.com/elastic/kibana/issues/191845 !! image --- .../slo_edit/components/custom_common/index_selection.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slo_edit/components/custom_common/index_selection.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slo_edit/components/custom_common/index_selection.tsx index 1a33685a6f019..7332c94103c7e 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slo_edit/components/custom_common/index_selection.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slo_edit/components/custom_common/index_selection.tsx @@ -16,6 +16,8 @@ import { SloPublicPluginsStart } from '../../../..'; import { useKibana } from '../../../../utils/kibana_react'; import { CreateSLOForm } from '../../types'; +const BTN_MAX_WIDTH = 515; + export const DATA_VIEW_FIELD = 'indicator.params.dataViewId'; const INDEX_FIELD = 'indicator.params.index'; const TIMESTAMP_FIELD = 'indicator.params.timestampField'; @@ -67,7 +69,7 @@ export function IndexSelection({ selectedDataView }: { selectedDataView?: DataVi color: fieldState.invalid ? 'danger' : 'primary', isLoading: isDataViewsLoading, 'data-test-subj': 'indexSelection', - style: { width: '100%', maxWidth: '100%' }, + style: { width: '100%', maxWidth: BTN_MAX_WIDTH }, }} onChangeDataView={(newId: string) => { setValue( From 283f6e64c9656c97fa37be34f3e6fab2e8ad459f Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Mon, 30 Sep 2024 12:35:13 -0700 Subject: [PATCH 47/60] Revert "[Fleet][Cloud] Enrollment token table may show an empty last page #167663 (#188049)" (#194343) ## Summary Resolves #194339. This PR reverts #188049 as it inadvertently broke pagination of the enrollment tokens page. This means that #167663 will need to be re-opened and fixed in a different way. --- .../fleet/sections/agents/enrollment_token_list_page/index.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/enrollment_token_list_page/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/enrollment_token_list_page/index.tsx index a9adc6140c7c5..3a21103503ae5 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/enrollment_token_list_page/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/enrollment_token_list_page/index.tsx @@ -128,7 +128,6 @@ export const EnrollmentTokenListPage: React.FunctionComponent<{}> = () => { const agentPolicy = agentPoliciesById[enrollmentKey.policy_id]; return !agentPolicy?.is_managed; }) || []; - const filteredTotal = rowItems.length; const columns = [ { @@ -295,7 +294,7 @@ export const EnrollmentTokenListPage: React.FunctionComponent<{}> = () => { pagination={{ pageIndex: pagination.currentPage - 1, pageSize: pagination.pageSize, - totalItemCount: filteredTotal, + totalItemCount: total, pageSizeOptions, }} onChange={({ page }: { page: { index: number; size: number } }) => { From 0d421e537c7a302d88dd75cd54cae2f2b8bcfb19 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Mon, 30 Sep 2024 13:22:36 -0700 Subject: [PATCH 48/60] [Spaces Management] Fix issue with enabled features selection when space solution is unselected (#194352) ## Summary Resolves https://github.com/elastic/kibana/issues/192812 The feature PR for the new UX in Spaces Management introduced a new editing screen for Spaces. Inadvertently, it introduced a bug where the user's selection of visible features is ignored unless the user has explicitly selected a solution view. This PR fixes that issue as well as adds tests to prevent any future regressions. Also, this PR fixes an issue where the space initials could be left blank, which was another regression. ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed --------- Co-authored-by: Elena Shostak <165678770+elena-shostak@users.noreply.github.com> --- .../enabled_features/feature_table.tsx | 5 +- .../edit_space_general_tab.test.tsx | 70 +++++++++++++++++++ .../edit_space/edit_space_general_tab.tsx | 34 ++++++--- .../create_edit_space.ts | 52 ++++++++++++++ .../page_objects/space_selector_page.ts | 4 ++ 5 files changed, 156 insertions(+), 9 deletions(-) diff --git a/x-pack/plugins/spaces/public/management/components/enabled_features/feature_table.tsx b/x-pack/plugins/spaces/public/management/components/enabled_features/feature_table.tsx index bc4b586c6cd1d..4fb5786454eed 100644 --- a/x-pack/plugins/spaces/public/management/components/enabled_features/feature_table.tsx +++ b/x-pack/plugins/spaces/public/management/components/enabled_features/feature_table.tsx @@ -130,7 +130,10 @@ export class FeatureTable extends Component { const accordion = ( - + { expect(navigateSpy).toHaveBeenCalledTimes(1); }); + it('submits the disabled features list when the solution view is undefined', async () => { + const features = [ + new KibanaFeature({ + id: 'feature-1', + name: 'feature 1', + app: [], + category: DEFAULT_APP_CATEGORIES.kibana, + privileges: null, + }), + ]; + + const spaceToUpdate = { + id: 'existing-space', + name: 'Existing Space', + description: 'hey an existing space', + color: '#aabbcc', + initials: 'AB', + disabledFeatures: [], + solution: undefined, + }; + + render( + + + + ); + + // update the space visible features + const feature1Checkbox = screen.getByTestId('featureCheckbox_feature-1'); + expect(feature1Checkbox).toBeChecked(); + await act(async () => { + await userEvent.click(feature1Checkbox); + }); + await waitFor(() => { + expect(feature1Checkbox).not.toBeChecked(); + }); + + expect(screen.getByTestId('space-edit-page-user-impact-warning')).toBeInTheDocument(); + expect(screen.queryByTestId('confirmModalTitleText')).not.toBeInTheDocument(); + + const updateButton = screen.getByTestId('save-space-button'); + await act(async () => { + await userEvent.click(updateButton); + }); + + expect(screen.getByTestId('confirmModalTitleText')).toBeInTheDocument(); + + const confirmButton = screen.getByTestId('confirmModalConfirmButton'); + await act(async () => { + await userEvent.click(confirmButton); + }); + + await waitFor(() => { + expect(updateSpaceSpy).toHaveBeenCalledWith({ + ...spaceToUpdate, + imageUrl: '', + disabledFeatures: ['feature-1'], + }); + }); + + expect(navigateSpy).toHaveBeenCalledTimes(1); + }); + it('empties the disabled features list when the solution view non-classic', async () => { const features = [ new KibanaFeature({ diff --git a/x-pack/plugins/spaces/public/management/edit_space/edit_space_general_tab.tsx b/x-pack/plugins/spaces/public/management/edit_space/edit_space_general_tab.tsx index 2b7f04e4d9417..24269528916f8 100644 --- a/x-pack/plugins/spaces/public/management/edit_space/edit_space_general_tab.tsx +++ b/x-pack/plugins/spaces/public/management/edit_space/edit_space_general_tab.tsx @@ -6,7 +6,7 @@ */ import { EuiCallOut, EuiSpacer } from '@elastic/eui'; -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; import type { ScopedHistory } from '@kbn/core-application-browser'; import type { KibanaFeature } from '@kbn/features-plugin/common'; @@ -18,6 +18,7 @@ import { EditSpaceTabFooter } from './footer'; import { useEditSpaceServices } from './provider'; import type { Space } from '../../../common'; import { SOLUTION_VIEW_CLASSIC } from '../../../common/constants'; +import { getSpaceInitials } from '../../space_avatar'; import { ConfirmDeleteModal } from '../components'; import { ConfirmAlterActiveSpaceModal } from '../components/confirm_alter_active_space_modal'; import { CustomizeSpace } from '../components/customize_space'; @@ -42,6 +43,11 @@ export const EditSpaceSettingsTab: React.FC = ({ space, features, history imageUrl: imageAvatarSelected ? space.imageUrl : '', }); + // space initials are blank by default, they must be calculated + const getSpaceFromFormValues = (newFormValues: CustomizeSpaceFormValues) => { + return { ...newFormValues, initials: getSpaceInitials(newFormValues) }; + }; + const [isDirty, setIsDirty] = useState(false); // track if unsaved changes have been made const [isLoading, setIsLoading] = useState(false); // track if user has just clicked the Update button const [showUserImpactWarning, setShowUserImpactWarning] = useState(false); @@ -137,7 +143,7 @@ export const EditSpaceSettingsTab: React.FC = ({ space, features, history setIsLoading(true); let disabledFeatures: string[] | undefined; - if (spaceClone.solution === SOLUTION_VIEW_CLASSIC) { + if (!spaceClone.solution || spaceClone.solution === SOLUTION_VIEW_CLASSIC) { disabledFeatures = spaceClone.disabledFeatures; } @@ -181,13 +187,27 @@ export const EditSpaceSettingsTab: React.FC = ({ space, features, history [backToSpacesList, notifications.toasts, formValues, spacesManager, logger, props] ); + const validator = useMemo(() => new SpaceValidator(), []); + const onClickSubmit = useCallback(() => { + validator.enableValidation(); + const validationResult = validator.validateForSave( + formValues, + true, + props.allowSolutionVisibility + ); + + if (validationResult.isInvalid) { + // invalid form input fields will show the error message + return; + } + if (showUserImpactWarning) { setShowAlteringActiveSpaceDialog(true); } else { performSave({ requiresReload: false }); } - }, [performSave, showUserImpactWarning]); + }, [validator, formValues, props.allowSolutionVisibility, performSave, showUserImpactWarning]); const doShowAlteringActiveSpaceDialog = () => { return ( @@ -245,15 +265,13 @@ export const EditSpaceSettingsTab: React.FC = ({ space, features, history ); }; - const validator = new SpaceValidator(); - return ( <> {doShowAlteringActiveSpaceDialog()} {doShowConfirmDeleteSpaceDialog()} = ({ space, features, history <> = ({ space, features, history diff --git a/x-pack/test/functional/apps/spaces/solution_view_flag_enabled/create_edit_space.ts b/x-pack/test/functional/apps/spaces/solution_view_flag_enabled/create_edit_space.ts index f6f69ada3c0c1..8695077eae74e 100644 --- a/x-pack/test/functional/apps/spaces/solution_view_flag_enabled/create_edit_space.ts +++ b/x-pack/test/functional/apps/spaces/solution_view_flag_enabled/create_edit_space.ts @@ -5,12 +5,14 @@ * 2.0. */ +import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const PageObjects = getPageObjects(['common', 'settings', 'security', 'spaceSelector']); const testSubjects = getService('testSubjects'); + const spacesService = getService('spaces'); const find = getService('find'); describe('edit space', () => { @@ -69,5 +71,55 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await testSubjects.missingOrFail('searchSideNav'); }); }); + + describe('API-created Space', () => { + before(async () => { + await spacesService.create({ + id: 'foo-space', + name: 'Foo Space', + disabledFeatures: [], + color: '#AABBCC', + }); + }); + + after(async () => { + await spacesService.delete('foo-space'); + }); + + it('enabled features can be changed while the solution view remains unselected', async () => { + const securityFeatureCheckboxId = 'featureCategoryCheckbox_securitySolution'; + + await PageObjects.common.navigateToUrl('management', 'kibana/spaces/edit/foo-space', { + shouldUseHashForSubUrl: false, + }); + + await testSubjects.existOrFail('spaces-view-page'); + + // ensure security feature is selected by default + expect(await testSubjects.isChecked(securityFeatureCheckboxId)).to.be(true); + + // Do not set a solution view first! + + await PageObjects.spaceSelector.toggleFeatureCategoryCheckbox('securitySolution'); + // + // ensure security feature now unselected + expect(await testSubjects.isChecked(securityFeatureCheckboxId)).to.be(false); + + await testSubjects.existOrFail('space-edit-page-user-impact-warning'); + + await PageObjects.spaceSelector.clickSaveSpaceCreation(); + + await testSubjects.click('confirmModalConfirmButton'); + + await testSubjects.existOrFail('spaces-view-page'); + + await testSubjects.click('foo-space-hyperlink'); + + await testSubjects.existOrFail('spaces-view-page'); + + // ensure security feature is still unselected + expect(await testSubjects.isChecked(securityFeatureCheckboxId)).to.be(false); + }); + }); }); } diff --git a/x-pack/test/functional/page_objects/space_selector_page.ts b/x-pack/test/functional/page_objects/space_selector_page.ts index e5afbd78fe767..987b03533b480 100644 --- a/x-pack/test/functional/page_objects/space_selector_page.ts +++ b/x-pack/test/functional/page_objects/space_selector_page.ts @@ -204,6 +204,10 @@ export class SpaceSelectorPageObject extends FtrService { await this.testSubjects.click(`featureCategoryButton_${categoryName}`); } + async toggleFeatureCategoryCheckbox(categoryName: string) { + await this.testSubjects.click(`featureCategoryCheckbox_${categoryName}`); + } + async clickOnDescriptionOfSpace() { await this.testSubjects.click('descriptionSpaceText'); } From d89cac22d243d4461fcba3ce87b913ac582f4a44 Mon Sep 17 00:00:00 2001 From: Maryam Saeidi Date: Mon, 30 Sep 2024 22:35:21 +0200 Subject: [PATCH 49/60] [Alert details page] Add view logs to each condition for the custom threshold rule (#193839) Closes #188091 ## Summary This PR moves the view log link to each condition chart: |Before|After| |---|---| |![image](https://github.com/user-attachments/assets/534f607b-a780-4d1e-b6e2-f5db3220547d)|![image](https://github.com/user-attachments/assets/b413234f-0ee8-48fd-83d2-8ad20e35f1c9))| --- .../alert_details_app_section.test.tsx.snap | 1 + .../alert_details_app_section.test.tsx | 39 ++-- .../alert_details_app_section.tsx | 178 ++++++++---------- .../mocks/custom_threshold_rule.ts | 1 + .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - 7 files changed, 97 insertions(+), 128 deletions(-) diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/__snapshots__/alert_details_app_section.test.tsx.snap b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/__snapshots__/alert_details_app_section.test.tsx.snap index efa0222912f4f..79c58c84a1f30 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/__snapshots__/alert_details_app_section.test.tsx.snap +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/__snapshots__/alert_details_app_section.test.tsx.snap @@ -49,6 +49,7 @@ Array [ "metrics": Array [ Object { "aggType": "count", + "filter": "host.name: host-1", "name": "A", }, ], diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx index 553ca19787d4f..d16df6b6120df 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx @@ -6,7 +6,6 @@ */ import React from 'react'; -import { EuiLink } from '@elastic/eui'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { coreMock as mockCoreMock } from '@kbn/core/public/mocks'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; @@ -77,7 +76,6 @@ jest.mock('../../../../utils/kibana_react', () => ({ describe('AlertDetailsAppSection', () => { const queryClient = new QueryClient(); - const mockedSetAlertSummaryFields = jest.fn(); const mockedSetRelatedAlertsKuery = jest.fn(); const renderComponent = ( @@ -90,7 +88,6 @@ describe('AlertDetailsAppSection', () => { @@ -109,27 +106,6 @@ describe('AlertDetailsAppSection', () => { expect(result.getByTestId('thresholdRule-2000-2500')).toBeTruthy(); }); - it('should render additional alert summary fields', async () => { - renderComponent(); - - expect(mockedSetAlertSummaryFields).toBeCalledTimes(2); - expect(mockedSetAlertSummaryFields).toBeCalledWith([ - { - label: 'Related logs', - value: ( - - - View related logs - - - ), - }, - ]); - }); - it('should render annotations', async () => { const mockedRuleConditionChart = jest.fn(() =>
); (RuleConditionChart as jest.Mock).mockImplementation(mockedRuleConditionChart); @@ -145,7 +121,7 @@ describe('AlertDetailsAppSection', () => { it('should set relatedAlertsKuery', async () => { renderComponent(); - expect(mockedSetAlertSummaryFields).toBeCalledTimes(2); + expect(mockedSetRelatedAlertsKuery).toBeCalledTimes(1); expect(mockedSetRelatedAlertsKuery).toHaveBeenLastCalledWith( '(tags: "tag 1" or tags: "tag 2") or (host.name: "host-1" or kibana.alert.group.value: "host-1")' ); @@ -155,22 +131,33 @@ describe('AlertDetailsAppSection', () => { const result = renderComponent(); expect(result.getByTestId('chartTitle-0').textContent).toBe( - 'Equation result for count (all documents)' + 'Equation result for count (host.name: host-1)' ); + expect((result.getByTestId('viewLogs-0') as any).href).toBe('http://localhost/view-in-app-url'); + expect(result.getByTestId('chartTitle-1').textContent).toBe( 'Equation result for max (system.cpu.user.pct)' ); + expect((result.getByTestId('viewLogs-1') as any).href).toBe('http://localhost/view-in-app-url'); + expect(result.getByTestId('chartTitle-2').textContent).toBe( 'Equation result for min (system.memory.used.pct)' ); + expect((result.getByTestId('viewLogs-2') as any).href).toBe('http://localhost/view-in-app-url'); + expect(result.getByTestId('chartTitle-3').textContent).toBe( 'Equation result for min (system.memory.used.pct) + min (system.memory.used.pct) + min (system.memory.used.pct) + min (system.memory.used.pct...' ); + expect((result.getByTestId('viewLogs-3') as any).href).toBe('http://localhost/view-in-app-url'); + expect(result.getByTestId('chartTitle-4').textContent).toBe( 'Equation result for min (system.memory.used.pct) + min (system.memory.used.pct)' ); + expect((result.getByTestId('viewLogs-4') as any).href).toBe('http://localhost/view-in-app-url'); + expect(result.getByTestId('chartTitle-5').textContent).toBe( 'Equation result for min (system.memory.used.pct) + min (system.memory.used.pct) + min (system.memory.used.pct)' ); + expect((result.getByTestId('viewLogs-5') as any).href).toBe('http://localhost/view-in-app-url'); }); }); diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx index cb7cbd6fca914..a7ec41f4ab660 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx @@ -11,6 +11,7 @@ import React, { useEffect, useState } from 'react'; import { EuiFlexGroup, EuiFlexItem, + EuiIcon, EuiLink, EuiPanel, EuiSpacer, @@ -36,7 +37,6 @@ import { getRelatedAlertKuery } from '../../../../../common/utils/alerting/get_r import { useLicense } from '../../../../hooks/use_license'; import { useKibana } from '../../../../utils/kibana_react'; import { metricValueFormatter } from '../../../../../common/custom_threshold_rule/metric_value_formatter'; -import { AlertSummaryField } from '../../../..'; import { AlertParams } from '../../types'; import { Threshold } from '../custom_threshold'; import { CustomThresholdRule, CustomThresholdAlert } from '../types'; @@ -49,7 +49,6 @@ import { generateChartTitleAndTooltip } from './helpers/generate_chart_title_and interface AppSectionProps { alert: CustomThresholdAlert; rule: CustomThresholdRule; - setAlertSummaryFields: React.Dispatch>; setRelatedAlertsKuery: React.Dispatch>; } @@ -57,7 +56,6 @@ interface AppSectionProps { export default function AlertDetailsAppSection({ alert, rule, - setAlertSummaryFields, setRelatedAlertsKuery, }: AppSectionProps) { const services = useKibana().services; @@ -73,7 +71,6 @@ export default function AlertDetailsAppSection({ const hasLogRateAnalysisLicense = hasAtLeast('platinum'); const [dataView, setDataView] = useState(); const [, setDataViewError] = useState(); - const [viewInAppUrl, setViewInAppUrl] = useState(); const [timeRange, setTimeRange] = useState({ from: 'now-15m', to: 'now' }); const ruleParams = rule.params as RuleTypeParams & AlertParams; const chartProps = { @@ -123,48 +120,6 @@ export default function AlertDetailsAppSection({ setTimeRange(getPaddedAlertTimeRange(alertStart!, alertEnd)); }, [alertStart, alertEnd]); - useEffect(() => { - const appUrl = getViewInAppUrl({ - dataViewId: dataView?.id, - groups, - logsExplorerLocator: locators.get(LOGS_EXPLORER_LOCATOR_ID), - metrics: ruleParams.criteria[0]?.metrics, - searchConfiguration: - ruleParams.searchConfiguration as SearchConfigurationWithExtractedReferenceType, - startedAt: alertStart, - endedAt: alertEnd, - }); - - setViewInAppUrl(appUrl); - }, [dataView, alertStart, alertEnd, groups, ruleParams, locators]); - - useEffect(() => { - const alertSummaryFields = []; - - alertSummaryFields.push({ - label: i18n.translate( - 'xpack.observability.customThreshold.rule.alertDetailsAppSection.summaryField.relatedLogs', - { - defaultMessage: 'Related logs', - } - ), - value: ( - - - {i18n.translate('xpack.observability.alertDetailsAppSection.a.viewRelatedLogsLabel', { - defaultMessage: 'View related logs', - })} - - - ), - }); - - setAlertSummaryFields(alertSummaryFields); - }, [viewInAppUrl, setAlertSummaryFields]); - useEffect(() => { const initDataView = async () => { const ruleSearchConfiguration = ruleParams.searchConfiguration; @@ -186,57 +141,88 @@ export default function AlertDetailsAppSection({ return ( - {ruleParams.criteria.map((criterion, index) => ( - - - - -

{chartTitleAndTooltip[index].title}

-
-
- - - - - metricValueFormatter( - d, - criterion.metrics[0] ? criterion.metrics[0].name : undefined - ) - } - title={i18n.translate( - 'xpack.observability.customThreshold.rule.alertDetailsAppSection.thresholdTitle', - { - defaultMessage: 'Threshold breached', + {ruleParams.criteria.map((criterion, index) => { + const appUrl = getViewInAppUrl({ + dataViewId: dataView?.id, + groups, + logsExplorerLocator: locators.get(LOGS_EXPLORER_LOCATOR_ID), + metrics: criterion?.metrics, + searchConfiguration: + ruleParams.searchConfiguration as SearchConfigurationWithExtractedReferenceType, + startedAt: alertStart, + endedAt: alertEnd, + }); + + return ( + + + + + + +

+ {chartTitleAndTooltip[index].title} +

+
+
+
+ + + +   + {i18n.translate( + 'xpack.observability.customThreshold.rule.alertDetailsAppSection.openInDiscoverLabel', + { + defaultMessage: 'Open in Discover', + } + )} + + +
+ + + + + metricValueFormatter( + d, + criterion.metrics[0] ? criterion.metrics[0].name : undefined + ) } - )} - comparator={criterion.comparator} - /> - - - - - -
-
- ))} + title={i18n.translate( + 'xpack.observability.customThreshold.rule.alertDetailsAppSection.thresholdTitle', + { + defaultMessage: 'Threshold breached', + } + )} + comparator={criterion.comparator} + /> +
+ + + +
+
+
+ ); + })} {hasLogRateAnalysisLicense && ( )} diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/mocks/custom_threshold_rule.ts b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/mocks/custom_threshold_rule.ts index efa32473e0b44..c1db31d991c28 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/mocks/custom_threshold_rule.ts +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/mocks/custom_threshold_rule.ts @@ -66,6 +66,7 @@ export const buildCustomThresholdRule = ( { name: 'A', aggType: Aggregators.COUNT, + filter: 'host.name: host-1', }, ], threshold: [2000], diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index f012f3cdf627e..d1d4e79320a21 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -32085,7 +32085,6 @@ "xpack.observability.alertDetails.tab.overviewLabel": "Aperçu", "xpack.observability.alertDetails.untrackAlert": "Marquer comme non suivi", "xpack.observability.alertDetails.viewRuleDetails": "Accéder aux détails de la règle", - "xpack.observability.alertDetailsAppSection.a.viewRelatedLogsLabel": "Afficher les logs associés", "xpack.observability.alertDetailsPage.alertHistory.alertsTriggered": "Alertes déclenchées", "xpack.observability.alertDetailsPage.alertHistory.avgTimeToRecover": "Temps moyen de récupération", "xpack.observability.alertDetailsPage.alertHistory.chartTitle": "Historique des alertes", @@ -32198,7 +32197,6 @@ "xpack.observability.customThreshold.rule.aggregators.p99": "99e centile de {metric}", "xpack.observability.customThreshold.rule.aggregators.rate": "Taux de {metric}", "xpack.observability.customThreshold.rule.aggregators.sum": "Somme de {metric}", - "xpack.observability.customThreshold.rule.alertDetailsAppSection.summaryField.relatedLogs": "Logs associés", "xpack.observability.customThreshold.rule.alertDetailsAppSection.thresholdTitle": "Seuil dépassé", "xpack.observability.customThreshold.rule.alertDetailUrlActionVariableDescription": "Lien vers l’affichage de résolution des problèmes d’alerte pour voir plus de contextes et de détails. La chaîne sera vide si server.publicBaseUrl n'est pas configuré.", "xpack.observability.customThreshold.rule.alertFlyout.addCondition": "Ajouter une condition", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 71e2496a7d526..75cf864832ceb 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -31829,7 +31829,6 @@ "xpack.observability.alertDetails.tab.overviewLabel": "概要", "xpack.observability.alertDetails.untrackAlert": "未追跡に設定", "xpack.observability.alertDetails.viewRuleDetails": "ルール詳細に移動", - "xpack.observability.alertDetailsAppSection.a.viewRelatedLogsLabel": "関連ログを表示", "xpack.observability.alertDetailsPage.alertHistory.alertsTriggered": "アラートがトリガーされました", "xpack.observability.alertDetailsPage.alertHistory.avgTimeToRecover": "回復までの平均時間", "xpack.observability.alertDetailsPage.alertHistory.chartTitle": "アラート履歴", @@ -31942,7 +31941,6 @@ "xpack.observability.customThreshold.rule.aggregators.p99": "{metric}の99パーセンタイル", "xpack.observability.customThreshold.rule.aggregators.rate": "{metric}の比率", "xpack.observability.customThreshold.rule.aggregators.sum": "{metric}の合計", - "xpack.observability.customThreshold.rule.alertDetailsAppSection.summaryField.relatedLogs": "関連ログ", "xpack.observability.customThreshold.rule.alertDetailsAppSection.thresholdTitle": "しきい値を超えました", "xpack.observability.customThreshold.rule.alertDetailUrlActionVariableDescription": "アラートトラブルシューティングビューにリンクして、さらに詳しい状況や詳細を確認できます。server.publicBaseUrlが構成されていない場合は、空の文字列になります。", "xpack.observability.customThreshold.rule.alertFlyout.addCondition": "条件を追加", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 272cc11bfa08b..d7f138cdc84a2 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -31872,7 +31872,6 @@ "xpack.observability.alertDetails.tab.overviewLabel": "概览", "xpack.observability.alertDetails.untrackAlert": "标记为已取消跟踪", "xpack.observability.alertDetails.viewRuleDetails": "前往规则详情", - "xpack.observability.alertDetailsAppSection.a.viewRelatedLogsLabel": "查看相关日志", "xpack.observability.alertDetailsPage.alertHistory.alertsTriggered": "已触发告警", "xpack.observability.alertDetailsPage.alertHistory.avgTimeToRecover": "恢复的平均时间", "xpack.observability.alertDetailsPage.alertHistory.chartTitle": "告警历史记录", @@ -31985,7 +31984,6 @@ "xpack.observability.customThreshold.rule.aggregators.p99": "{metric} 的第 99 个百分位", "xpack.observability.customThreshold.rule.aggregators.rate": "{metric} 的比率", "xpack.observability.customThreshold.rule.aggregators.sum": "{metric} 的总和", - "xpack.observability.customThreshold.rule.alertDetailsAppSection.summaryField.relatedLogs": "相关日志", "xpack.observability.customThreshold.rule.alertDetailsAppSection.thresholdTitle": "超出阈值", "xpack.observability.customThreshold.rule.alertDetailUrlActionVariableDescription": "链接到告警故障排除视图获取进一步的上下文和详情。如果未配置 server.publicBaseUrl,这将为空字符串。", "xpack.observability.customThreshold.rule.alertFlyout.addCondition": "添加条件", From 6792cb4dca5adecf1a48a4d052dae603db5772e3 Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Mon, 30 Sep 2024 14:22:37 -0700 Subject: [PATCH 50/60] Revert "[UII] Fix client-side validation for agent policy timeout fields (#191674)" (#194338) ## Summary Resolves #194221. This PR reverts commit f29bf1c3113de90fc0ca08bf7a59a33d53638940. Timeout fields should be clearable with undefined value or zero. --- .../agent_policy/components/agent_policy_validation.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_validation.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_validation.tsx index 109e62b0e0de4..1e81e9fc6bbc3 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_validation.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_validation.tsx @@ -38,20 +38,20 @@ export const agentPolicyFormValidation = ( errors.namespace = [namespaceValidation.error]; } - if (agentPolicy.unenroll_timeout !== undefined && agentPolicy.unenroll_timeout <= 0) { + if (agentPolicy.unenroll_timeout && agentPolicy.unenroll_timeout < 0) { errors.unenroll_timeout = [ , ]; } - if (agentPolicy.inactivity_timeout !== undefined && agentPolicy.inactivity_timeout <= 0) { + if (agentPolicy.inactivity_timeout && agentPolicy.inactivity_timeout < 0) { errors.inactivity_timeout = [ , ]; } From 6ed731cad5e4f06e985c0521873054adfe2d327c Mon Sep 17 00:00:00 2001 From: Sandra G Date: Mon, 30 Sep 2024 19:07:01 -0400 Subject: [PATCH 51/60] [Obs AI Assistant] Serverless API integration tests (#192219) Tests for serverless - copies over and modifies all tests from stateful to work in serverless. ~~deployment agnostic tests do not yet support enterprise license for stateful, so are tests don't yet qualify as being deployment agnostic~~. Given how difficult it is to see differences from the stateful tests, I've added PR comments where I've changed something that might be of interest. - changes to `createObservabilityAIAssistantApiClient` to use supertest without basic auth and accept headers for serverless and use roles - removes creating persisted users when tests start and [use roles](https://github.com/elastic/kibana/blob/main/x-pack/test_serverless/README.md#roles-based-testing) within tests. its not possible to create custom users with the serverless test framework at the moment. See https://github.com/elastic/kibana/issues/192711 Skipped tests - knowledge base tests https://github.com/elastic/kibana/issues/192886 - any test suite that uses the LLM proxy has been skipped on MKI https://github.com/elastic/kibana/issues/192751 - all tests that depend on the config.modelId skipped in MKI https://github.com/elastic/kibana/issues/192757 TODO: - [x] move over remaining tests - [x] test in MKI environment before merging - [x] create issues for skipped tests - [ ] this will not run on MKI (after merging) unless we ping the appex-qa team to add it to the pipeline. this is due to creating a separate config. ask appex-qa team to add our config. Followup / related issues to be tracked in a newly created issue: - [ ] https://github.com/elastic/kibana/issues/192757 - [ ] https://github.com/elastic/kibana/issues/192886 - [ ] https://github.com/elastic/kibana/issues/192751 - [ ] https://github.com/elastic/kibana/issues/192701 - [ ] https://github.com/elastic/kibana/issues/192497 - [ ] https://github.com/elastic/kibana/issues/192711 - [ ] https://github.com/elastic/kibana/issues/192718 - [ ] serverless functional tests - [ ] inquire with ml-ui-team to have the ability to delete system indices which we do after uninstalling tiny elser with .ml indices --- .buildkite/ftr_oblt_serverless_configs.yml | 1 + .github/CODEOWNERS | 1 + .../common/conversation_complete.ts | 3 +- .../service/knowledge_base_service/index.ts | 16 +- .../tests/knowledge_base/helpers.ts | 3 +- .../ai_assistant/common/action_connectors.ts | 77 +++ .../common/ftr_provider_context.ts | 18 + .../observability_ai_assistant_api_client.ts | 191 +++++++ .../observability/ai_assistant/config.ts | 34 ++ .../ai_assistant/tests/chat/chat.spec.ts | 215 +++++++ .../tests/complete/complete.spec.ts | 528 ++++++++++++++++++ .../complete/functions/elasticsearch.spec.ts | 126 +++++ .../tests/complete/functions/helpers.ts | 75 +++ .../complete/functions/summarize.spec.ts | 96 ++++ .../tests/connectors/connectors.spec.ts | 117 ++++ .../tests/conversations/conversations.spec.ts | 291 ++++++++++ .../tests/conversations/helpers.ts | 106 ++++ .../observability/ai_assistant/tests/index.ts | 26 + .../tests/knowledge_base/helpers.ts | 20 + .../knowledge_base/knowledge_base.spec.ts | 278 +++++++++ .../knowledge_base_setup.spec.ts | 54 ++ .../knowledge_base_status.spec.ts | 75 +++ .../knowledge_base_user_instructions.spec.ts | 354 ++++++++++++ .../public_complete/public_complete.spec.ts | 319 +++++++++++ 24 files changed, 3014 insertions(+), 10 deletions(-) create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/action_connectors.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/ftr_provider_context.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/observability_ai_assistant_api_client.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/config.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/chat/chat.spec.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/complete.spec.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/functions/elasticsearch.spec.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/functions/helpers.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/functions/summarize.spec.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/connectors/connectors.spec.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/conversations/conversations.spec.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/conversations/helpers.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/index.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/helpers.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base.spec.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_setup.spec.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_status.spec.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_user_instructions.spec.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/public_complete/public_complete.spec.ts diff --git a/.buildkite/ftr_oblt_serverless_configs.yml b/.buildkite/ftr_oblt_serverless_configs.yml index cb03e060b86e7..fbf0406f37be4 100644 --- a/.buildkite/ftr_oblt_serverless_configs.yml +++ b/.buildkite/ftr_oblt_serverless_configs.yml @@ -12,6 +12,7 @@ enabled: - x-pack/test_serverless/api_integration/test_suites/observability/config.feature_flags.ts - x-pack/test_serverless/api_integration/test_suites/observability/common_configs/config.group1.ts - x-pack/test_serverless/api_integration/test_suites/observability/fleet/config.ts + - x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/config.ts - x-pack/test_serverless/functional/test_suites/observability/config.ts - x-pack/test_serverless/functional/test_suites/observability/config.examples.ts - x-pack/test_serverless/functional/test_suites/observability/config.feature_flags.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7811e4409d905..35d8fa1caedab 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1109,6 +1109,7 @@ packages/kbn-monaco/src/esql @elastic/kibana-esql # 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 +x-pack/test_serverless/**/test_suites/observability/ai_assistant @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. diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts index c1bd72e285c72..3c4e2cd609f8b 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts @@ -104,7 +104,8 @@ export type StreamingChatResponseEvent = | ConversationUpdateEvent | MessageAddEvent | ChatCompletionErrorEvent - | TokenCountEvent; + | TokenCountEvent + | BufferFlushEvent; export type StreamingChatResponseEventWithoutError = Exclude< StreamingChatResponseEvent, diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts index 679d59a57dbc8..ee977b30f5cc7 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts @@ -47,8 +47,8 @@ export interface RecalledEntry { function isModelMissingOrUnavailableError(error: Error) { return ( error instanceof errors.ResponseError && - (error.body.error.type === 'resource_not_found_exception' || - error.body.error.type === 'status_exception') + (error.body?.error?.type === 'resource_not_found_exception' || + error.body?.error?.type === 'status_exception') ); } function isCreateModelValidationError(error: Error) { @@ -127,7 +127,7 @@ export class KnowledgeBaseService { }; const installModel = async () => { - this.dependencies.logger.info('Installing ELSER model'); + this.dependencies.logger.info(`Installing ${elserModelId} model`); try { await this.dependencies.esClient.asInternalUser.ml.putTrainedModel( { @@ -146,12 +146,12 @@ export class KnowledgeBaseService { throw error; } } - this.dependencies.logger.info('Finished installing ELSER model'); + this.dependencies.logger.info(`Finished installing ${elserModelId} model`); }; const pollForModelInstallCompleted = async () => { await pRetry(async () => { - this.dependencies.logger.info('Polling installation of ELSER model'); + this.dependencies.logger.info(`Polling installation of ${elserModelId} model`); const modelInstalledAndReady = await isModelInstalledAndReady(); if (!modelInstalledAndReady) { throwKnowledgeBaseNotReady({ @@ -169,7 +169,7 @@ export class KnowledgeBaseService { wait_for: 'fully_allocated', }); } catch (error) { - this.dependencies.logger.debug('Error starting model deployment'); + this.dependencies.logger.debug(`Error starting ${elserModelId} model deployment`); this.dependencies.logger.debug(error); if (!isModelMissingOrUnavailableError(error)) { throw error; @@ -191,13 +191,13 @@ export class KnowledgeBaseService { return Promise.resolve(); } - this.dependencies.logger.debug('Model is not allocated yet'); + this.dependencies.logger.debug(`${elserModelId} model is not allocated yet`); this.dependencies.logger.debug(() => JSON.stringify(response)); throw gatewayTimeout(); }, retryOptions); - this.dependencies.logger.info('Model is ready'); + this.dependencies.logger.info(`${elserModelId} model is ready`); this.ensureTaskScheduled(); }; diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/helpers.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/helpers.ts index 1818203f737c0..91286dab811fc 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/helpers.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/helpers.ts @@ -21,8 +21,9 @@ export async function createKnowledgeBaseModel(ml: ReturnType) { diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/action_connectors.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/action_connectors.ts new file mode 100644 index 0000000000000..297a110ad2211 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/action_connectors.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ToolingLog } from '@kbn/tooling-log'; +import type { + InternalRequestHeader, + RoleCredentials, + SupertestWithoutAuthProviderType, +} from '../../../../../shared/services'; + +export async function deleteActionConnector({ + supertest, + connectorId, + log, + roleAuthc, + internalReqHeader, +}: { + supertest: SupertestWithoutAuthProviderType; + connectorId: string; + log: ToolingLog; + roleAuthc: RoleCredentials; + internalReqHeader: InternalRequestHeader; +}) { + try { + await supertest + .delete(`/api/actions/connector/${connectorId}`) + .set(roleAuthc.apiKeyHeader) + .set(internalReqHeader) + .expect(204); + } catch (e) { + log.error(`Failed to delete action connector with id ${connectorId} due to: ${e}`); + throw e; + } +} + +export async function createProxyActionConnector({ + log, + supertest, + port, + roleAuthc, + internalReqHeader, +}: { + log: ToolingLog; + supertest: SupertestWithoutAuthProviderType; + port: number; + roleAuthc: RoleCredentials; + internalReqHeader: InternalRequestHeader; +}) { + try { + const res = await supertest + .post('/api/actions/connector') + .set(roleAuthc.apiKeyHeader) + .set(internalReqHeader) + .send({ + name: 'OpenAI Proxy', + connector_type_id: '.gen-ai', + config: { + apiProvider: 'OpenAI', + apiUrl: `http://localhost:${port}`, + }, + secrets: { + apiKey: 'my-api-key', + }, + }) + .expect(200); + + const connectorId = res.body.id as string; + return connectorId; + } catch (e) { + log.error(`Failed to create action connector due to: ${e}`); + throw e; + } +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/ftr_provider_context.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/ftr_provider_context.ts new file mode 100644 index 0000000000000..dc8dbbed7536e --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/ftr_provider_context.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { GenericFtrProviderContext } from '@kbn/test'; +import { InheritedServices, InheritedFtrProviderContext } from '../../../../services'; +import { ObservabilityAIAssistantApiClient } from './observability_ai_assistant_api_client'; + +export type ObservabilityAIAssistantServices = InheritedServices & { + observabilityAIAssistantAPIClient: ( + context: InheritedFtrProviderContext + ) => Promise; +}; + +export type FtrProviderContext = GenericFtrProviderContext; diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/observability_ai_assistant_api_client.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/observability_ai_assistant_api_client.ts new file mode 100644 index 0000000000000..bd54243ab93f6 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/observability_ai_assistant_api_client.ts @@ -0,0 +1,191 @@ +/* + * Copyright 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 { + APIReturnType, + ObservabilityAIAssistantAPIClientRequestParamsOf, + ObservabilityAIAssistantAPIEndpoint, +} from '@kbn/observability-ai-assistant-plugin/public'; +import { formatRequest } from '@kbn/server-route-repository'; +import supertest from 'supertest'; +import { Subtract } from 'utility-types'; +import { format } from 'url'; +import { Config } from '@kbn/test'; +import { InheritedFtrProviderContext } from '../../../../services'; +import type { InternalRequestHeader, RoleCredentials } from '../../../../../shared/services'; + +export function getObservabilityAIAssistantApiClient({ + svlSharedConfig, +}: { + svlSharedConfig: Config; +}) { + const kibanaServer = svlSharedConfig.get('servers.kibana'); + const cAuthorities = svlSharedConfig.get('servers.kibana.certificateAuthorities'); + + const url = format({ + ...kibanaServer, + auth: false, // don't use auth in serverless + }); + + return createObservabilityAIAssistantApiClient(supertest.agent(url, { ca: cAuthorities })); +} + +type ObservabilityAIAssistantApiClientKey = 'slsUser'; +export type ObservabilityAIAssistantApiClient = Record< + ObservabilityAIAssistantApiClientKey, + Awaited> +>; +export function createObservabilityAIAssistantApiClient(st: supertest.Agent) { + return ( + options: { + type?: 'form-data'; + endpoint: TEndpoint; + roleAuthc: RoleCredentials; + internalReqHeader: InternalRequestHeader; + } & ObservabilityAIAssistantAPIClientRequestParamsOf & { + params?: { query?: { _inspect?: boolean } }; + } + ): SupertestReturnType => { + const { endpoint, type, roleAuthc, internalReqHeader } = options; + + const params = 'params' in options ? (options.params as Record) : {}; + + const { method, pathname, version } = formatRequest(endpoint, params.path); + const url = format({ pathname, query: params?.query }); + + const headers: Record = { ...internalReqHeader, ...roleAuthc.apiKeyHeader }; + + if (version) { + headers['Elastic-Api-Version'] = version; + } + + let res: supertest.Test; + if (type === 'form-data') { + const fields: Array<[string, any]> = Object.entries(params.body); + const formDataRequest = st[method](url) + .set(headers) + .set('Content-type', 'multipart/form-data'); + for (const field of fields) { + void formDataRequest.field(field[0], field[1]); + } + + res = formDataRequest; + } else if (params.body) { + res = st[method](url).send(params.body).set(headers); + } else { + res = st[method](url).set(headers); + } + + return res as unknown as SupertestReturnType; + }; +} + +export type ObservabilityAIAssistantAPIClient = ReturnType< + typeof createObservabilityAIAssistantApiClient +>; + +type WithoutPromise> = Subtract>; + +// this is a little intense, but without it, method overrides are lost +// e.g., { +// end(one:string) +// end(one:string, two:string) +// } +// would lose the first signature. This keeps up to eight signatures. +type OverloadedParameters = T extends { + (...args: infer A1): any; + (...args: infer A2): any; + (...args: infer A3): any; + (...args: infer A4): any; + (...args: infer A5): any; + (...args: infer A6): any; + (...args: infer A7): any; + (...args: infer A8): any; +} + ? A1 | A2 | A3 | A4 | A5 | A6 | A7 | A8 + : T extends { + (...args: infer A1): any; + (...args: infer A2): any; + (...args: infer A3): any; + (...args: infer A4): any; + (...args: infer A5): any; + (...args: infer A6): any; + (...args: infer A7): any; + } + ? A1 | A2 | A3 | A4 | A5 | A6 | A7 + : T extends { + (...args: infer A1): any; + (...args: infer A2): any; + (...args: infer A3): any; + (...args: infer A4): any; + (...args: infer A5): any; + (...args: infer A6): any; + } + ? A1 | A2 | A3 | A4 | A5 | A6 + : T extends { + (...args: infer A1): any; + (...args: infer A2): any; + (...args: infer A3): any; + (...args: infer A4): any; + (...args: infer A5): any; + } + ? A1 | A2 | A3 | A4 | A5 + : T extends { + (...args: infer A1): any; + (...args: infer A2): any; + (...args: infer A3): any; + (...args: infer A4): any; + } + ? A1 | A2 | A3 | A4 + : T extends { + (...args: infer A1): any; + (...args: infer A2): any; + (...args: infer A3): any; + } + ? A1 | A2 | A3 + : T extends { + (...args: infer A1): any; + (...args: infer A2): any; + } + ? A1 | A2 + : T extends (...args: infer A) => any + ? A + : any; + +type OverrideReturnType any, TNextReturnType> = ( + ...args: OverloadedParameters +) => WithoutPromise> & TNextReturnType; + +type OverwriteThisMethods, TNextReturnType> = TNextReturnType & { + [key in keyof T]: T[key] extends (...args: infer TArgs) => infer TReturnType + ? TReturnType extends Promise + ? OverrideReturnType + : (...args: TArgs) => TReturnType + : T[key]; +}; + +export type SupertestReturnType = + OverwriteThisMethods< + WithoutPromise, + Promise<{ + text: string; + status: number; + body: APIReturnType; + }> + >; + +export async function getObservabilityAIAssistantApiClientService({ + getService, +}: InheritedFtrProviderContext): Promise { + const svlSharedConfig = getService('config'); + // defaults to elastic_admin user when used without auth + return { + slsUser: await getObservabilityAIAssistantApiClient({ + svlSharedConfig, + }), + }; +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/config.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/config.ts new file mode 100644 index 0000000000000..36a60f29cb6ce --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/config.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { SUPPORTED_TRAINED_MODELS } from '@kbn/test-suites-xpack/functional/services/ml/api'; +import { createTestConfig } from '../../../config.base'; +import { ObservabilityAIAssistantServices } from './common/ftr_provider_context'; +import { services as inheritedServices } from '../../../services'; +import { getObservabilityAIAssistantApiClientService } from './common/observability_ai_assistant_api_client'; + +export const services: ObservabilityAIAssistantServices = { + ...inheritedServices, + observabilityAIAssistantAPIClient: getObservabilityAIAssistantApiClientService, +}; + +export default createTestConfig({ + serverlessProject: 'oblt', + testFiles: [require.resolve('./tests')], + junit: { + reportName: 'Observability AI Assistant API Integration tests', + }, + suiteTags: { exclude: ['skipSvlOblt'] }, + services, + + // include settings from project controller + // https://github.com/elastic/project-controller/blob/main/internal/project/observability/config/elasticsearch.yml + esServerArgs: ['xpack.ml.dfa.enabled=false'], + kbnServerArgs: [ + `--xpack.observabilityAIAssistant.modelId=${SUPPORTED_TRAINED_MODELS.TINY_ELSER.name}`, + ], +}); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/chat/chat.spec.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/chat/chat.spec.ts new file mode 100644 index 0000000000000..d30839b60b0f1 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/chat/chat.spec.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 expect from '@kbn/expect'; +import { MessageRole, type Message } from '@kbn/observability-ai-assistant-plugin/common'; +import { PassThrough } from 'stream'; +import { + LlmProxy, + createLlmProxy, +} from '@kbn/test-suites-xpack/observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { FtrProviderContext } from '../../common/ftr_provider_context'; +import { createProxyActionConnector, deleteActionConnector } from '../../common/action_connectors'; +import type { InternalRequestHeader, RoleCredentials } from '../../../../../../shared/services'; + +export default function ApiTest({ getService }: FtrProviderContext) { + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const svlUserManager = getService('svlUserManager'); + const svlCommonApi = getService('svlCommonApi'); + const log = getService('log'); + + const CHAT_API_URL = `/internal/observability_ai_assistant/chat`; + + const messages: Message[] = [ + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.System, + content: 'You are a helpful assistant', + }, + }, + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.User, + content: 'Good morning!', + }, + }, + ]; + + describe('/internal/observability_ai_assistant/chat', function () { + // TODO: https://github.com/elastic/kibana/issues/192751 + this.tags(['skipMKI']); + let proxy: LlmProxy; + let connectorId: string; + let roleAuthc: RoleCredentials; + let internalReqHeader: InternalRequestHeader; + + before(async () => { + roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('editor'); + internalReqHeader = svlCommonApi.getInternalRequestHeader(); + proxy = await createLlmProxy(log); + connectorId = await createProxyActionConnector({ + supertest: supertestWithoutAuth, + log, + port: proxy.getPort(), + roleAuthc, + internalReqHeader, + }); + }); + + after(async () => { + proxy.close(); + await deleteActionConnector({ + supertest: supertestWithoutAuth, + connectorId, + log, + roleAuthc, + internalReqHeader, + }); + await svlUserManager.invalidateM2mApiKeyWithRoleScope(roleAuthc); + }); + + it("returns a 4xx if the connector doesn't exist", async () => { + await supertestWithoutAuth + .post(CHAT_API_URL) + .set(roleAuthc.apiKeyHeader) + .set(internalReqHeader) + .send({ + name: 'my_api_call', + messages, + connectorId: 'does not exist', + functions: [], + scope: 'all', + }) + .expect(404); + }); + + it('returns a streaming response from the server', async () => { + const NUM_RESPONSES = 5; + + await Promise.race([ + new Promise((resolve, reject) => { + setTimeout(() => { + reject(new Error('Test timed out')); + }, 5000); + }), + new Promise((resolve, reject) => { + async function runTest() { + const interceptor = proxy.intercept('conversation', () => true); + const receivedChunks: Array> = []; + + const passThrough = new PassThrough(); + supertestWithoutAuth + .post(CHAT_API_URL) + .set(roleAuthc.apiKeyHeader) + .set(internalReqHeader) + .on('error', reject) + .send({ + name: 'my_api_call', + messages, + connectorId, + functions: [], + scope: 'all', + }) + .pipe(passThrough); + + const simulator = await interceptor.waitForIntercept(); + + passThrough.on('data', (chunk) => { + receivedChunks.push(JSON.parse(chunk.toString())); + }); + + for (let i = 0; i < NUM_RESPONSES; i++) { + await simulator.next(`Part: i\n`); + } + + await simulator.complete(); + + await new Promise((innerResolve) => passThrough.on('end', () => innerResolve())); + + const chatCompletionChunks = receivedChunks.filter( + (chunk) => chunk.type === 'chatCompletionChunk' + ); + expect(chatCompletionChunks).to.have.length( + NUM_RESPONSES, + `received number of chat completion chunks did not match expected. This might be because of a 4xx or 5xx: ${JSON.stringify( + chatCompletionChunks, + null, + 2 + )}` + ); + + const tokenCountChunk = receivedChunks.find((chunk) => chunk.type === 'tokenCount'); + expect(tokenCountChunk).to.eql( + { + type: 'tokenCount', + tokens: { completion: 20, prompt: 33, total: 53 }, + }, + `received token count chunk did not match expected` + ); + } + + runTest().then(resolve, reject); + }), + ]); + }); + + it('returns a useful error if the request fails', async () => { + const interceptor = proxy.intercept('conversation', () => true); + + const passThrough = new PassThrough(); + + supertestWithoutAuth + .post(CHAT_API_URL) + .set(roleAuthc.apiKeyHeader) + .set(internalReqHeader) + .set('kbn-xsrf', 'foo') + .send({ + name: 'my_api_call', + messages, + connectorId, + functions: [], + scope: 'all', + }) + .expect(200) + .pipe(passThrough); + + let data: string = ''; + + passThrough.on('data', (chunk) => { + data += chunk.toString('utf-8'); + }); + + const simulator = await interceptor.waitForIntercept(); + + await simulator.status(400); + + await simulator.rawWrite( + JSON.stringify({ + error: { + code: 'context_length_exceeded', + message: + "This model's maximum context length is 8192 tokens. However, your messages resulted in 11036 tokens. Please reduce the length of the messages.", + param: 'messages', + type: 'invalid_request_error', + }, + }) + ); + + await simulator.rawEnd(); + + await new Promise((resolve) => passThrough.on('end', () => resolve())); + + const response = JSON.parse(data.trim()); + + expect(response.error.message).to.be( + `Token limit reached. Token limit is 8192, but the current conversation has 11036 tokens.` + ); + }); + }); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/complete.spec.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/complete.spec.ts new file mode 100644 index 0000000000000..970b99ab35613 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/complete.spec.ts @@ -0,0 +1,528 @@ +/* + * Copyright 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 { Response } from 'supertest'; +import { MessageRole, type Message } from '@kbn/observability-ai-assistant-plugin/common'; +import { omit, pick } from 'lodash'; +import { PassThrough } from 'stream'; +import expect from '@kbn/expect'; +import { + ChatCompletionChunkEvent, + ConversationCreateEvent, + ConversationUpdateEvent, + MessageAddEvent, + StreamingChatResponseEvent, + StreamingChatResponseEventType, +} from '@kbn/observability-ai-assistant-plugin/common/conversation_complete'; +import { ObservabilityAIAssistantScreenContextRequest } from '@kbn/observability-ai-assistant-plugin/common/types'; +import { + createLlmProxy, + isFunctionTitleRequest, + LlmProxy, + LlmResponseSimulator, +} from '@kbn/test-suites-xpack/observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { createOpenAiChunk } from '@kbn/test-suites-xpack/observability_ai_assistant_api_integration/common/create_openai_chunk'; +import { FtrProviderContext } from '../../common/ftr_provider_context'; +import { + decodeEvents, + getConversationCreatedEvent, + getConversationUpdatedEvent, +} from '../conversations/helpers'; +import { createProxyActionConnector, deleteActionConnector } from '../../common/action_connectors'; +import type { InternalRequestHeader, RoleCredentials } from '../../../../../../shared/services'; + +export default function ApiTest({ getService }: FtrProviderContext) { + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const log = getService('log'); + const svlUserManager = getService('svlUserManager'); + const svlCommonApi = getService('svlCommonApi'); + + const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + + const COMPLETE_API_URL = `/internal/observability_ai_assistant/chat/complete`; + + const messages: Message[] = [ + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.System, + content: 'You are a helpful assistant', + }, + }, + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.User, + content: 'Good morning, bot!', + // make sure it doesn't 400 on `data` being set + data: '{}', + }, + }, + ]; + + describe('/internal/observability_ai_assistant/chat/complete', function () { + // TODO: https://github.com/elastic/kibana/issues/192751 + this.tags(['skipMKI']); + let proxy: LlmProxy; + let connectorId: string; + let roleAuthc: RoleCredentials; + let internalReqHeader: InternalRequestHeader; + + async function getEvents( + params: { screenContexts?: ObservabilityAIAssistantScreenContextRequest[] }, + cb: (conversationSimulator: LlmResponseSimulator) => Promise + ) { + const titleInterceptor = proxy.intercept('title', (body) => isFunctionTitleRequest(body)); + + const conversationInterceptor = proxy.intercept( + 'conversation', + (body) => !isFunctionTitleRequest(body) + ); + const responsePromise = new Promise((resolve, reject) => { + supertestWithoutAuth + .post(COMPLETE_API_URL) + .set(roleAuthc.apiKeyHeader) + .set(internalReqHeader) + .send({ + messages, + connectorId, + persist: true, + screenContexts: params.screenContexts || [], + scope: 'all', + }) + .then((response: Response) => resolve(response)) + .catch((err: Error) => reject(err)); + }); + + const [conversationSimulator, titleSimulator] = await Promise.all([ + conversationInterceptor.waitForIntercept(), + titleInterceptor.waitForIntercept(), + ]); + + await titleSimulator.status(200); + await titleSimulator.next('My generated title'); + await titleSimulator.complete(); + + await conversationSimulator.status(200); + await cb(conversationSimulator); + + const response = await responsePromise; + + return ( + String(response.body) + .split('\n') + .map((line) => line.trim()) + .filter(Boolean) + .map((line) => JSON.parse(line) as StreamingChatResponseEvent) + // Filter BufferFlush events that appear if isCloudEnabled is true which is the case in serverless tests + .filter((event) => event.type !== StreamingChatResponseEventType.BufferFlush) + .slice(2) + ); // ignore context request/response, we're testing this elsewhere + } + + before(async () => { + roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('editor'); + internalReqHeader = svlCommonApi.getInternalRequestHeader(); + proxy = await createLlmProxy(log); + connectorId = await createProxyActionConnector({ + supertest: supertestWithoutAuth, + log, + port: proxy.getPort(), + roleAuthc, + internalReqHeader, + }); + }); + + after(async () => { + proxy.close(); + await deleteActionConnector({ + supertest: supertestWithoutAuth, + connectorId, + log, + roleAuthc, + internalReqHeader, + }); + await svlUserManager.invalidateM2mApiKeyWithRoleScope(roleAuthc); + }); + + it('returns a streaming response from the server', async () => { + const interceptor = proxy.intercept('conversation', () => true); + + const receivedChunks: any[] = []; + + const passThrough = new PassThrough(); + + supertestWithoutAuth + .post(COMPLETE_API_URL) + .set(roleAuthc.apiKeyHeader) + .set(internalReqHeader) + .send({ + messages, + connectorId, + persist: false, + screenContexts: [], + scope: 'all', + }) + .pipe(passThrough); + + passThrough.on('data', (chunk) => { + receivedChunks.push(chunk.toString()); + }); + + const simulator = await interceptor.waitForIntercept(); + + await simulator.status(200); + const chunk = JSON.stringify(createOpenAiChunk('Hello')); + + await simulator.rawWrite(`data: ${chunk.substring(0, 10)}`); + await simulator.rawWrite(`${chunk.substring(10)}\n\n`); + await simulator.complete(); + + await new Promise((resolve) => passThrough.on('end', () => resolve())); + + const parsedEvents = decodeEvents(receivedChunks.join('')); + + expect(parsedEvents.map((event) => event.type)).to.eql([ + StreamingChatResponseEventType.MessageAdd, + StreamingChatResponseEventType.MessageAdd, + StreamingChatResponseEventType.ChatCompletionChunk, + StreamingChatResponseEventType.MessageAdd, + ]); + + const messageEvents = parsedEvents.filter( + (msg): msg is MessageAddEvent => msg.type === StreamingChatResponseEventType.MessageAdd + ); + + const chunkEvents = parsedEvents.filter( + (msg): msg is ChatCompletionChunkEvent => + msg.type === StreamingChatResponseEventType.ChatCompletionChunk + ); + + expect(omit(messageEvents[0], 'id', 'message.@timestamp')).to.eql({ + type: StreamingChatResponseEventType.MessageAdd, + message: { + message: { + content: '', + role: MessageRole.Assistant, + function_call: { + name: 'context', + trigger: MessageRole.Assistant, + }, + }, + }, + }); + + expect(omit(messageEvents[1], 'id', 'message.@timestamp')).to.eql({ + type: StreamingChatResponseEventType.MessageAdd, + message: { + message: { + role: MessageRole.User, + name: 'context', + content: JSON.stringify({ screen_description: '', learnings: [] }), + }, + }, + }); + + expect(omit(chunkEvents[0], 'id')).to.eql({ + type: StreamingChatResponseEventType.ChatCompletionChunk, + message: { + content: 'Hello', + }, + }); + + expect(omit(messageEvents[2], 'id', 'message.@timestamp')).to.eql({ + type: StreamingChatResponseEventType.MessageAdd, + message: { + message: { + content: 'Hello', + role: MessageRole.Assistant, + function_call: { + name: '', + arguments: '', + trigger: MessageRole.Assistant, + }, + }, + }, + }); + }); + describe('when creating a new conversation', () => { + let events: StreamingChatResponseEvent[]; + + before(async () => { + events = await getEvents({}, async (conversationSimulator) => { + await conversationSimulator.next('Hello'); + await conversationSimulator.next(' again'); + await conversationSimulator.complete(); + }); + }); + + it('creates a new conversation', async () => { + expect(omit(events[0], 'id')).to.eql({ + type: StreamingChatResponseEventType.ChatCompletionChunk, + message: { + content: 'Hello', + }, + }); + expect(omit(events[1], 'id')).to.eql({ + type: StreamingChatResponseEventType.ChatCompletionChunk, + message: { + content: ' again', + }, + }); + expect(omit(events[2], 'id', 'message.@timestamp')).to.eql({ + type: StreamingChatResponseEventType.MessageAdd, + message: { + message: { + content: 'Hello again', + function_call: { + arguments: '', + name: '', + trigger: MessageRole.Assistant, + }, + role: MessageRole.Assistant, + }, + }, + }); + + expect( + omit( + events[3], + 'conversation.id', + 'conversation.last_updated', + 'conversation.token_count' + ) + ).to.eql({ + type: StreamingChatResponseEventType.ConversationCreate, + conversation: { + title: 'My generated title', + }, + }); + + const tokenCount = (events[3] as ConversationCreateEvent).conversation.token_count!; + + expect(tokenCount.completion).to.be.greaterThan(0); + expect(tokenCount.prompt).to.be.greaterThan(0); + + expect(tokenCount.total).to.eql(tokenCount.completion + tokenCount.prompt); + }); + + after(async () => { + const createdConversationId = events.filter( + (line): line is ConversationCreateEvent => + line.type === StreamingChatResponseEventType.ConversationCreate + )[0]?.conversation.id; + + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'DELETE /internal/observability_ai_assistant/conversation/{conversationId}', + roleAuthc, + internalReqHeader, + params: { + path: { + conversationId: createdConversationId, + }, + }, + }) + .expect(200); + }); + }); + + describe('after executing a screen context action', () => { + let events: StreamingChatResponseEvent[]; + + before(async () => { + events = await getEvents( + { + screenContexts: [ + { + actions: [ + { + name: 'my_action', + description: 'My action', + parameters: { + type: 'object', + properties: { + foo: { + type: 'string', + }, + }, + }, + }, + ], + }, + ], + }, + async (conversationSimulator) => { + await conversationSimulator.next({ + function_call: { name: 'my_action', arguments: JSON.stringify({ foo: 'bar' }) }, + }); + await conversationSimulator.complete(); + } + ); + }); + + it('closes the stream without persisting the conversation', () => { + expect( + pick( + events[events.length - 1], + 'message.message.content', + 'message.message.function_call', + 'message.message.role' + ) + ).to.eql({ + message: { + message: { + content: '', + function_call: { + name: 'my_action', + arguments: JSON.stringify({ foo: 'bar' }), + trigger: MessageRole.Assistant, + }, + role: MessageRole.Assistant, + }, + }, + }); + }); + + it('does not store the conversation', async () => { + expect( + events.filter((event) => event.type === StreamingChatResponseEventType.ConversationCreate) + .length + ).to.eql(0); + + const conversations = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/conversations', + roleAuthc, + internalReqHeader, + }) + .expect(200); + + expect(conversations.body.conversations.length).to.be(0); + }); + }); + + describe('when updating an existing conversation', () => { + let conversationCreatedEvent: ConversationCreateEvent; + let conversationUpdatedEvent: ConversationUpdateEvent; + + before(async () => { + void proxy + .intercept('conversation_title', (body) => isFunctionTitleRequest(body), [ + { + function_call: { + name: 'title_conversation', + arguments: JSON.stringify({ title: 'LLM-generated title' }), + }, + }, + ]) + .completeAfterIntercept(); + + void proxy + .intercept('conversation', (body) => !isFunctionTitleRequest(body), 'Good morning, sir!') + .completeAfterIntercept(); + + const createResponse = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/chat/complete', + roleAuthc, + internalReqHeader, + params: { + body: { + messages, + connectorId, + persist: true, + screenContexts: [], + scope: 'all', + }, + }, + }) + .expect(200); + + await proxy.waitForAllInterceptorsSettled(); + + conversationCreatedEvent = getConversationCreatedEvent(createResponse.body); + + const conversationId = conversationCreatedEvent.conversation.id; + const fullConversation = await observabilityAIAssistantAPIClient.slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', + internalReqHeader, + roleAuthc, + params: { + path: { + conversationId, + }, + }, + }); + + void proxy + .intercept('conversation', (body) => !isFunctionTitleRequest(body), 'Good night, sir!') + .completeAfterIntercept(); + + const updatedResponse = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/chat/complete', + internalReqHeader, + roleAuthc, + params: { + body: { + messages: [ + ...fullConversation.body.messages, + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.User, + content: 'Good night, bot!', + }, + }, + ], + connectorId, + persist: true, + screenContexts: [], + conversationId, + scope: 'all', + }, + }, + }) + .expect(200); + + await proxy.waitForAllInterceptorsSettled(); + + conversationUpdatedEvent = getConversationUpdatedEvent(updatedResponse.body); + }); + + after(async () => { + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'DELETE /internal/observability_ai_assistant/conversation/{conversationId}', + internalReqHeader, + roleAuthc, + params: { + path: { + conversationId: conversationCreatedEvent.conversation.id, + }, + }, + }) + .expect(200); + }); + + it('has correct token count for a new conversation', async () => { + expect(conversationCreatedEvent.conversation.token_count?.completion).to.be.greaterThan(0); + expect(conversationCreatedEvent.conversation.token_count?.prompt).to.be.greaterThan(0); + expect(conversationCreatedEvent.conversation.token_count?.total).to.be.greaterThan(0); + }); + + it('has correct token count for the updated conversation', async () => { + expect(conversationUpdatedEvent.conversation.token_count!.total).to.be.greaterThan( + conversationCreatedEvent.conversation.token_count!.total + ); + }); + }); + + // todo + it.skip('executes a function', async () => {}); + }); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/functions/elasticsearch.spec.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/functions/elasticsearch.spec.ts new file mode 100644 index 0000000000000..4ba276333cc55 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/functions/elasticsearch.spec.ts @@ -0,0 +1,126 @@ +/* + * Copyright 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 { MessageAddEvent, MessageRole } from '@kbn/observability-ai-assistant-plugin/common'; +import expect from '@kbn/expect'; +import { apm, timerange } from '@kbn/apm-synthtrace-client'; +import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace'; +import { ELASTICSEARCH_FUNCTION_NAME } from '@kbn/observability-ai-assistant-plugin/server/functions/elasticsearch'; +import { + LlmProxy, + createLlmProxy, +} from '@kbn/test-suites-xpack/observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { FtrProviderContext } from '../../../common/ftr_provider_context'; +import { getMessageAddedEvents, invokeChatCompleteWithFunctionRequest } from './helpers'; +import { + createProxyActionConnector, + deleteActionConnector, +} from '../../../common/action_connectors'; +import type { InternalRequestHeader, RoleCredentials } from '../../../../../../../shared/services'; + +export default function ApiTest({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const log = getService('log'); + const synthtrace = getService('synthtrace'); + const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + const svlUserManager = getService('svlUserManager'); + const svlCommonApi = getService('svlCommonApi'); + + describe('when calling elasticsearch', function () { + // TODO: https://github.com/elastic/kibana/issues/192751 + this.tags(['skipMKI']); + let proxy: LlmProxy; + let connectorId: string; + let events: MessageAddEvent[]; + let roleAuthc: RoleCredentials; + let internalReqHeader: InternalRequestHeader; + let apmSynthtraceEsClient: ApmSynthtraceEsClient; + + before(async () => { + roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('editor'); + internalReqHeader = svlCommonApi.getInternalRequestHeader(); + apmSynthtraceEsClient = await synthtrace.createSynthtraceEsClient(); + proxy = await createLlmProxy(log); + connectorId = await createProxyActionConnector({ + supertest, + log, + port: proxy.getPort(), + roleAuthc, + internalReqHeader, + }); + + // intercept the LLM request and return a fixed response + void proxy + .intercept('conversation', () => true, 'Hello from LLM Proxy') + .completeAfterIntercept(); + + await generateApmData(apmSynthtraceEsClient); + + const responseBody = await invokeChatCompleteWithFunctionRequest({ + connectorId, + observabilityAIAssistantAPIClient, + internalReqHeader, + roleAuthc, + functionCall: { + name: ELASTICSEARCH_FUNCTION_NAME, + trigger: MessageRole.User, + arguments: JSON.stringify({ + method: 'POST', + path: 'traces*/_search', + body: { + size: 0, + aggs: { + services: { + terms: { + field: 'service.name', + }, + }, + }, + }, + }), + }, + }); + + await proxy.waitForAllInterceptorsSettled(); + + events = getMessageAddedEvents(responseBody); + }); + + after(async () => { + proxy.close(); + await deleteActionConnector({ supertest, connectorId, log, roleAuthc, internalReqHeader }); + await apmSynthtraceEsClient.clean(); + }); + + it('returns elasticsearch function response', async () => { + const esFunctionResponse = events[0]; + const parsedEsResponse = JSON.parse(esFunctionResponse.message.message.content!).response; + + expect(esFunctionResponse.message.message.name).to.be('elasticsearch'); + expect(parsedEsResponse.hits.total.value).to.be(15); + expect(parsedEsResponse.aggregations.services.buckets).to.eql([ + { key: 'java-backend', doc_count: 15 }, + ]); + expect(events.length).to.be(2); + }); + }); +} + +export async function generateApmData(apmSynthtraceEsClient: ApmSynthtraceEsClient) { + const serviceA = apm + .service({ name: 'java-backend', environment: 'production', agentName: 'java' }) + .instance('a'); + + const events = timerange('now-15m', 'now') + .interval('1m') + .rate(1) + .generator((timestamp) => { + return serviceA.transaction({ transactionName: 'tx' }).timestamp(timestamp).duration(1000); + }); + + return apmSynthtraceEsClient.index(events); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/functions/helpers.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/functions/helpers.ts new file mode 100644 index 0000000000000..b9e1ec0865013 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/functions/helpers.ts @@ -0,0 +1,75 @@ +/* + * Copyright 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 { + Message, + MessageAddEvent, + MessageRole, + StreamingChatResponseEvent, +} from '@kbn/observability-ai-assistant-plugin/common'; +import { AssistantScope } from '@kbn/observability-ai-assistant-plugin/common/types'; +import { Readable } from 'stream'; +import type { InternalRequestHeader, RoleCredentials } from '../../../../../../../shared/services'; +import { ObservabilityAIAssistantApiClient } from '../../../common/observability_ai_assistant_api_client'; + +function decodeEvents(body: Readable | string) { + return String(body) + .split('\n') + .map((line) => line.trim()) + .filter(Boolean) + .map((line) => JSON.parse(line) as StreamingChatResponseEvent); +} + +export function getMessageAddedEvents(body: Readable | string) { + return decodeEvents(body).filter( + (event): event is MessageAddEvent => event.type === 'messageAdd' + ); +} + +export async function invokeChatCompleteWithFunctionRequest({ + connectorId, + observabilityAIAssistantAPIClient, + functionCall, + roleAuthc, + internalReqHeader, + scope, +}: { + connectorId: string; + observabilityAIAssistantAPIClient: ObservabilityAIAssistantApiClient; + functionCall: Message['message']['function_call']; + scope?: AssistantScope; + roleAuthc: RoleCredentials; + internalReqHeader: InternalRequestHeader; +}) { + const { body } = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/chat/complete', + internalReqHeader, + roleAuthc, + params: { + body: { + messages: [ + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.Assistant, + content: '', + function_call: functionCall, + }, + }, + ], + connectorId, + persist: false, + screenContexts: [], + scope: 'observability', + }, + }, + }) + .expect(200); + + return body; +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/functions/summarize.spec.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/functions/summarize.spec.ts new file mode 100644 index 0000000000000..6be39a36c62a5 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/complete/functions/summarize.spec.ts @@ -0,0 +1,96 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { MessageRole } from '@kbn/observability-ai-assistant-plugin/common'; +import expect from '@kbn/expect'; +import { + LlmProxy, + createLlmProxy, +} from '@kbn/test-suites-xpack/observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { FtrProviderContext } from '../../../common/ftr_provider_context'; +import { invokeChatCompleteWithFunctionRequest } from './helpers'; +import { + createProxyActionConnector, + deleteActionConnector, +} from '../../../common/action_connectors'; +import type { InternalRequestHeader, RoleCredentials } from '../../../../../../../shared/services'; + +export default function ApiTest({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const log = getService('log'); + const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + const svlUserManager = getService('svlUserManager'); + const svlCommonApi = getService('svlCommonApi'); + + // Skipped until Elser is available in tests + describe.skip('when calling summarize function', () => { + let roleAuthc: RoleCredentials; + let internalReqHeader: InternalRequestHeader; + let proxy: LlmProxy; + let connectorId: string; + + before(async () => { + roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('editor'); + internalReqHeader = svlCommonApi.getInternalRequestHeader(); + proxy = await createLlmProxy(log); + connectorId = await createProxyActionConnector({ + supertest, + log, + port: proxy.getPort(), + roleAuthc, + internalReqHeader, + }); + + // intercept the LLM request and return a fixed response + void proxy + .intercept('conversation', () => true, 'Hello from LLM Proxy') + .completeAfterIntercept(); + + await invokeChatCompleteWithFunctionRequest({ + connectorId, + observabilityAIAssistantAPIClient, + internalReqHeader, + roleAuthc, + functionCall: { + name: 'summarize', + trigger: MessageRole.User, + arguments: JSON.stringify({ + id: 'my-id', + text: 'Hello world', + is_correction: false, + confidence: 1, + public: false, + }), + }, + }); + + await proxy.waitForAllInterceptorsSettled(); + }); + + after(async () => { + proxy.close(); + await deleteActionConnector({ supertest, connectorId, log, roleAuthc, internalReqHeader }); + }); + + it('persists entry in knowledge base', async () => { + const res = await observabilityAIAssistantAPIClient.slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/entries', + internalReqHeader, + roleAuthc, + params: { + query: { + query: '', + sortBy: 'doc_id', + sortDirection: 'asc', + }, + }, + }); + + expect(res.body.entries).to.have.length(1); + }); + }); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/connectors/connectors.spec.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/connectors/connectors.spec.ts new file mode 100644 index 0000000000000..9305c0d1e14e9 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/connectors/connectors.spec.ts @@ -0,0 +1,117 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../common/ftr_provider_context'; +import { createProxyActionConnector, deleteActionConnector } from '../../common/action_connectors'; +import type { + InternalRequestHeader, + RoleCredentials, + SupertestWithoutAuthProviderType, +} from '../../../../../../shared/services'; + +export default function ApiTest({ getService }: FtrProviderContext) { + const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const log = getService('log'); + const svlUserManager = getService('svlUserManager'); + const svlCommonApi = getService('svlCommonApi'); + + describe('List connectors', () => { + let roleAuthc: RoleCredentials; + let internalReqHeader: InternalRequestHeader; + before(async () => { + roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('editor'); + internalReqHeader = svlCommonApi.getInternalRequestHeader(); + await deleteAllActionConnectors({ + supertest: supertestWithoutAuth, + roleAuthc, + internalReqHeader, + }); + }); + + after(async () => { + await deleteAllActionConnectors({ + supertest: supertestWithoutAuth, + roleAuthc, + internalReqHeader, + }); + await svlUserManager.invalidateM2mApiKeyWithRoleScope(roleAuthc); + }); + + it('Returns a 2xx for enterprise license', async () => { + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/connectors', + roleAuthc, + internalReqHeader, + }) + .expect(200); + }); + + it('returns an empty list of connectors', async () => { + const res = await observabilityAIAssistantAPIClient.slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/connectors', + roleAuthc, + internalReqHeader, + }); + + expect(res.body.length).to.be(0); + }); + + it("returns the gen ai connector if it's been created", async () => { + const connectorId = await createProxyActionConnector({ + supertest: supertestWithoutAuth, + log, + port: 1234, + internalReqHeader, + roleAuthc, + }); + + const res = await observabilityAIAssistantAPIClient.slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/connectors', + internalReqHeader, + roleAuthc, + }); + + expect(res.body.length).to.be(1); + + await deleteActionConnector({ + supertest: supertestWithoutAuth, + connectorId, + log, + internalReqHeader, + roleAuthc, + }); + }); + }); +} + +export async function deleteAllActionConnectors({ + supertest, + roleAuthc, + internalReqHeader, +}: { + supertest: SupertestWithoutAuthProviderType; + roleAuthc: RoleCredentials; + internalReqHeader: InternalRequestHeader; +}): Promise { + const res = await supertest + .get(`/api/actions/connectors`) + .set(roleAuthc.apiKeyHeader) + .set(internalReqHeader); + + const body = res.body as Array<{ id: string; connector_type_id: string; name: string }>; + return Promise.all( + body.map(({ id }) => { + return supertest + .delete(`/api/actions/connector/${id}`) + .set(roleAuthc.apiKeyHeader) + .set(internalReqHeader); + }) + ); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/conversations/conversations.spec.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/conversations/conversations.spec.ts new file mode 100644 index 0000000000000..b4426744e4082 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/conversations/conversations.spec.ts @@ -0,0 +1,291 @@ +/* + * Copyright 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 { merge, omit } from 'lodash'; +import { + type ConversationCreateRequest, + type ConversationUpdateRequest, + MessageRole, +} from '@kbn/observability-ai-assistant-plugin/common/types'; +import type { FtrProviderContext } from '../../common/ftr_provider_context'; +import type { SupertestReturnType } from '../../common/observability_ai_assistant_api_client'; +import type { InternalRequestHeader, RoleCredentials } from '../../../../../../shared/services'; + +export default function ApiTest({ getService }: FtrProviderContext) { + const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + const svlUserManager = getService('svlUserManager'); + const svlCommonApi = getService('svlCommonApi'); + + const conversationCreate: ConversationCreateRequest = { + '@timestamp': new Date().toISOString(), + conversation: { + title: 'My title', + }, + labels: {}, + numeric_labels: {}, + messages: [ + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.User, + content: 'My message', + }, + }, + ], + public: false, + }; + + const conversationUpdate: ConversationUpdateRequest = merge({}, conversationCreate, { + conversation: { + id: '', + title: 'My updated title', + }, + }); + + describe('Conversations', () => { + let roleAuthc: RoleCredentials; + let internalReqHeader: InternalRequestHeader; + before(async () => { + roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('editor'); + internalReqHeader = svlCommonApi.getInternalRequestHeader(); + }); + after(async () => { + await svlUserManager.invalidateM2mApiKeyWithRoleScope(roleAuthc); + }); + describe('without conversations', () => { + it('returns no conversations when listing', async () => { + const response = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/conversations', + internalReqHeader, + roleAuthc, + }) + .expect(200); + + expect(response.body).to.eql({ conversations: [] }); + }); + + it('returns a 404 for updating conversations', async () => { + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'PUT /internal/observability_ai_assistant/conversation/{conversationId}', + internalReqHeader, + roleAuthc, + params: { + path: { + conversationId: 'non-existing-conversation-id', + }, + body: { + conversation: conversationUpdate, + }, + }, + }) + .expect(404); + }); + + it('returns a 404 for retrieving a conversation', async () => { + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', + internalReqHeader, + roleAuthc, + params: { + path: { + conversationId: 'my-conversation-id', + }, + }, + }) + .expect(404); + }); + }); + + describe('when creating a conversation with the write user', function () { + let createResponse: Awaited< + SupertestReturnType<'POST /internal/observability_ai_assistant/conversation'> + >; + before(async () => { + createResponse = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/conversation', + roleAuthc, + internalReqHeader, + params: { + body: { + conversation: conversationCreate, + }, + }, + }) + .expect(200); + }); + + after(async () => { + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'DELETE /internal/observability_ai_assistant/conversation/{conversationId}', + internalReqHeader, + roleAuthc, + params: { + path: { + conversationId: createResponse.body.conversation.id, + }, + }, + }) + .expect(200); + + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', + internalReqHeader, + roleAuthc, + params: { + path: { + conversationId: createResponse.body.conversation.id, + }, + }, + }) + .expect(404); + }); + it('returns the conversation', function () { + // delete user from response to avoid comparing it as it will be different in MKI + delete createResponse.body.user; + expect(createResponse.body).to.eql({ + '@timestamp': createResponse.body['@timestamp'], + conversation: { + id: createResponse.body.conversation.id, + last_updated: createResponse.body.conversation.last_updated, + title: conversationCreate.conversation.title, + }, + labels: conversationCreate.labels, + numeric_labels: conversationCreate.numeric_labels, + messages: conversationCreate.messages, + namespace: 'default', + public: conversationCreate.public, + }); + }); + + it('returns a 404 for updating a non-existing conversation', async () => { + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'PUT /internal/observability_ai_assistant/conversation/{conversationId}', + roleAuthc, + internalReqHeader, + params: { + path: { + conversationId: 'non-existing-conversation-id', + }, + body: { + conversation: conversationUpdate, + }, + }, + }) + .expect(404); + }); + + it('returns a 404 for retrieving a non-existing conversation', async () => { + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', + roleAuthc, + internalReqHeader, + params: { + path: { + conversationId: 'non-existing-conversation-id', + }, + }, + }) + .expect(404); + }); + + it('returns the conversation that was created', async () => { + const response = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', + internalReqHeader, + roleAuthc, + params: { + path: { + conversationId: createResponse.body.conversation.id, + }, + }, + }) + .expect(200); + + // delete user from response to avoid comparing it as it will be different in MKI + delete response.body.user; + expect(response.body).to.eql(createResponse.body); + }); + + it('returns the created conversation when listing', async () => { + const response = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/conversations', + roleAuthc, + internalReqHeader, + }) + .expect(200); + // delete user from response to avoid comparing it as it will be different in MKI + delete response.body.conversations[0].user; + expect(response.body.conversations[0]).to.eql(createResponse.body); + }); + + // TODO + it.skip('returns a 404 when reading it with another user', () => {}); + + describe('after updating', () => { + let updateResponse: Awaited< + SupertestReturnType<'PUT /internal/observability_ai_assistant/conversation/{conversationId}'> + >; + + before(async () => { + updateResponse = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'PUT /internal/observability_ai_assistant/conversation/{conversationId}', + internalReqHeader, + roleAuthc, + params: { + path: { + conversationId: createResponse.body.conversation.id, + }, + body: { + conversation: merge(omit(conversationUpdate, 'conversation.id'), { + conversation: { id: createResponse.body.conversation.id }, + }), + }, + }, + }) + .expect(200); + }); + + it('returns the updated conversation as response', async () => { + expect(updateResponse.body.conversation.title).to.eql( + conversationUpdate.conversation.title + ); + }); + + it('returns the updated conversation after get', async () => { + const updateAfterCreateResponse = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', + internalReqHeader, + roleAuthc, + params: { + path: { + conversationId: createResponse.body.conversation.id, + }, + }, + }) + .expect(200); + + expect(updateAfterCreateResponse.body.conversation.title).to.eql( + conversationUpdate.conversation.title + ); + }); + }); + }); + }); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/conversations/helpers.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/conversations/helpers.ts new file mode 100644 index 0000000000000..7e72b4ed57bf9 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/conversations/helpers.ts @@ -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 { Readable } from 'stream'; +import { ToolingLog } from '@kbn/tooling-log'; +import { + ConversationCreateEvent, + ConversationUpdateEvent, + StreamingChatResponseEvent, + StreamingChatResponseEventType, +} from '@kbn/observability-ai-assistant-plugin/common/conversation_complete'; +import { ObservabilityAIAssistantApiClient } from '../../common/observability_ai_assistant_api_client'; +import type { InternalRequestHeader, RoleCredentials } from '../../../../../../shared/services'; + +export function decodeEvents(body: Readable | string) { + return String(body) + .split('\n') + .map((line) => line.trim()) + .filter(Boolean) + .map((line) => JSON.parse(line) as StreamingChatResponseEvent); +} + +export function getConversationCreatedEvent(body: Readable | string) { + const decodedEvents = decodeEvents(body); + const conversationCreatedEvent = decodedEvents.find( + (event) => event.type === StreamingChatResponseEventType.ConversationCreate + ) as ConversationCreateEvent; + + if (!conversationCreatedEvent) { + throw new Error( + `No conversation created event found: ${JSON.stringify(decodedEvents, null, 2)}` + ); + } + + return conversationCreatedEvent; +} + +export function getConversationUpdatedEvent(body: Readable | string) { + const decodedEvents = decodeEvents(body); + const conversationUpdatedEvent = decodedEvents.find( + (event) => event.type === StreamingChatResponseEventType.ConversationUpdate + ) as ConversationUpdateEvent; + + if (!conversationUpdatedEvent) { + throw new Error( + `No conversation created event found: ${JSON.stringify(decodedEvents, null, 2)}` + ); + } + + return conversationUpdatedEvent; +} + +export async function deleteAllConversations({ + observabilityAIAssistantAPIClient, + internalReqHeader, + roleAuthc, + log, +}: { + observabilityAIAssistantAPIClient: ObservabilityAIAssistantApiClient; + internalReqHeader: InternalRequestHeader; + roleAuthc: RoleCredentials; + log: ToolingLog; +}) { + const findConversationsResponse = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/conversations', + internalReqHeader, + roleAuthc, + params: { + body: { + query: '', + }, + }, + }) + .expect(200); + const conversations = findConversationsResponse.body.conversations; + + if (!conversations || conversations.length === 0) { + return; + } + + await Promise.all( + conversations.map(async (conversation) => { + try { + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'DELETE /internal/observability_ai_assistant/conversation/{conversationId}', + internalReqHeader, + roleAuthc, + params: { + path: { + conversationId: conversation.conversation.id, + }, + }, + }) + .expect(200); + } catch (error) { + log.error(`Failed to delete conversation with ID: ${conversation.conversation.id}`); + } + }) + ); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/index.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/index.ts new file mode 100644 index 0000000000000..26c8a7b2839a9 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/index.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import globby from 'globby'; +import path from 'path'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +const cwd = path.join(__dirname); + +export default function observabilityAIAssistantApiIntegrationTests({ + loadTestFile, +}: FtrProviderContext) { + describe('Observability AI Assistant API tests', function () { + const filePattern = '**/*.spec.ts'; + const tests = globby.sync(filePattern, { cwd }); + + tests.forEach((testName) => { + describe(testName, () => { + loadTestFile(require.resolve(`./${testName}`)); + }); + }); + }); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/helpers.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/helpers.ts new file mode 100644 index 0000000000000..6affeeb861295 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/helpers.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 { MachineLearningProvider } from '@kbn/test-suites-xpack/api_integration/services/ml'; +import { SUPPORTED_TRAINED_MODELS } from '@kbn/test-suites-xpack/functional/services/ml/api'; + +export const TINY_ELSER = { + ...SUPPORTED_TRAINED_MODELS.TINY_ELSER, + id: SUPPORTED_TRAINED_MODELS.TINY_ELSER.name, +}; + +export async function deleteKnowledgeBaseModel(ml: ReturnType) { + await ml.api.stopTrainedModelDeploymentES(TINY_ELSER.id, true); + await ml.api.deleteTrainedModelES(TINY_ELSER.id); + await ml.testResources.cleanMLSavedObjects(); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base.spec.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base.spec.ts new file mode 100644 index 0000000000000..b540ee5829e59 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base.spec.ts @@ -0,0 +1,278 @@ +/* + * Copyright 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 { + clearKnowledgeBase, + createKnowledgeBaseModel, +} from '@kbn/test-suites-xpack/observability_ai_assistant_api_integration/tests/knowledge_base/helpers'; +import { deleteKnowledgeBaseModel } from './helpers'; +import { FtrProviderContext } from '../../common/ftr_provider_context'; +import type { InternalRequestHeader, RoleCredentials } from '../../../../../../shared/services'; + +export default function ApiTest({ getService }: FtrProviderContext) { + const ml = getService('ml'); + const es = getService('es'); + const svlUserManager = getService('svlUserManager'); + const svlCommonApi = getService('svlCommonApi'); + + const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + + // TODO: https://github.com/elastic/kibana/issues/192886 + describe.skip('Knowledge base', function () { + // TODO: https://github.com/elastic/kibana/issues/192757 + this.tags(['skipMKI']); + let roleAuthc: RoleCredentials; + let internalReqHeader: InternalRequestHeader; + before(async () => { + roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('editor'); + internalReqHeader = svlCommonApi.getInternalRequestHeader(); + await createKnowledgeBaseModel(ml); + }); + + after(async () => { + await deleteKnowledgeBaseModel(ml); + await svlUserManager.invalidateM2mApiKeyWithRoleScope(roleAuthc); + }); + + it('returns 200 on knowledge base setup', async () => { + const res = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/kb/setup', + roleAuthc, + internalReqHeader, + }) + .expect(200); + expect(res.body).to.eql({}); + }); + describe('when managing a single entry', () => { + const knowledgeBaseEntry = { + id: 'my-doc-id-1', + text: 'My content', + }; + it('returns 200 on create', async () => { + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/kb/entries/save', + params: { body: knowledgeBaseEntry }, + roleAuthc, + internalReqHeader, + }) + .expect(200); + const res = await observabilityAIAssistantAPIClient.slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/entries', + params: { + query: { + query: '', + sortBy: 'doc_id', + sortDirection: 'asc', + }, + }, + roleAuthc, + internalReqHeader, + }); + const entry = res.body.entries[0]; + expect(entry.id).to.equal(knowledgeBaseEntry.id); + expect(entry.text).to.equal(knowledgeBaseEntry.text); + }); + + it('returns 200 on get entries and entry exists', async () => { + const res = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/entries', + params: { + query: { + query: '', + sortBy: 'doc_id', + sortDirection: 'asc', + }, + }, + roleAuthc, + internalReqHeader, + }) + .expect(200); + const entry = res.body.entries[0]; + expect(entry.id).to.equal(knowledgeBaseEntry.id); + expect(entry.text).to.equal(knowledgeBaseEntry.text); + }); + + it('returns 200 on delete', async () => { + const entryId = 'my-doc-id-1'; + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'DELETE /internal/observability_ai_assistant/kb/entries/{entryId}', + params: { + path: { entryId }, + }, + roleAuthc, + internalReqHeader, + }) + .expect(200); + + const res = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/entries', + params: { + query: { + query: '', + sortBy: 'doc_id', + sortDirection: 'asc', + }, + }, + roleAuthc, + internalReqHeader, + }) + .expect(200); + expect(res.body.entries.filter((entry) => entry.id.startsWith('my-doc-id')).length).to.eql( + 0 + ); + }); + + it('returns 500 on delete not found', async () => { + const entryId = 'my-doc-id-1'; + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'DELETE /internal/observability_ai_assistant/kb/entries/{entryId}', + params: { + path: { entryId }, + }, + roleAuthc, + internalReqHeader, + }) + .expect(500); + }); + }); + describe('when managing multiple entries', () => { + before(async () => { + await clearKnowledgeBase(es); + }); + afterEach(async () => { + await clearKnowledgeBase(es); + }); + const knowledgeBaseEntries = [ + { + id: 'my_doc_a', + text: 'My content a', + }, + { + id: 'my_doc_b', + text: 'My content b', + }, + { + id: 'my_doc_c', + text: 'My content c', + }, + ]; + it('returns 200 on create', async () => { + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/kb/entries/import', + params: { body: { entries: knowledgeBaseEntries } }, + roleAuthc, + internalReqHeader, + }) + .expect(200); + + const res = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/entries', + params: { + query: { + query: '', + sortBy: 'doc_id', + sortDirection: 'asc', + }, + }, + roleAuthc, + internalReqHeader, + }) + .expect(200); + expect(res.body.entries.filter((entry) => entry.id.startsWith('my_doc')).length).to.eql(3); + }); + + it('allows sorting', async () => { + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/kb/entries/import', + params: { body: { entries: knowledgeBaseEntries } }, + roleAuthc, + internalReqHeader, + }) + .expect(200); + + const res = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/entries', + params: { + query: { + query: '', + sortBy: 'doc_id', + sortDirection: 'desc', + }, + }, + roleAuthc, + internalReqHeader, + }) + .expect(200); + + const entries = res.body.entries.filter((entry) => entry.id.startsWith('my_doc')); + expect(entries[0].id).to.eql('my_doc_c'); + expect(entries[1].id).to.eql('my_doc_b'); + expect(entries[2].id).to.eql('my_doc_a'); + + // asc + const resAsc = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/entries', + params: { + query: { + query: '', + sortBy: 'doc_id', + sortDirection: 'asc', + }, + }, + roleAuthc, + internalReqHeader, + }) + .expect(200); + + const entriesAsc = resAsc.body.entries.filter((entry) => entry.id.startsWith('my_doc')); + expect(entriesAsc[0].id).to.eql('my_doc_a'); + expect(entriesAsc[1].id).to.eql('my_doc_b'); + expect(entriesAsc[2].id).to.eql('my_doc_c'); + }); + it('allows searching', async () => { + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/kb/entries/import', + params: { body: { entries: knowledgeBaseEntries } }, + roleAuthc, + internalReqHeader, + }) + .expect(200); + + const res = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/entries', + params: { + query: { + query: 'my_doc_a', + sortBy: 'doc_id', + sortDirection: 'asc', + }, + }, + roleAuthc, + internalReqHeader, + }) + .expect(200); + + expect(res.body.entries.length).to.eql(1); + expect(res.body.entries[0].id).to.eql('my_doc_a'); + }); + }); + }); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_setup.spec.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_setup.spec.ts new file mode 100644 index 0000000000000..ad5dd32f5c0b4 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_setup.spec.ts @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { createKnowledgeBaseModel } from '@kbn/test-suites-xpack/observability_ai_assistant_api_integration/tests/knowledge_base/helpers'; +import { deleteKnowledgeBaseModel } from './helpers'; +import { FtrProviderContext } from '../../common/ftr_provider_context'; +import type { InternalRequestHeader, RoleCredentials } from '../../../../../../shared/services'; + +export default function ApiTest({ getService }: FtrProviderContext) { + const ml = getService('ml'); + const svlUserManager = getService('svlUserManager'); + const svlCommonApi = getService('svlCommonApi'); + const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + + describe('/internal/observability_ai_assistant/kb/setup', function () { + // TODO: https://github.com/elastic/kibana/issues/192757 + this.tags(['skipMKI']); + let roleAuthc: RoleCredentials; + let internalReqHeader: InternalRequestHeader; + before(async () => { + roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('editor'); + internalReqHeader = svlCommonApi.getInternalRequestHeader(); + }); + after(async () => { + await svlUserManager.invalidateM2mApiKeyWithRoleScope(roleAuthc); + }); + it('returns empty object when successful', async () => { + await createKnowledgeBaseModel(ml); + const res = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/kb/setup', + roleAuthc, + internalReqHeader, + }) + .expect(200); + expect(res.body).to.eql({}); + await deleteKnowledgeBaseModel(ml); + }); + it('returns bad request if model cannot be installed', async () => { + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/kb/setup', + roleAuthc, + internalReqHeader, + }) + .expect(400); + }); + }); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_status.spec.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_status.spec.ts new file mode 100644 index 0000000000000..60e02152fd4ac --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_status.spec.ts @@ -0,0 +1,75 @@ +/* + * Copyright 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 { + createKnowledgeBaseModel, + TINY_ELSER, +} from '@kbn/test-suites-xpack/observability_ai_assistant_api_integration/tests/knowledge_base/helpers'; +import { deleteKnowledgeBaseModel } from './helpers'; +import { FtrProviderContext } from '../../common/ftr_provider_context'; +import type { InternalRequestHeader, RoleCredentials } from '../../../../../../shared/services'; + +export default function ApiTest({ getService }: FtrProviderContext) { + const ml = getService('ml'); + const svlUserManager = getService('svlUserManager'); + const svlCommonApi = getService('svlCommonApi'); + const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + + describe('/internal/observability_ai_assistant/kb/status', function () { + // TODO: https://github.com/elastic/kibana/issues/192757 + this.tags(['skipMKI']); + let roleAuthc: RoleCredentials; + let internalReqHeader: InternalRequestHeader; + before(async () => { + roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('editor'); + internalReqHeader = svlCommonApi.getInternalRequestHeader(); + await createKnowledgeBaseModel(ml); + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/kb/setup', + roleAuthc, + internalReqHeader, + }) + .expect(200); + }); + + after(async () => { + await deleteKnowledgeBaseModel(ml); + await svlUserManager.invalidateM2mApiKeyWithRoleScope(roleAuthc); + }); + + it('returns correct status after knowledge base is setup', async () => { + const res = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/status', + roleAuthc, + internalReqHeader, + }) + .expect(200); + expect(res.body.deployment_state).to.eql('started'); + expect(res.body.model_name).to.eql(TINY_ELSER.id); + }); + + it('returns correct status after elser is stopped', async () => { + await ml.api.stopTrainedModelDeploymentES(TINY_ELSER.id, true); + + const res = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/status', + roleAuthc, + internalReqHeader, + }) + .expect(200); + + expect(res.body).to.eql({ + ready: false, + model_name: TINY_ELSER.id, + }); + }); + }); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_user_instructions.spec.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_user_instructions.spec.ts new file mode 100644 index 0000000000000..86232035d0c58 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_user_instructions.spec.ts @@ -0,0 +1,354 @@ +/* + * Copyright 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 { sortBy } from 'lodash'; +import { Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/common'; +import { CONTEXT_FUNCTION_NAME } from '@kbn/observability-ai-assistant-plugin/server/functions/context'; +import { + clearConversations, + clearKnowledgeBase, + createKnowledgeBaseModel, +} from '@kbn/test-suites-xpack/observability_ai_assistant_api_integration/tests/knowledge_base/helpers'; +import { getConversationCreatedEvent } from '@kbn/test-suites-xpack/observability_ai_assistant_api_integration/tests/conversations/helpers'; +import { + LlmProxy, + createLlmProxy, +} from '@kbn/test-suites-xpack/observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { deleteKnowledgeBaseModel } from './helpers'; +import { createProxyActionConnector, deleteActionConnector } from '../../common/action_connectors'; +import { FtrProviderContext } from '../../common/ftr_provider_context'; +import type { InternalRequestHeader, RoleCredentials } from '../../../../../../shared/services'; + +export default function ApiTest({ getService }: FtrProviderContext) { + const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const es = getService('es'); + const ml = getService('ml'); + const log = getService('log'); + const svlUserManager = getService('svlUserManager'); + const svlCommonApi = getService('svlCommonApi'); + + // TODO: https://github.com/elastic/kibana/issues/192711 cannot create custom users in serverless + // trying using built in users by using cookie auth + // TODO: https://github.com/elastic/kibana/issues/192757 + describe.skip('Knowledge base user instructions', function () { + this.tags(['skipMKI']); + let editorRoleAuthc: RoleCredentials; + let johnRoleAuthc: RoleCredentials; + let internalReqHeader: InternalRequestHeader; + before(async () => { + // Create API keys for 'editor' role, simulating different users + johnRoleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('admin'); + editorRoleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('editor'); + internalReqHeader = svlCommonApi.getInternalRequestHeader(); + await createKnowledgeBaseModel(ml); + + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/kb/setup', + roleAuthc: editorRoleAuthc, + internalReqHeader, + }) + .expect(200); + }); + + after(async () => { + await deleteKnowledgeBaseModel(ml); + await clearKnowledgeBase(es); + await clearConversations(es); + await svlUserManager.invalidateM2mApiKeyWithRoleScope(johnRoleAuthc); + await svlUserManager.invalidateM2mApiKeyWithRoleScope(editorRoleAuthc); + }); + + describe('when creating private and public user instructions', () => { + before(async () => { + await clearKnowledgeBase(es); + + const promises = [ + { roleAuthc: editorRoleAuthc, username: 'editor', isPublic: true }, + { roleAuthc: editorRoleAuthc, username: 'editor', isPublic: false }, + { roleAuthc: johnRoleAuthc, username: 'john', isPublic: true }, + { roleAuthc: johnRoleAuthc, username: 'john', isPublic: false }, + ].map(async ({ roleAuthc, username, isPublic }) => { + const visibility = isPublic ? 'Public' : 'Private'; + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'PUT /internal/observability_ai_assistant/kb/user_instructions', + params: { + body: { + id: `${visibility.toLowerCase()}-doc-from-${username}`, + text: `${visibility} user instruction from "${username}"`, + public: isPublic, + }, + }, + roleAuthc, + internalReqHeader, + }) + .expect(200); + }); + + await Promise.all(promises); + }); + + it('"editor" can retrieve their own private instructions and the public instruction', async () => { + const res = await observabilityAIAssistantAPIClient.slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/user_instructions', + roleAuthc: editorRoleAuthc, + internalReqHeader, + }); + const instructions = res.body.userInstructions; + + const sortByDocId = (data: any) => sortBy(data, 'doc_id'); + expect(sortByDocId(instructions)).to.eql( + sortByDocId([ + { + doc_id: 'private-doc-from-editor', + public: false, + text: 'Private user instruction from "editor"', + }, + { + doc_id: 'public-doc-from-editor', + public: true, + text: 'Public user instruction from "editor"', + }, + { + doc_id: 'public-doc-from-john', + public: true, + text: 'Public user instruction from "john"', + }, + ]) + ); + }); + + it('"john" can retrieve their own private instructions and the public instruction', async () => { + const res = await observabilityAIAssistantAPIClient.slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/user_instructions', + roleAuthc: johnRoleAuthc, + internalReqHeader, + }); + const instructions = res.body.userInstructions; + + const sortByDocId = (data: any) => sortBy(data, 'doc_id'); + expect(sortByDocId(instructions)).to.eql( + sortByDocId([ + { + doc_id: 'public-doc-from-editor', + public: true, + text: 'Public user instruction from "editor"', + }, + { + doc_id: 'public-doc-from-john', + public: true, + text: 'Public user instruction from "john"', + }, + { + doc_id: 'private-doc-from-john', + public: false, + text: 'Private user instruction from "john"', + }, + ]) + ); + }); + }); + + describe('when updating an existing user instructions', () => { + before(async () => { + await clearKnowledgeBase(es); + + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'PUT /internal/observability_ai_assistant/kb/user_instructions', + params: { + body: { + id: 'doc-to-update', + text: 'Initial text', + public: true, + }, + }, + roleAuthc: editorRoleAuthc, + internalReqHeader, + }) + .expect(200); + + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'PUT /internal/observability_ai_assistant/kb/user_instructions', + params: { + body: { + id: 'doc-to-update', + text: 'Updated text', + public: false, + }, + }, + roleAuthc: editorRoleAuthc, + internalReqHeader, + }) + .expect(200); + }); + + it('updates the user instruction', async () => { + const res = await observabilityAIAssistantAPIClient.slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/user_instructions', + roleAuthc: editorRoleAuthc, + internalReqHeader, + }); + const instructions = res.body.userInstructions; + + expect(instructions).to.eql([ + { + doc_id: 'doc-to-update', + text: 'Updated text', + public: false, + }, + ]); + }); + }); + + describe('when a user instruction exists and a conversation is created', () => { + let proxy: LlmProxy; + let connectorId: string; + + const userInstructionText = + 'Be polite and use language that is easy to understand. Never disagree with the user.'; + + async function getConversationForUser(roleAuthc: RoleCredentials) { + // the user instruction is always created by "editor" user + await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'PUT /internal/observability_ai_assistant/kb/user_instructions', + params: { + body: { + id: 'private-instruction-about-language', + text: userInstructionText, + public: false, + }, + }, + roleAuthc: editorRoleAuthc, + internalReqHeader, + }) + .expect(200); + + const interceptPromises = [ + proxy.interceptConversationTitle('LLM-generated title').completeAfterIntercept(), + proxy + .interceptConversation({ name: 'conversation', response: 'I, the LLM, hear you!' }) + .completeAfterIntercept(), + ]; + + const messages: Message[] = [ + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.System, + content: 'You are a helpful assistant', + }, + }, + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.User, + content: 'Today we will be testing user instructions!', + }, + }, + ]; + + const createResponse = await observabilityAIAssistantAPIClient + .slsUser({ + endpoint: 'POST /internal/observability_ai_assistant/chat/complete', + params: { + body: { + messages, + connectorId, + persist: true, + screenContexts: [], + scope: 'observability', + }, + }, + roleAuthc, + internalReqHeader, + }) + .expect(200); + + await proxy.waitForAllInterceptorsSettled(); + const conversationCreatedEvent = getConversationCreatedEvent(createResponse.body); + const conversationId = conversationCreatedEvent.conversation.id; + + const res = await observabilityAIAssistantAPIClient.slsUser({ + endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', + params: { + path: { + conversationId, + }, + }, + roleAuthc, + internalReqHeader, + }); + + // wait for all interceptors to be settled + await Promise.all(interceptPromises); + + const conversation = res.body; + return conversation; + } + + before(async () => { + proxy = await createLlmProxy(log); + connectorId = await createProxyActionConnector({ + supertest: supertestWithoutAuth, + log, + port: proxy.getPort(), + roleAuthc: editorRoleAuthc, + internalReqHeader, + }); + }); + + after(async () => { + proxy.close(); + await deleteActionConnector({ + supertest: supertestWithoutAuth, + connectorId, + log, + roleAuthc: editorRoleAuthc, + internalReqHeader, + }); + }); + + it('adds the instruction to the system prompt', async () => { + const conversation = await getConversationForUser(editorRoleAuthc); + const systemMessage = conversation.messages.find( + (message) => message.message.role === MessageRole.System + )!; + expect(systemMessage.message.content).to.contain(userInstructionText); + }); + + it('does not add the instruction to the context', async () => { + const conversation = await getConversationForUser(editorRoleAuthc); + const contextMessage = conversation.messages.find( + (message) => message.message.name === CONTEXT_FUNCTION_NAME + ); + + // there should be no suggestions with the user instruction + expect(contextMessage?.message.content).to.not.contain(userInstructionText); + expect(contextMessage?.message.data).to.not.contain(userInstructionText); + + // there should be no suggestions at all + expect(JSON.parse(contextMessage?.message.data!).suggestions.length).to.be(0); + }); + + it('does not add the instruction conversation for other users', async () => { + const conversation = await getConversationForUser(johnRoleAuthc); + const systemMessage = conversation.messages.find( + (message) => message.message.role === MessageRole.System + )!; + + expect(systemMessage.message.content).to.not.contain(userInstructionText); + expect(conversation.messages.length).to.be(5); + }); + }); + }); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/public_complete/public_complete.spec.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/public_complete/public_complete.spec.ts new file mode 100644 index 0000000000000..4f61634d8d6e6 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/public_complete/public_complete.spec.ts @@ -0,0 +1,319 @@ +/* + * Copyright 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 { + FunctionDefinition, + MessageRole, + type Message, +} from '@kbn/observability-ai-assistant-plugin/common'; +import { type StreamingChatResponseEvent } from '@kbn/observability-ai-assistant-plugin/common/conversation_complete'; +import { pick } from 'lodash'; +import type OpenAI from 'openai'; +import { type AdHocInstruction } from '@kbn/observability-ai-assistant-plugin/common/types'; +import { + createLlmProxy, + isFunctionTitleRequest, + LlmProxy, + LlmResponseSimulator, +} from '@kbn/test-suites-xpack/observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { FtrProviderContext } from '../../common/ftr_provider_context'; +import { createProxyActionConnector, deleteActionConnector } from '../../common/action_connectors'; +import type { InternalRequestHeader, RoleCredentials } from '../../../../../../shared/services'; +import { deleteAllConversations } from '../conversations/helpers'; + +export default function ApiTest({ getService }: FtrProviderContext) { + const supertest = getService('supertestWithoutAuth'); + const svlUserManager = getService('svlUserManager'); + const svlCommonApi = getService('svlCommonApi'); + const log = getService('log'); + const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + + const messages: Message[] = [ + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.System, + content: 'You are a helpful assistant', + }, + }, + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.User, + content: 'Good morning, bot!', + }, + }, + ]; + describe('/api/observability_ai_assistant/chat/complete', function () { + // TODO: https://github.com/elastic/kibana/issues/192751 + this.tags(['skipMKI']); + + let proxy: LlmProxy; + let connectorId: string; + let roleAuthc: RoleCredentials; + let internalReqHeader: InternalRequestHeader; + + interface RequestOptions { + actions?: Array>; + instructions?: AdHocInstruction[]; + format?: 'openai' | 'default'; + } + + type ConversationSimulatorCallback = ( + conversationSimulator: LlmResponseSimulator + ) => Promise; + + async function getResponseBody( + { actions, instructions, format = 'default' }: RequestOptions, + conversationSimulatorCallback: ConversationSimulatorCallback + ) { + const titleInterceptor = proxy.intercept('title', (body) => isFunctionTitleRequest(body)); + + const conversationInterceptor = proxy.intercept( + 'conversation', + (body) => !isFunctionTitleRequest(body) + ); + + const responsePromise = observabilityAIAssistantAPIClient.slsUser({ + endpoint: 'POST /api/observability_ai_assistant/chat/complete 2023-10-31', + roleAuthc, + internalReqHeader, + params: { + query: { format }, + body: { + messages, + connectorId, + persist: true, + actions, + instructions, + }, + }, + }); + + const [conversationSimulator, titleSimulator] = await Promise.race([ + Promise.all([ + conversationInterceptor.waitForIntercept(), + titleInterceptor.waitForIntercept(), + ]), + // make sure any request failures (like 400s) are properly propagated + responsePromise.then(() => []), + ]); + + await titleSimulator.status(200); + await titleSimulator.next('My generated title'); + await titleSimulator.complete(); + + await conversationSimulator.status(200); + if (conversationSimulatorCallback) { + await conversationSimulatorCallback(conversationSimulator); + } + + const response = await responsePromise; + + return String(response.body); + } + + async function getEvents( + options: RequestOptions, + conversationSimulatorCallback: ConversationSimulatorCallback + ) { + const responseBody = await getResponseBody(options, conversationSimulatorCallback); + + return responseBody + .split('\n') + .map((line) => line.trim()) + .filter(Boolean) + .map((line) => JSON.parse(line) as StreamingChatResponseEvent) + .slice(2); // ignore context request/response, we're testing this elsewhere + } + + async function getOpenAIResponse(conversationSimulatorCallback: ConversationSimulatorCallback) { + const responseBody = await getResponseBody( + { + format: 'openai', + }, + conversationSimulatorCallback + ); + + return responseBody; + } + + before(async () => { + proxy = await createLlmProxy(log); + roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('admin'); + internalReqHeader = svlCommonApi.getInternalRequestHeader(); + connectorId = await createProxyActionConnector({ + supertest, + log, + port: proxy.getPort(), + internalReqHeader, + roleAuthc, + }); + }); + + after(async () => { + await deleteAllConversations({ + observabilityAIAssistantAPIClient, + internalReqHeader, + roleAuthc, + log, + }); + await deleteActionConnector({ supertest, connectorId, log, roleAuthc, internalReqHeader }); + proxy.close(); + await svlUserManager.invalidateM2mApiKeyWithRoleScope(roleAuthc); + }); + + describe('after executing an action', () => { + let events: StreamingChatResponseEvent[]; + + before(async () => { + events = await getEvents( + { + actions: [ + { + name: 'my_action', + description: 'My action', + parameters: { + type: 'object', + properties: { + foo: { + type: 'string', + }, + }, + }, + }, + ], + }, + async (conversationSimulator) => { + await conversationSimulator.next({ + function_call: { name: 'my_action', arguments: JSON.stringify({ foo: 'bar' }) }, + }); + await conversationSimulator.complete(); + } + ); + }); + + it('closes the stream without persisting the conversation', () => { + expect( + pick( + events[events.length - 1], + 'message.message.content', + 'message.message.function_call', + 'message.message.role' + ) + ).to.eql({ + message: { + message: { + content: '', + function_call: { + name: 'my_action', + arguments: JSON.stringify({ foo: 'bar' }), + trigger: MessageRole.Assistant, + }, + role: MessageRole.Assistant, + }, + }, + }); + }); + }); + + describe('after adding an instruction', () => { + let body: OpenAI.Chat.ChatCompletionCreateParamsNonStreaming; + + before(async () => { + await getEvents( + { + instructions: [ + { + text: 'This is a random instruction', + instruction_type: 'user_instruction', + }, + ], + }, + async (conversationSimulator) => { + body = conversationSimulator.body; + + await conversationSimulator.next({ + function_call: { name: 'my_action', arguments: JSON.stringify({ foo: 'bar' }) }, + }); + await conversationSimulator.complete(); + } + ); + }); + + it('includes the instruction in the system message', async () => { + expect(body.messages[0].content).to.contain('This is a random instruction'); + }); + }); + + describe('with openai format', () => { + let responseBody: string; + + before(async () => { + responseBody = await getOpenAIResponse(async (conversationSimulator) => { + await conversationSimulator.next('Hello'); + await conversationSimulator.complete(); + }); + }); + + function extractDataParts(lines: string[]) { + return lines.map((line) => { + // .replace is easier, but we want to verify here whether + // it matches the SSE syntax (`data: ...`) + const [, dataPart] = line.match(/^data: (.*)$/) || ['', '']; + return dataPart.trim(); + }); + } + + function getLines() { + return responseBody.split('\n\n').filter(Boolean); + } + + it('outputs each line an SSE-compatible format (data: ...)', () => { + const lines = getLines(); + + lines.forEach((line) => { + expect(line.match(/^data: /)); + }); + }); + + it('ouputs one chunk, and one [DONE] event', () => { + const dataParts = extractDataParts(getLines()); + + expect(dataParts[0]).not.to.be.empty(); + expect(dataParts[1]).to.be('[DONE]'); + }); + + it('outuputs an OpenAI-compatible chunk', () => { + const [dataLine] = extractDataParts(getLines()); + + expect(() => { + JSON.parse(dataLine); + }).not.to.throwException(); + + const parsedChunk = JSON.parse(dataLine); + + expect(parsedChunk).to.eql({ + model: 'unknown', + choices: [ + { + delta: { + content: 'Hello', + }, + finish_reason: null, + index: 0, + }, + ], + object: 'chat.completion.chunk', + // just test that these are a string and a number + id: String(parsedChunk.id), + created: Number(parsedChunk.created), + }); + }); + }); + }); +} From 8a89c8576df104c16ae3abf39b9db766e56d4e3b Mon Sep 17 00:00:00 2001 From: Cee Chen <549407+cee-chen@users.noreply.github.com> Date: Mon, 30 Sep 2024 16:25:47 -0700 Subject: [PATCH 52/60] Upgrade EUI to v95.12.0 (#193805) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `v95.11.0`⏩`v95.12.0-backport.0` > [!note] > A few fun highlights from this release: > - Content within `EuiDataGrid`, `EuiBasicTable`, and `EuiInMemoryTable`, when manually selected/highlighted by users, should now more cleanly copy and paste into various spreadsheet apps > - `EuiProvider` will now detect the user's system-level dark or light mode and default to that if no `colorMode` prop is passed manually _[Questions? Please see our Kibana upgrade FAQ.](https://github.com/elastic/eui/blob/main/wiki/eui-team-processes/upgrading-kibana.md#faq-for-kibana-teams)_ --- ## [`v95.12.0`](https://github.com/elastic/eui/releases/v95.12.0) - Enhanced `EuiDataGrid` and `EuiBasic/InMemoryTable` to clean content newlines/tabs when users copy and paste from their tabular data ([#8019](https://github.com/elastic/eui/pull/8019)) - Updated `EuiResizableButton` with a new `accountForScrollbars` prop ([#8021](https://github.com/elastic/eui/pull/8021)) - Updated `EuiProvider` to inherit from the user's OS/system light/dark mode setting if a `colorMode` prop has not been passed ([#8026](https://github.com/elastic/eui/pull/8026)) **Bug fixes** - Fixed `EuiDatePicker`'s `onClear` button to not appear when the input is `disabled` ([#8020](https://github.com/elastic/eui/pull/8020)) - Fixed several `EuiDataGrid` row height bugs: ([#8025](https://github.com/elastic/eui/pull/8025)) - Fixed row heights not recalculating when `rowHeightOptions.lineHeight`, `gridStyles.fontSize`, or `gridStyles.cellPadding` changed - Fixed incorrect height calculations for `rowHeightOptions.rowHeights` with `lineCount`s - Fixed control column content to align better with multi-line row heights, as well as custom line-heights ## [`v95.12.0-backport.0`](https://github.com/elastic/eui/releases/v95.12.0-backport.0) **This is a backport release only intended for use by Kibana.** **Bug fixes** - Fixed `EuiProvider`'s system color mode detection causing errors during server-side rendering ([#8040](https://github.com/elastic/eui/pull/8040)) - Fixed an `EuiDataGrid` rendering bug that was causing bouncing scrollbar issues ([#8041](https://github.com/elastic/eui/pull/8041)) --- package.json | 2 +- .../src/jest/setup/polyfills.jsdom.js | 20 +++------ packages/kbn-unified-data-table/index.ts | 1 - .../row_control_column.tsx | 37 ++++++++-------- .../row_menu_control_column.tsx | 34 ++++++-------- .../src/components/data_table.scss | 17 +++---- .../data_table_document_selection.tsx | 38 ++++++---------- .../components/data_table_expand_button.tsx | 44 ++++++++++--------- .../src/components/data_table_row_control.tsx | 26 ----------- src/dev/license_checker/config.ts | 2 +- .../apps/discover/esql/_esql_view.ts | 2 +- test/functional/services/data_grid.ts | 29 ++++++++---- .../cypress/e2e/all/packs_create_edit.cy.ts | 4 +- .../cypress/tasks/response_actions.ts | 11 +++-- ...stom_timeline_data_grid_body.test.tsx.snap | 5 --- .../custom_timeline_data_grid_body.tsx | 3 -- .../services/ml/common_data_grid.ts | 2 +- .../services/ml/data_frame_analytics_table.ts | 2 +- .../hosts/hosts_risk_column.cy.ts | 4 +- .../cypress/screens/alerts_details.ts | 2 +- .../common/discover/esql/_esql_view.ts | 2 +- yarn.lock | 8 ++-- 22 files changed, 126 insertions(+), 169 deletions(-) delete mode 100644 packages/kbn-unified-data-table/src/components/data_table_row_control.tsx diff --git a/package.json b/package.json index cad364998e3c8..110b8ec23a6bf 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "@elastic/ecs": "^8.11.1", "@elastic/elasticsearch": "^8.15.0", "@elastic/ems-client": "8.5.3", - "@elastic/eui": "95.11.0", + "@elastic/eui": "95.12.0-backport.0", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", diff --git a/packages/kbn-test/src/jest/setup/polyfills.jsdom.js b/packages/kbn-test/src/jest/setup/polyfills.jsdom.js index 308bf18a9ffbd..e6616c2bccfa1 100644 --- a/packages/kbn-test/src/jest/setup/polyfills.jsdom.js +++ b/packages/kbn-test/src/jest/setup/polyfills.jsdom.js @@ -53,22 +53,16 @@ if (!Object.hasOwn(global, 'Worker')) { if (!Object.hasOwn(global, 'matchMedia')) { Object.defineProperty(global, 'matchMedia', { writable: true, - // eslint-disable-next-line no-undef - value: jest.fn().mockImplementation((query) => ({ + value: (query) => ({ matches: false, media: query, onchange: null, - // eslint-disable-next-line no-undef - addListener: jest.fn(), // deprecated - // eslint-disable-next-line no-undef - removeListener: jest.fn(), // deprecated - // eslint-disable-next-line no-undef - addEventListener: jest.fn(), - // eslint-disable-next-line no-undef - removeEventListener: jest.fn(), - // eslint-disable-next-line no-undef - dispatchEvent: jest.fn(), - })), + addListener: () => {}, + removeListener: () => {}, + addEventListener: () => {}, + removeEventListener: () => {}, + dispatchEvent: () => {}, + }), }); } } diff --git a/packages/kbn-unified-data-table/index.ts b/packages/kbn-unified-data-table/index.ts index 8f7e711bebcad..40a3dcc23dda8 100644 --- a/packages/kbn-unified-data-table/index.ts +++ b/packages/kbn-unified-data-table/index.ts @@ -28,7 +28,6 @@ export { popularizeField } from './src/utils/popularize_field'; export { useColumns, type UseColumnsProps } from './src/hooks/use_data_grid_columns'; export { OPEN_DETAILS, SELECT_ROW } from './src/components/data_table_columns'; // TODO: deprecate? -export { DataTableRowControl } from './src/components/data_table_row_control'; export type { UnifiedDataTableRenderCustomToolbar, diff --git a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.tsx b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.tsx index 3519bef843c4a..d1fec11906df4 100644 --- a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.tsx +++ b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.tsx @@ -16,7 +16,6 @@ import { EuiToolTip, } from '@elastic/eui'; import { RowControlColumn, RowControlProps } from '@kbn/discover-utils'; -import { DataTableRowControl, Size } from '../../data_table_row_control'; import { DEFAULT_CONTROL_COLUMN_WIDTH } from '../../../constants'; import { useControlColumn } from '../../../hooks/use_control_column'; @@ -40,23 +39,25 @@ export const RowControlCell = ({ tooltipContent, }) => { return ( - - - { - if (record) { - onClick?.({ record, rowIndex }); - } - }} - /> - - + + { + if (record) { + onClick?.({ record, rowIndex }); + } + }} + /> + ); }, [props.columnId, record, rowIndex] diff --git a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.tsx b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.tsx index 3d6cd19a53b1e..cc600df002502 100644 --- a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.tsx +++ b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.tsx @@ -19,9 +19,7 @@ import { EuiToolTip, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { css } from '@emotion/react'; import { RowControlColumn, RowControlProps } from '@kbn/discover-utils'; -import { DataTableRowControl, Size } from '../../data_table_row_control'; import { DEFAULT_CONTROL_COLUMN_WIDTH } from '../../../constants'; import { useControlColumn } from '../../../hooks/use_control_column'; @@ -80,26 +78,20 @@ export const RowMenuControlCell = ({ return ( - - { - setIsMoreActionsPopoverOpen(!isMoreActionsPopoverOpen); - }} - /> - - + + { + setIsMoreActionsPopoverOpen(!isMoreActionsPopoverOpen); + }} + /> + } isOpen={isMoreActionsPopoverOpen} closePopover={() => setIsMoreActionsPopoverOpen(false)} diff --git a/packages/kbn-unified-data-table/src/components/data_table.scss b/packages/kbn-unified-data-table/src/components/data_table.scss index 5bf8773db9c0b..263cc1a801083 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.scss +++ b/packages/kbn-unified-data-table/src/components/data_table.scss @@ -125,16 +125,17 @@ .unifiedDataTable__rowControl { // fine-tuning the vertical alignment with the text for any row height setting - margin-top: -$euiSizeXS; - .euiDataGridRowCell__content--defaultHeight & { // "Single line" row height setting - margin-top: 0; + margin-top: -1px; + + // Compact density - 'auto & custom' row height + .euiDataGrid--fontSizeSmall .euiDataGridRowCell__content:not(.euiDataGridRowCell__content--defaultHeight) & { + margin-top: -2.5px; } - &--size-normal { - display: inline-block; - width: $euiSizeL; - height: $euiSizeL; - overflow: hidden; + // Compact density - 'single' row height + .euiDataGrid--fontSizeSmall .euiDataGridRowCell__content--defaultHeight & { + align-self: flex-start; + margin-top: -3px; } } diff --git a/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx b/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx index c101d8c20f751..7395763e3de34 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx @@ -50,32 +50,22 @@ export const SelectButton = (props: EuiDataGridCellValueElementProps) => { } return ( - { + if ((event.nativeEvent as MouseEvent)?.shiftKey) { + toggleMultipleDocsSelection(record.id); + } else { + toggleDocSelection(record.id); + } + }} css={css` - padding-block: ${euiTheme.size.xs}; // to have the same height as "openDetails" control - padding-left: ${euiTheme.size.xs}; // space between controls + margin-left: ${euiTheme.size.xs}; /* fine tune horizontal alignment */ `} - > - - { - if ((event.nativeEvent as MouseEvent)?.shiftKey) { - toggleMultipleDocsSelection(record.id); - } else { - toggleDocSelection(record.id); - } - }} - /> - - + /> ); }; diff --git a/packages/kbn-unified-data-table/src/components/data_table_expand_button.tsx b/packages/kbn-unified-data-table/src/components/data_table_expand_button.tsx index f5bb21bc0c95d..ab98696ed685d 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_expand_button.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_expand_button.tsx @@ -11,7 +11,6 @@ import React, { useContext, useEffect, useRef, useState } from 'react'; import { EuiButtonIcon, EuiDataGridCellValueElementProps, EuiToolTip } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { UnifiedDataTableContext } from '../table_context'; -import { DataTableRowControl, Size } from './data_table_row_control'; import { useControlColumn } from '../hooks/use_control_column'; /** @@ -49,25 +48,28 @@ export const ExpandButton = (props: EuiDataGridCellValueElementProps) => { } return ( - - - { - const nextHit = isCurrentRowExpanded ? undefined : record; - toolTipRef.current?.hideToolTip(); - setPressed(Boolean(nextHit)); - setExpanded?.(nextHit); - }} - color={isCurrentRowExpanded ? 'primary' : 'text'} - iconType={isCurrentRowExpanded ? 'minimize' : 'expand'} - isSelected={isCurrentRowExpanded} - /> - - + + { + const nextHit = isCurrentRowExpanded ? undefined : record; + toolTipRef.current?.hideToolTip(); + setPressed(Boolean(nextHit)); + setExpanded?.(nextHit); + }} + color={isCurrentRowExpanded ? 'primary' : 'text'} + iconType={isCurrentRowExpanded ? 'minimize' : 'expand'} + isSelected={isCurrentRowExpanded} + /> + ); }; diff --git a/packages/kbn-unified-data-table/src/components/data_table_row_control.tsx b/packages/kbn-unified-data-table/src/components/data_table_row_control.tsx deleted file mode 100644 index 68bf3174975b8..0000000000000 --- a/packages/kbn-unified-data-table/src/components/data_table_row_control.tsx +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React from 'react'; -import classnames from 'classnames'; - -export enum Size { - normal = 'normal', -} - -export const DataTableRowControl: React.FC> = ({ - size, - children, -}) => { - const classes = classnames('unifiedDataTable__rowControl', { - // normalize the size of the control - [`unifiedDataTable__rowControl--size-${size}`]: size, - }); - return {children}; -}; diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index df5da2aff7183..15d08e194c4df 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -87,7 +87,7 @@ export const LICENSE_OVERRIDES = { 'jsts@1.6.2': ['Eclipse Distribution License - v 1.0'], // cf. https://github.com/bjornharrtell/jsts '@mapbox/jsonlint-lines-primitives@2.0.2': ['MIT'], // license in readme https://github.com/tmcw/jsonlint '@elastic/ems-client@8.5.3': ['Elastic License 2.0'], - '@elastic/eui@95.11.0': ['Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0'], + '@elastic/eui@95.12.0-backport.0': ['Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODC‑By license https://github.com/mattcg/language-subtag-registry 'buffers@0.1.1': ['MIT'], // license in importing module https://www.npmjs.com/package/binary '@bufbuild/protobuf@1.2.1': ['Apache-2.0'], // license (Apache-2.0 AND BSD-3-Clause) diff --git a/test/functional/apps/discover/esql/_esql_view.ts b/test/functional/apps/discover/esql/_esql_view.ts index 98bf29b187402..01660925db799 100644 --- a/test/functional/apps/discover/esql/_esql_view.ts +++ b/test/functional/apps/discover/esql/_esql_view.ts @@ -199,7 +199,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 1); expect(await cell.getVisibleText()).to.be(' - '); expect(await dataGrid.getHeaders()).to.eql([ - "Select columnPress the Enter key to interact with this cell's contents.", // contains screen reader help text + 'Select column', 'Control column', 'Access to degraded docs', 'Access to available stacktraces', diff --git a/test/functional/services/data_grid.ts b/test/functional/services/data_grid.ts index 903e38427181b..07a723857088c 100644 --- a/test/functional/services/data_grid.ts +++ b/test/functional/services/data_grid.ts @@ -9,7 +9,7 @@ import { chunk } from 'lodash'; import { Key } from 'selenium-webdriver'; -import { WebElementWrapper } from '@kbn/ftr-common-functional-ui-services'; +import { WebElementWrapper, CustomCheerioStatic } from '@kbn/ftr-common-functional-ui-services'; import { FtrService } from '../ftr_provider_context'; export interface TabbedGridData { @@ -34,12 +34,10 @@ export class DataGridService extends FtrService { const table = await this.find.byCssSelector('.euiDataGrid'); const $ = await table.parseDomContent(); - const columns = $('.euiDataGridHeaderCell') - .toArray() - .map((cell) => $(cell).text()); + const columns = this.getHeaderText($); const cells = $.findTestSubjects('dataGridRowCell') .toArray() - .map((cell) => $(cell).text()); + .map((cell) => $(cell).find('.euiDataGridRowCell__content').text()); const rows = chunk(cells, columns.length); @@ -76,12 +74,25 @@ export class DataGridService extends FtrService { /** * Returns an array of data grid headers names */ - public async getHeaders() { - const header = await this.testSubjects.find('euiDataGridBody > dataGridHeader'); - const $ = await header.parseDomContent(); + public getHeaderText(parsedDomContent: CustomCheerioStatic) { + const $ = parsedDomContent; return $('.euiDataGridHeaderCell') .toArray() - .map((cell) => $(cell).text()); + .map((cell) => { + const content = $(cell).find('.euiDataGridHeaderCell__content'); + if (content.length) { + return content.text(); + } else { + // Control columns will need hidden text manually stripped + $(cell).find('[hidden], [data-tabular-copy-marker]').remove(); + return $(cell).text(); + } + }); + } + + public async getHeaders() { + const header = await this.testSubjects.find('euiDataGridBody > dataGridHeader'); + return this.getHeaderText(await header.parseDomContent()); } public getHeaderElement(field: string) { diff --git a/x-pack/plugins/osquery/cypress/e2e/all/packs_create_edit.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/packs_create_edit.cy.ts index d3047656ad16a..dbed4e56f88a0 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/packs_create_edit.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/packs_create_edit.cy.ts @@ -577,7 +577,9 @@ describe('Packs - Create and Edit', { tags: ['@ess', '@serverless'] }, () => { cy.getBySel('docsLoading').should('exist'); cy.getBySel('docsLoading').should('not.exist'); - return cy.get('tbody .euiTableRow > td:nth-child(5)').invoke('text'); + return cy + .get('tbody .euiTableRow > td:nth-child(5) > .euiTableCellContent') + .invoke('text'); }, (response) => response !== '-', { diff --git a/x-pack/plugins/security_solution/public/management/cypress/tasks/response_actions.ts b/x-pack/plugins/security_solution/public/management/cypress/tasks/response_actions.ts index 715f8adc972f5..03d9ab6590167 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/tasks/response_actions.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/tasks/response_actions.ts @@ -114,13 +114,12 @@ export const getRunningProcesses = (command: string): Cypress.Chainable .getByTestSubj('processesOutput-processListTable', { timeout: 120000 }) .findByTestSubj('processesOutput-command') .contains(command) - .parents('td') - .siblings('td') - .eq(1) - .find('span') - .then((span) => { + .parents('tr') + .findByTestSubj('processesOutput-pid') + .find('.euiTableCellContent') + .then((cellContent) => { // get pid - return Number(span.text()); + return Number(cellContent.text()); }); }; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/__snapshots__/custom_timeline_data_grid_body.test.tsx.snap b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/__snapshots__/custom_timeline_data_grid_body.test.tsx.snap index eaac9cb5dada6..d54175194b748 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/__snapshots__/custom_timeline_data_grid_body.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/__snapshots__/custom_timeline_data_grid_body.test.tsx.snap @@ -40,11 +40,6 @@ exports[`CustomTimelineDataGridBody should render exactly as snapshots 1`] = ` min-height: 34px; } -.c1 .euiDataGridRowCell .unifiedDataTable__rowControl, -.c1 .euiDataGridRowCell__content .unifiedDataTable__rowControl { - margin-top: -4px; -} -
{ - const cellText = $(cell).text(); + const cellText = $(cell).find('.euiDataGridRowCell__content').text(); const columnData = $(cell).attr('data-gridcell-column-index'); const rowData = $(cell).attr('data-gridcell-row-index'); return { text: cellText, column: Number(columnData) + 1, row: Number(rowData) }; diff --git a/x-pack/test/functional/services/ml/data_frame_analytics_table.ts b/x-pack/test/functional/services/ml/data_frame_analytics_table.ts index 3279013f98069..77041a5bf12d3 100644 --- a/x-pack/test/functional/services/ml/data_frame_analytics_table.ts +++ b/x-pack/test/functional/services/ml/data_frame_analytics_table.ts @@ -436,7 +436,7 @@ export function MachineLearningDataFrameAnalyticsTableProvider({ const vars: Record = {}; for (const row of $('tr').toArray()) { - const [name, value] = $(row).find('td').toArray(); + const [name, value] = $(row).find('td').find('.euiTableCellContent').toArray(); vars[$(name).text().trim()] = $(value).text().trim(); } diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/hosts/hosts_risk_column.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/hosts/hosts_risk_column.cy.ts index cf52585f9bbea..179dbb0277a11 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/hosts/hosts_risk_column.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/hosts/hosts_risk_column.cy.ts @@ -32,7 +32,7 @@ describe('All hosts table', { tags: ['@ess'] }, () => { kqlSearch('host.name: "siem-kibana" {enter}'); cy.get('[data-test-subj="tableHeaderCell_node.risk_4"]').should('exist'); - cy.get(`${TABLE_CELL} .euiTableCellContent`).eq(4).should('have.text', 'Low'); + cy.get(TABLE_CELL).eq(4).should('have.text', 'Low'); }); }); @@ -55,7 +55,7 @@ describe('All hosts table', { tags: ['@ess'] }, () => { kqlSearch('host.name: "siem-kibana" {enter}'); cy.get('[data-test-subj="tableHeaderCell_node.risk_4"]').should('exist'); - cy.get(`${TABLE_CELL} .euiTableCellContent`).eq(4).should('have.text', 'Critical'); + cy.get(TABLE_CELL).eq(4).should('have.text', 'Critical'); }); }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/alerts_details.ts b/x-pack/test/security_solution_cypress/cypress/screens/alerts_details.ts index bbae387497af7..aeca3f232588c 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/alerts_details.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/alerts_details.ts @@ -30,7 +30,7 @@ export const OVERVIEW_STATUS = '[data-test-subj="eventDetails"] [data-test-subj= export const EVENT_DETAILS_ALERT_STATUS_POPOVER = '[data-test-subj="event-details-alertStatusPopover"]'; -export const TABLE_CELL = '.euiTableRowCell'; +export const TABLE_CELL = '.euiTableRowCell .euiTableCellContent'; export const CELL_EXPAND_VALUE = '[data-test-subj="euiDataGridCellExpandButton"]'; 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 index 7881f5545388f..1bedd0acd0cc4 100644 --- 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 @@ -202,7 +202,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 1); expect(await cell.getVisibleText()).to.be(' - '); expect(await dataGrid.getHeaders()).to.eql([ - "Select columnPress the Enter key to interact with this cell's contents.", // contains screen reader help text + 'Select column', 'Control column', 'Access to degraded docs', 'Access to available stacktraces', diff --git a/yarn.lock b/yarn.lock index a3d54dbd3f1bd..ea20375155074 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1741,10 +1741,10 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui@95.11.0": - version "95.11.0" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-95.11.0.tgz#40e8124ac54c625ba7160cb84a378507abdeaf40" - integrity sha512-O688EbhrgSrV9j54mnK4xLyhv+imkBv5ti7isqLxJtd0L7Fe2A1d6EaA11Qv5plOwwC+cGsrkrDnlSqi1MtNoQ== +"@elastic/eui@95.12.0-backport.0": + version "95.12.0-backport.0" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-95.12.0-backport.0.tgz#de862ded9f23053b24e1f1939de1ff8f8109be60" + integrity sha512-hqhqWdAGw5tQwWTP/hn2VoM8YQE2k9IdMmGh0RdkG+JcD1GZySvSDWdTQgr9iA4/XaulJp9R3OenwDjkLLmjPw== dependencies: "@hello-pangea/dnd" "^16.6.0" "@types/lodash" "^4.14.202" From c5d75b98577bafba9773747b19d787a43b9599ad Mon Sep 17 00:00:00 2001 From: "elastic-renovate-prod[bot]" <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 18:51:20 -0500 Subject: [PATCH 53/60] Update actions/checkout action to v4.2.0 (main) (#194078) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/checkout](https://togithub.com/actions/checkout) | action | minor | `v4.1.7` -> `v4.2.0` | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Release Notes
actions/checkout (actions/checkout) ### [`v4.2.0`](https://togithub.com/actions/checkout/blob/HEAD/CHANGELOG.md#v420) [Compare Source](https://togithub.com/actions/checkout/compare/v4.1.7...v4.2.0) - Add Ref and Commit outputs by [@​lucacome](https://togithub.com/lucacome) in [https://github.com/actions/checkout/pull/1180](https://togithub.com/actions/checkout/pull/1180) - Dependency updates by [@​dependabot-](https://togithub.com/dependabot-) [https://github.com/actions/checkout/pull/1777](https://togithub.com/actions/checkout/pull/1777), [https://github.com/actions/checkout/pull/1872](https://togithub.com/actions/checkout/pull/1872)
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://togithub.com/renovatebot/renovate). Co-authored-by: elastic-renovate-prod[bot] <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> Co-authored-by: Jon --- .github/workflows/alert-failed-test.yml | 2 +- .github/workflows/codeql-stats.yml | 2 +- .github/workflows/codeql.yml | 4 ++-- .github/workflows/label-failed-test.yml | 2 +- .github/workflows/launchdarkly-code-references.yml | 2 +- .github/workflows/on-merge.yml | 2 +- .github/workflows/skip-failed-test.yml | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/alert-failed-test.yml b/.github/workflows/alert-failed-test.yml index 4d465b03dd43f..90e7ef6371d1a 100644 --- a/.github/workflows/alert-failed-test.yml +++ b/.github/workflows/alert-failed-test.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout kibana-operations - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: repository: 'elastic/kibana-operations' ref: main diff --git a/.github/workflows/codeql-stats.yml b/.github/workflows/codeql-stats.yml index fc01cdd969295..e6b10f028dffc 100644 --- a/.github/workflows/codeql-stats.yml +++ b/.github/workflows/codeql-stats.yml @@ -11,7 +11,7 @@ jobs: if: github.repository == 'elastic/kibana' # Hack: Do not run on forks steps: - name: Checkout kibana-operations - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: repository: 'elastic/kibana-operations' ref: main diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 82080dd9235f9..5a93858e2d4a8 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: ref: ${{ matrix.branch }} @@ -61,7 +61,7 @@ jobs: if: github.repository == 'elastic/kibana' # Hack: Do not run on forks steps: - name: Checkout kibana-operations - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: repository: 'elastic/kibana-operations' ref: main diff --git a/.github/workflows/label-failed-test.yml b/.github/workflows/label-failed-test.yml index 358ff08edecd1..b3732eff3b2e5 100644 --- a/.github/workflows/label-failed-test.yml +++ b/.github/workflows/label-failed-test.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout kibana-operations - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: repository: 'elastic/kibana-operations' ref: main diff --git a/.github/workflows/launchdarkly-code-references.yml b/.github/workflows/launchdarkly-code-references.yml index eb32608d74928..1034d25b29e85 100644 --- a/.github/workflows/launchdarkly-code-references.yml +++ b/.github/workflows/launchdarkly-code-references.yml @@ -16,7 +16,7 @@ jobs: if: github.event.repository.fork == false runs-on: ubuntu-latest steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: fetch-depth: 11 # This value must be set if the lookback configuration option is not disabled for find-code-references. Read more: https://github.com/launchdarkly/ld-find-code-refs#searching-for-unused-flags-extinctions - name: LaunchDarkly Code References diff --git a/.github/workflows/on-merge.yml b/.github/workflows/on-merge.yml index b41d04bf85174..7ab6aa106d7f6 100644 --- a/.github/workflows/on-merge.yml +++ b/.github/workflows/on-merge.yml @@ -29,7 +29,7 @@ jobs: contains(github.event.pull_request.labels.*.name, 'auto-backport')))) steps: - name: Checkout Actions - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: repository: 'elastic/kibana-github-actions' ref: main diff --git a/.github/workflows/skip-failed-test.yml b/.github/workflows/skip-failed-test.yml index 913ba7b9648d4..46c569aeeef08 100644 --- a/.github/workflows/skip-failed-test.yml +++ b/.github/workflows/skip-failed-test.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Actions - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: repository: 'elastic/kibana-github-actions' ref: main @@ -30,7 +30,7 @@ jobs: token: ${{secrets.KIBANAMACHINE_TOKEN}} - name: Checkout kibana-operations - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: repository: 'elastic/kibana-operations' ref: main From 48b2099e0dbc2f05a1ce151e0f68b8841e286d52 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 1 Oct 2024 10:15:14 +1000 Subject: [PATCH 54/60] skip failing test suite (#184600) --- test/functional/apps/discover/group3/_lens_vis.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/functional/apps/discover/group3/_lens_vis.ts b/test/functional/apps/discover/group3/_lens_vis.ts index 30918f91ff2fb..b5907a97bb5ab 100644 --- a/test/functional/apps/discover/group3/_lens_vis.ts +++ b/test/functional/apps/discover/group3/_lens_vis.ts @@ -102,7 +102,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return seriesType; } - describe('discover lens vis', function () { + // Failing: See https://github.com/elastic/kibana/issues/184600 + describe.skip('discover lens vis', function () { before(async () => { await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader']); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); From cc02343d36fa3fa273e476d32c776f84164f6770 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 1 Oct 2024 10:17:13 +1000 Subject: [PATCH 55/60] skip failing test suite (#193868) --- test/functional/apps/console/_misc_console_behavior.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/test/functional/apps/console/_misc_console_behavior.ts b/test/functional/apps/console/_misc_console_behavior.ts index 03f38980bcfa6..9da5ea362fde3 100644 --- a/test/functional/apps/console/_misc_console_behavior.ts +++ b/test/functional/apps/console/_misc_console_behavior.ts @@ -18,6 +18,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const browser = getService('browser'); const PageObjects = getPageObjects(['common', 'console', 'header']); + // Failing: See https://github.com/elastic/kibana/issues/193868 // Failing: See https://github.com/elastic/kibana/issues/193868 describe.skip('misc console behavior', function testMiscConsoleBehavior() { before(async () => { From 5ed0426ef6657af24437d1931fc99c7094dc1e35 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Mon, 30 Sep 2024 17:33:31 -0700 Subject: [PATCH 56/60] [DOCS] Add TheHive connector to case settings (#193802) --- docs/management/action-types.asciidoc | 4 +-- .../cases/manage-cases-settings.asciidoc | 3 +- .../connectors/action-types/thehive.asciidoc | 34 +++++++++---------- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/docs/management/action-types.asciidoc b/docs/management/action-types.asciidoc index a39b5a996dca3..30bf4f791e5d8 100644 --- a/docs/management/action-types.asciidoc +++ b/docs/management/action-types.asciidoc @@ -92,9 +92,9 @@ a| <> | Create an incident in {swimlane}. -a| <> +a| <> -| Create cases and alerts in TheHive. +| Create cases and alerts in {hive}. a| <> diff --git a/docs/management/cases/manage-cases-settings.asciidoc b/docs/management/cases/manage-cases-settings.asciidoc index b0764c495101a..13079d35a27a0 100644 --- a/docs/management/cases/manage-cases-settings.asciidoc +++ b/docs/management/cases/manage-cases-settings.asciidoc @@ -31,6 +31,7 @@ management systems: * {sn-itsm} * {sn-sir} * {swimlane} +* {hive} * {webhook-cm} NOTE: To create connectors and send cases to external systems, you must have the @@ -45,7 +46,7 @@ Alternatively, you can create them in *{stack-manage-app} > Cases > Settings*: . Enter your required settings. Refer to <>, <>, <>, <>, -<>, or <> for connector +<>, <>, or <> for connector configuration details. You can subsequently choose the connector when you create cases and use it in case templates. diff --git a/docs/management/connectors/action-types/thehive.asciidoc b/docs/management/connectors/action-types/thehive.asciidoc index d218833527ee3..e847d0b621eca 100644 --- a/docs/management/connectors/action-types/thehive.asciidoc +++ b/docs/management/connectors/action-types/thehive.asciidoc @@ -1,18 +1,18 @@ [[thehive-action-type]] -== TheHive connector and action +== {hive} connector and action ++++ -TheHive +{hive} ++++ -:frontmatter-description: Add a connector that can create cases and alerts in TheHive. +:frontmatter-description: Add a connector that can create cases and alerts in {hive}. :frontmatter-tags-products: [kibana] :frontmatter-tags-content-type: [how-to] :frontmatter-tags-user-goals: [configure] -TheHive connector uses the https://docs.strangebee.com/thehive/api-docs/[TheHive (v1) REST API] to create cases and alerts. added:[8.16.0] +{hive} connector uses the https://docs.strangebee.com/thehive/api-docs/[{hive} (v1) REST API] to create cases and alerts. added:[8.16.0] [NOTE] ==== -If you use this connector with <>, the status values differ in {kib} and TheHive. +If you use this connector with <>, the status values differ in {kib} and {hive}. The status values are not synchronized when you update a case. ==== @@ -24,19 +24,19 @@ You can create connectors in *{stack-manage-app} > {connectors-ui}* or as needed when you're creating a rule. For example: [role="screenshot"] -image::management/connectors/images/thehive-connector.png[TheHive connector] +image::management/connectors/images/thehive-connector.png[{hive} connector] // NOTE: This is an autogenerated screenshot. Do not edit it directly. [float] [[thehive-connector-configuration]] ==== Connector configuration -TheHive connectors have the following configuration properties: +{hive} connectors have the following configuration properties: Name:: The name of the connector. -Organisation:: The organisation in TheHive that will contain the cases or alerts. -URL:: The instance URL in TheHive. -API key:: The API key for authentication in TheHive. +Organisation:: The organisation in {hive} that will contain the cases or alerts. +URL:: The instance URL in {hive}. +API key:: The API key for authentication in {hive}. [float] [[thehive-action-configuration]] @@ -46,16 +46,16 @@ You can test connectors for creating a case or an alert with the <> to customize connecto [float] [[configure-thehive]] -=== Configure TheHive +=== Configure {hive} -To generate an API key in TheHive: +To generate an API key in {hive}: -1. Log in to your TheHive instance. +1. Log in to your {hive} instance. 2. Open profile tab and select the settings. 3. Go to *API Key*. 4. Click *Create* if no API key has been created previously; otherwise, you can view the API key by clicking on *Reveal*. From 35233ba890558a8251b71a0fba33d8f42fae662d Mon Sep 17 00:00:00 2001 From: Andrew Macri Date: Mon, 30 Sep 2024 20:49:52 -0400 Subject: [PATCH 57/60] [Security Solution] [Security Assistant] Fixes an unable to load page error in the Security assistant (#194488) ### [Security Solution] [Security Assistant] Fixes an unable to load page error in the Security assistant This PR fixes an `Unable to load page error` in the Security Assistant, introduced in , where a check that appeared to be optional was removed. - The issue occurs when the assistant is asked a question that is likely to require anonymization, for example: `which alerts should I look at first?` - After the error occurs, re-opening the assistant for the same conversation may re-trigger the error - As a workaround, clear Kibana local storage for the current user, or via the browser's dev tools, specifically delete the `elasticAssistantDefault.lastConversationId` setting illustrated by the screenshot below: ![local_storage_key](https://github.com/user-attachments/assets/882f68e2-a253-49d7-84ad-fe2326bbfe20) ### Steps to reproduce To reproduce: 1) Ask the assistant a question that is likely to cause anonymized alerts to be returned, for example: `which alerts should I look at first?` **Expected result** - Anonymized alerts are displayed **Actual result** - An `Unable to load page` error is displayed, as illustrated by the screenshot below: ![unable_to_load_page](https://github.com/user-attachments/assets/54006a07-5a79-45d6-97cb-f36e0a71361f) - The error details include text similar to the output below: ``` TypeError: Cannot convert undefined or null to object at Function.keys () at replaceAnonymizedValuesWithOriginalValues (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:60965:14) at transformMessageWithReplacements (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:100511:158) at transformMessage (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:100612:41) at http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:100638:32 at Array.map () at getComments (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:100595:45) at http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:68997:15 at updateMemo (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:369829:19) at Object.useMemo (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:370375:16) The above error occurred in AssistantComponent: at AssistantComponent (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:68776:3) at div at http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:160008:73 at div at http://loc ``` - The following video illustrates the error: --- .../data_anonymization/helpers/index.test.ts | 24 +++++++++++++++++++ .../impl/data_anonymization/helpers/index.ts | 12 ++++++---- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.test.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.test.ts index 02294bdd870f5..7048ab442cafa 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.test.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.test.ts @@ -123,6 +123,30 @@ describe('helpers', () => { expect(result).toEqual(messageContent); }); + it('returns the original messageContent if replacements is null', () => { + const messageContent = + 'User {{ user.name 3541b730-1dce-4937-b63f-0d618ea1cc5f }} added a member to the Administrators group on host {{ host.name b222e892-431e-4e4f-9295-2ba92ef9d12d }}'; + + const result = replaceAnonymizedValuesWithOriginalValues({ + messageContent, + replacements: null, // <-- null + }); + + expect(result).toEqual(messageContent); + }); + + it('returns the original messageContent if replacements is undefined', () => { + const messageContent = + 'User {{ user.name 3541b730-1dce-4937-b63f-0d618ea1cc5f }} added a member to the Administrators group on host {{ host.name b222e892-431e-4e4f-9295-2ba92ef9d12d }}'; + + const result = replaceAnonymizedValuesWithOriginalValues({ + messageContent, + replacements: undefined, // <-- undefined + }); + + expect(result).toEqual(messageContent); + }); + it('replaces multiple occurrences of the same replacement key', () => { const messageContent = 'User {{ user.name 3541b730-1dce-4937-b63f-0d618ea1cc5f }} added a member to the Administrators group on host {{ host.name b222e892-431e-4e4f-9295-2ba92ef9d12d }}, which is unusual because {{ user.name 3541b730-1dce-4937-b63f-0d618ea1cc5f }} is not a member of the Administrators group.'; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.ts index 62f190f3d37e4..6b17b2891635a 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.ts @@ -40,13 +40,15 @@ export const replaceAnonymizedValuesWithOriginalValues = ({ replacements, }: { messageContent: string; - replacements: Replacements; + replacements: Replacements | null | undefined; }): string => - Object.keys(replacements).reduce((acc, key) => { - const value = replacements[key]; + replacements != null + ? Object.keys(replacements).reduce((acc, key) => { + const value = replacements[key]; - return acc.replaceAll(key, value); - }, messageContent); + return acc.replaceAll(key, value); + }, messageContent) + : messageContent; export const replaceOriginalValuesWithUuidValues = ({ messageContent, From 50e730a43c0330d4fbebc77987221b64706ecde0 Mon Sep 17 00:00:00 2001 From: Davis McPhee Date: Mon, 30 Sep 2024 22:00:47 -0300 Subject: [PATCH 58/60] Fix flaky test #193400 (#194346) ## Summary This PR unskips the flaky test from #193400. It wasn't clear exactly why this was flaky and I couldn't reproduce it, but I made some minor changes to the default profile app state code that could address some potential race conditions. However, both my original 100x flaky test run without the changes and my 100x flaky test run after the changes succeeded, so it's hard to tell if the tests are still flaky or if the changes actually had any impact. Flaky test runs: - https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/7027 - https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/7028 Resolves #193400. Resolves #193367. ### Checklist - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Elastic Machine --- .../discover_data_state_container.ts | 36 +++++++++++-------- .../utils/change_data_view.ts | 2 +- .../_get_additional_cell_actions.ts | 3 +- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/plugins/discover/public/application/main/state_management/discover_data_state_container.ts b/src/plugins/discover/public/application/main/state_management/discover_data_state_container.ts index 344dd92eaa04d..ce7f820aa3cdd 100644 --- a/src/plugins/discover/public/application/main/state_management/discover_data_state_container.ts +++ b/src/plugins/discover/public/application/main/state_management/discover_data_state_container.ts @@ -275,25 +275,33 @@ export function getDataStateContainer({ const { resetDefaultProfileState, dataView } = internalStateContainer.getState(); const { esqlQueryColumns } = dataSubjects.documents$.getValue(); const defaultColumns = uiSettings.get(DEFAULT_COLUMNS_SETTING, []); - - if (dataView) { - const stateUpdate = getDefaultProfileState({ - profilesManager, - resetDefaultProfileState, - defaultColumns, - dataView, - esqlQueryColumns, + const clearResetProfileState = () => { + internalStateContainer.transitions.setResetDefaultProfileState({ + columns: false, + rowHeight: false, }); + }; - if (stateUpdate) { - await appStateContainer.replaceUrlState(stateUpdate); - } + if (!dataView) { + clearResetProfileState(); + return; } - internalStateContainer.transitions.setResetDefaultProfileState({ - columns: false, - rowHeight: false, + const stateUpdate = getDefaultProfileState({ + profilesManager, + resetDefaultProfileState, + defaultColumns, + dataView, + esqlQueryColumns, }); + + if (!stateUpdate) { + clearResetProfileState(); + return; + } + + await appStateContainer.replaceUrlState(stateUpdate); + clearResetProfileState(); } ); diff --git a/src/plugins/discover/public/application/main/state_management/utils/change_data_view.ts b/src/plugins/discover/public/application/main/state_management/utils/change_data_view.ts index 55738d75f785e..54885c5de9bfd 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/change_data_view.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/change_data_view.ts @@ -43,6 +43,7 @@ export async function changeDataView( let nextDataView: DataView | null = null; internalState.transitions.setIsDataViewLoading(true); + internalState.transitions.setResetDefaultProfileState({ columns: true, rowHeight: true }); try { nextDataView = typeof id === 'string' ? await dataViews.get(id, false) : id; @@ -70,5 +71,4 @@ export async function changeDataView( } internalState.transitions.setIsDataViewLoading(false); - internalState.transitions.setResetDefaultProfileState({ columns: true, rowHeight: true }); } diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_additional_cell_actions.ts b/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_additional_cell_actions.ts index 6e84d54661901..738785357fb5e 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_additional_cell_actions.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_additional_cell_actions.ts @@ -21,8 +21,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dataGrid = getService('dataGrid'); const browser = getService('browser'); - // Failing: See https://github.com/elastic/kibana/issues/193400 - describe.skip('extension getAdditionalCellActions', () => { + describe('extension getAdditionalCellActions', () => { before(async () => { await PageObjects.svlCommonPage.loginAsAdmin(); }); From d8dac724eb4a452921a27ec5336fbc6725738935 Mon Sep 17 00:00:00 2001 From: "elastic-renovate-prod[bot]" <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 20:04:41 -0500 Subject: [PATCH 59/60] Update ftr (main) (#193422) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | Pending | |---|---|---|---|---| | [chromedriver](https://togithub.com/giggio/node-chromedriver) | devDependencies | patch | [`^128.0.1` -> `^128.0.3`](https://renovatebot.com/diffs/npm/chromedriver/128.0.1/128.0.3) | `129.0.0` | | [selenium-webdriver](https://togithub.com/SeleniumHQ/selenium/tree/trunk/javascript/node/selenium-webdriver#readme) ([source](https://togithub.com/SeleniumHQ/selenium)) | devDependencies | patch | [`^4.24.0` -> `^4.24.1`](https://renovatebot.com/diffs/npm/selenium-webdriver/4.24.0/4.24.1) | `4.25.0` | --- ### Release Notes
giggio/node-chromedriver (chromedriver) ### [`v128.0.3`](https://togithub.com/giggio/node-chromedriver/compare/128.0.2...128.0.3) [Compare Source](https://togithub.com/giggio/node-chromedriver/compare/128.0.2...128.0.3) ### [`v128.0.2`](https://togithub.com/giggio/node-chromedriver/compare/128.0.1...128.0.2) [Compare Source](https://togithub.com/giggio/node-chromedriver/compare/128.0.1...128.0.2)
SeleniumHQ/selenium (selenium-webdriver) ### [`v4.24.1`](https://togithub.com/SeleniumHQ/selenium/compare/748ffc9bc3cf40211b27d1b27e238b26aae93f46...603f4a4a5944e9de8e5f8ee77ddbefc8560da6b7) [Compare Source](https://togithub.com/SeleniumHQ/selenium/compare/748ffc9bc3cf40211b27d1b27e238b26aae93f46...603f4a4a5944e9de8e5f8ee77ddbefc8560da6b7)
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://togithub.com/renovatebot/renovate). Co-authored-by: elastic-renovate-prod[bot] <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> Co-authored-by: Jon --- package.json | 4 ++-- yarn.lock | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 110b8ec23a6bf..aadda3070ecc6 100644 --- a/package.json +++ b/package.json @@ -1672,7 +1672,7 @@ "buildkite-test-collector": "^1.7.0", "callsites": "^3.1.0", "chance": "1.0.18", - "chromedriver": "^128.0.1", + "chromedriver": "^128.0.3", "clean-webpack-plugin": "^3.0.0", "cli-progress": "^3.12.0", "cli-table3": "^0.6.1", @@ -1797,7 +1797,7 @@ "rxjs-marbles": "^7.0.1", "sass-embedded": "^1.78.0", "sass-loader": "^10.5.1", - "selenium-webdriver": "^4.24.0", + "selenium-webdriver": "^4.24.1", "sharp": "0.32.6", "simple-git": "^3.16.0", "sinon": "^7.4.2", diff --git a/yarn.lock b/yarn.lock index ea20375155074..c545c7a8f64af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14250,10 +14250,10 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -chromedriver@^128.0.1: - version "128.0.1" - resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-128.0.1.tgz#971fb267cc6893a712808cea6c977473ba167145" - integrity sha512-UmWqZXXAyuRa37pE+lnU46vJcCM/y0ddF015LHxycEOYfuqsK7k9ZxJuXCQNWbws9e7FAMQj/GJZT92WPgis0g== +chromedriver@^128.0.3: + version "128.0.3" + resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-128.0.3.tgz#7c2cd2d160f269e78f40840ee7a043dac3687148" + integrity sha512-Xn/bknOpGlY9tKinwS/hVWeNblSeZvbbJbF8XZ73X1jeWfAFPRXx3fMLdNNz8DqruDbx3cKEJ5wR3mnst6G3iw== dependencies: "@testim/chrome-version" "^1.1.4" axios "^1.7.4" @@ -28408,10 +28408,10 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -selenium-webdriver@^4.24.0: - version "4.24.0" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.24.0.tgz#bf7563f9e0b1ef29d55f215a8fb187b21e4de26e" - integrity sha512-qrqoHhHPZuKLiz5VAQUxrn3ILs7/cYqn2/x96r35g5JjkLUjOS1lX+F+tEJKhRMlQ/MGJ+N1016JF5g2xZUFzw== +selenium-webdriver@^4.24.1: + version "4.25.0" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.25.0.tgz#3562b49668817974bb1d13d25a50e8bc0264fcf3" + integrity sha512-zl9IX93caOT8wbcCpZzAkEtYa+hNgJ4C5GUN8uhpzggqRLvsg1asfKi0p1uNZC8buYVvsBZbx8S+9MjVAjs4oA== dependencies: "@bazel/runfiles" "^5.8.1" jszip "^3.10.1" From 8694a6dfc4debc92e308b992ab01758d951cb71b Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 1 Oct 2024 15:03:37 +1000 Subject: [PATCH 60/60] [api-docs] 2024-10-01 Daily api_docs build (#194513) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/847 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_quality.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_usage.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/entities_data_access.mdx | 2 +- api_docs/entity_manager.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/inference.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/inventory.devdocs.json | 2 +- api_docs/inventory.mdx | 2 +- api_docs/investigate.mdx | 2 +- api_docs/investigate_app.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_comparators.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_types.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cbor.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_cloud_security_posture.mdx | 2 +- ...cloud_security_posture_common.devdocs.json | 110 ++- .../kbn_cloud_security_posture_common.mdx | 7 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...ent_management_content_insights_public.mdx | 2 +- ...ent_management_content_insights_server.mdx | 2 +- ...bn_content_management_favorites_public.mdx | 2 +- ...bn_content_management_favorites_server.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- .../kbn_content_management_user_profiles.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- .../kbn_core_analytics_browser.devdocs.json | 36 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- .../kbn_core_analytics_server.devdocs.json | 36 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_browser.mdx | 2 +- ...bn_core_feature_flags_browser_internal.mdx | 2 +- .../kbn_core_feature_flags_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_server.mdx | 2 +- ...kbn_core_feature_flags_server_internal.mdx | 2 +- .../kbn_core_feature_flags_server_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- ...e_http_router_server_internal.devdocs.json | 60 +- .../kbn_core_http_router_server_internal.mdx | 2 +- ...core_http_router_server_mocks.devdocs.json | 12 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 863 ++++++++++++++++-- api_docs/kbn_core_http_server.mdx | 4 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.devdocs.json | 22 +- 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 +- .../kbn_elastic_assistant_common.devdocs.json | 4 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.mdx | 2 +- api_docs/kbn_esql_editor.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_grid_layout.mdx | 2 +- api_docs/kbn_grouping.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- .../kbn_index_management_shared_types.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_investigation_shared.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_json_schemas.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- api_docs/kbn_language_documentation.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_field_stats_flyout.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_parse_interval.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_ml_validators.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_object_versioning_utils.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_rule_utils.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_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_recently_accessed.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- .../kbn_response_ops_feature_flag_service.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_screenshotting_server.mdx | 2 +- api_docs/kbn_search_api_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_api_key_management.mdx | 2 +- api_docs/kbn_security_authorization_core.mdx | 2 +- api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- .../kbn_security_role_management_model.mdx | 2 +- api_docs/kbn_security_solution_common.mdx | 2 +- ...kbn_security_solution_distribution_bar.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- api_docs/kbn_security_ui_components.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- ...ritysolution_io_ts_list_types.devdocs.json | 8 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- .../kbn_server_route_repository_client.mdx | 2 +- .../kbn_server_route_repository_utils.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_table_persist.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_sse_utils.mdx | 2 +- api_docs/kbn_sse_utils_client.mdx | 2 +- api_docs/kbn_sse_utils_server.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_synthetics_e2e.mdx | 2 +- api_docs/kbn_synthetics_private_location.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.devdocs.json | 356 +++++++- api_docs/kbn_unified_data_table.mdx | 4 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- .../observability_a_i_assistant.devdocs.json | 20 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.devdocs.json | 130 +++ api_docs/observability_shared.mdx | 4 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 12 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_assistant.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_indices.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.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 +- 757 files changed, 2301 insertions(+), 867 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index c2981462a3dde..e19f0a36853c9 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-09-30 +date: 2024-10-01 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 b130cdc81b5e5..a3bf748aad326 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-09-30 +date: 2024-10-01 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 c41d32eaa284e..2a3a249cc5930 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-09-30 +date: 2024-10-01 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 717f17b25b20e..3d1156cee457f 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-09-30 +date: 2024-10-01 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 9fed55dc03c91..0eb8a1e05b356 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index a797cbec70b55..a714c1d587005 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 36617a8f09fd4..dc7275dadaf75 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index e9dfb8e37e110..ca34d4982b920 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-09-30 +date: 2024-10-01 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 657450f2041d3..7cc518b0c1507 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-09-30 +date: 2024-10-01 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 5a7bc30cbd009..cae84e39aaca4 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-09-30 +date: 2024-10-01 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 08e6d5f26b9e4..58978bdb98fe5 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-09-30 +date: 2024-10-01 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 0666b497b9358..18da84da335ec 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-09-30 +date: 2024-10-01 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 9a74d456f3d26..40f6d88be4953 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-09-30 +date: 2024-10-01 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 c5f10e95b9087..9cdf8e8844355 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-09-30 +date: 2024-10-01 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 c7b4fd16b8647..7947d1f8c3c85 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index ef011394dc959..8632afdd38b82 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-09-30 +date: 2024-10-01 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 536404ffec768..7b4be885990c1 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-09-30 +date: 2024-10-01 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 d041b4004c47e..fcdd5213ba6c5 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-09-30 +date: 2024-10-01 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 2579dc78f3b94..d21ed59f7a3fd 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-09-30 +date: 2024-10-01 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 a47d50d6a7d81..99c0dc5938a58 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-09-30 +date: 2024-10-01 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 ad380cb8469f5..aa0d6ec753213 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-09-30 +date: 2024-10-01 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 f0373a65fbe71..fe9f903aef46f 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-09-30 +date: 2024-10-01 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 3ded579e126c6..2980b3a038866 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 983bb8427b472..9fa64990a3465 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index f5bd254f00b99..6706a52b70c65 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-09-30 +date: 2024-10-01 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 b81fd0a1279f1..67a982e2a441b 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index d9355de82919b..41a9229c29bc0 100644 --- a/api_docs/data_usage.mdx +++ b/api_docs/data_usage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataUsage title: "dataUsage" image: https://source.unsplash.com/400x175/?github description: API docs for the dataUsage plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataUsage'] --- import dataUsageObj from './data_usage.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index a7aad8fe59633..d0aac23bae84b 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-09-30 +date: 2024-10-01 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 383e9189a6317..2372c9dadcdb8 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-09-30 +date: 2024-10-01 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 a88573e22e4e6..a98647849e10a 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-09-30 +date: 2024-10-01 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 36b68475982f0..7d3df3aade9f3 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-09-30 +date: 2024-10-01 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 dd7974a423c76..343fa28ad1ca2 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-09-30 +date: 2024-10-01 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 72011bfdf7ba1..822196c269de0 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-09-30 +date: 2024-10-01 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 c76ccc0239ef7..23adfc5efa65a 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index a1d3ff1be5e70..d84bc1c468ee6 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 0563484b82101..728f448d53255 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 514ea5ade3b96..4b5f4950bf116 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-09-30 +date: 2024-10-01 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 c2efac47dbcd1..fce799f4d4840 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-09-30 +date: 2024-10-01 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 2f2fbad030272..b1896fb867ee2 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-09-30 +date: 2024-10-01 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 a4aeef7e436e9..0705a6b0d4292 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-09-30 +date: 2024-10-01 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 182a643444a26..5d7e9a371568b 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-09-30 +date: 2024-10-01 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 95e55d08f284a..acb89fa9d4ec4 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-09-30 +date: 2024-10-01 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 68952669476d2..2b41648402d00 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-09-30 +date: 2024-10-01 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 901e874703dba..a2e86dbeac429 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-09-30 +date: 2024-10-01 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 5b4997612bcdf..1a0561c270a30 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-09-30 +date: 2024-10-01 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 5917bd1db3990..98c25fc5ecc02 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index a08ca763529db..69c8b325b5069 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index 5861988f99f7f..c3e58e1d578a2 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index fa88431336826..cf60a4ca6125c 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index c7e57cf778be5..2ebdb6c75d9fc 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index 29b953cf61034..5fdf075745f31 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 4250a9188d2d0..d414fbf1e5d7c 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-09-30 +date: 2024-10-01 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 687832c84621f..e444777ab2ecc 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-09-30 +date: 2024-10-01 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 0543b1d8cf8d4..2babf07041cb2 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-09-30 +date: 2024-10-01 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 94f190e135ce1..6a4e253a221de 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-09-30 +date: 2024-10-01 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 f2c34114a6c7c..650b8d836b6da 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-09-30 +date: 2024-10-01 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 74dcee645d27c..e557b3a20d9ea 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-09-30 +date: 2024-10-01 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 bcd850cae3eef..e9e1f55a55433 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-09-30 +date: 2024-10-01 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 b4372e691098a..19781fee1f7da 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-09-30 +date: 2024-10-01 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 cd2eba717787c..b63a00ee55163 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-09-30 +date: 2024-10-01 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 f0b415f6af71d..b84f0f1abe9f7 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-09-30 +date: 2024-10-01 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 a34f1f7c87ad3..d121c981880de 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-09-30 +date: 2024-10-01 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 17b40bebb5830..e8ffd7397c7b4 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-09-30 +date: 2024-10-01 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 18b6a08712f46..cdd49f61fdb6c 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-09-30 +date: 2024-10-01 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 b31cb9bfe9950..9cf7f7489be16 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-09-30 +date: 2024-10-01 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 9970090f29aeb..c2162999c75ba 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-09-30 +date: 2024-10-01 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 8788451548ee6..ff770a0250e5b 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-09-30 +date: 2024-10-01 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 6c37dbc27e7c0..98f03775f85d9 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-09-30 +date: 2024-10-01 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 0115712c02a8c..d06dac03f942c 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-09-30 +date: 2024-10-01 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 368587f7c5ab0..695a32fa634ee 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-09-30 +date: 2024-10-01 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 2252e7b08d583..64aa5d7b225f5 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index 7ad1383260000..f4daba871e1aa 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 19e7af855c29e..7645fecaa540a 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-09-30 +date: 2024-10-01 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 7092b499fe4c3..a70e8903322bd 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-09-30 +date: 2024-10-01 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 457b6d2aac888..e7f4a617ecd9d 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-09-30 +date: 2024-10-01 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 ac5ed60f393b2..7932f117b7a94 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-09-30 +date: 2024-10-01 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 033d25e962b6b..b54168b054e6c 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-09-30 +date: 2024-10-01 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 35c958cc9fa1a..b384290f6e7e9 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-09-30 +date: 2024-10-01 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 41b5c86af75d7..38c29f4f96872 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-09-30 +date: 2024-10-01 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 bf3d3184ab512..02f71dca31f35 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-09-30 +date: 2024-10-01 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 7e7df520bda19..325a208ae2f2a 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-09-30 +date: 2024-10-01 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 ce2c034260867..c2bea389415fc 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index 2f326e9dc2fd5..277ce86a234ae 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index d61dd65a0c0b4..1272abf42c87b 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-09-30 +date: 2024-10-01 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 ac604771619d4..7432394ddbe80 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-09-30 +date: 2024-10-01 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 b56426e9d806a..52b5b9460dc45 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index f382c8458e870..97330aafdea68 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 4a34d4c0912d2..b9d0f39e39114 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/inventory.devdocs.json b/api_docs/inventory.devdocs.json index d5617956891ae..ed0ec2c4c740c 100644 --- a/api_docs/inventory.devdocs.json +++ b/api_docs/inventory.devdocs.json @@ -105,7 +105,7 @@ "; }>]>; }>, ", "InventoryRouteHandlerResources", ", { entities: ", - "LatestEntity", + "Entity", "[]; }, ", "InventoryRouteCreateOptions", ">; }" diff --git a/api_docs/inventory.mdx b/api_docs/inventory.mdx index 833bcccfefeb4..e37d1388eda5b 100644 --- a/api_docs/inventory.mdx +++ b/api_docs/inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inventory title: "inventory" image: https://source.unsplash.com/400x175/?github description: API docs for the inventory plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inventory'] --- import inventoryObj from './inventory.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index c622580f9fbcb..aee15ec404242 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 0093151d6bda8..6011475cea216 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 07bff3d1991dd..3ecb118bde677 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-09-30 +date: 2024-10-01 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 108f79524a676..a936d14880a10 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-09-30 +date: 2024-10-01 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 ff10fb9b3a052..2338b5fac0648 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-09-30 +date: 2024-10-01 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 6956773d77523..f98f40e40796d 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-09-30 +date: 2024-10-01 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 a8e27f6bebfa4..bc4fd57cb0bf7 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-09-30 +date: 2024-10-01 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 84a62ad868b6a..15378ab23c20f 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index 6ea2afc207679..723ba3eca2c7a 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 196e9e948a442..95471606618f7 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-09-30 +date: 2024-10-01 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 b2c4eb2566556..53080181fd9dc 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-09-30 +date: 2024-10-01 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 17ed17fab58f7..10ceb25fb8207 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 18f4a0eacb3ad..dd194433b2108 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index a820a8de94edc..b50e6437178fe 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-09-30 +date: 2024-10-01 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 6b3f493f65ad3..4150cfef9aba6 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index fc9bd8bf28e94..2c0a69a10f484 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 222e18cc8bc05..4c157b1dd7413 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-09-30 +date: 2024-10-01 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 3e8b3c0957c0e..2e677862515bd 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index cb3de865f6a6b..8b2d1ff57c159 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 4ce527660c1c7..04b97cf570759 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index 028cdb22bafca..ce8210415752e 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 5112c31a7a637..1a80039f68965 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index 17f96bdb5d508..c9494fed2085b 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 3bef37990f05c..4fc4ebf1fd5f0 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-09-30 +date: 2024-10-01 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 8d3451765df6c..09a1db03a46a8 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-09-30 +date: 2024-10-01 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 32cf49133021a..1a61772a0bee9 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-09-30 +date: 2024-10-01 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 53433d9b76a78..f29584f4f83b8 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-09-30 +date: 2024-10-01 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 d0ad814c3b5d0..431a3ffb08646 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index 4bebc535d4385..9dc60e5f52381 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 5b554a959ad8d..ad413ec0d25bb 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-09-30 +date: 2024-10-01 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 3f1884d144516..91bd6528e4238 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-09-30 +date: 2024-10-01 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 4cb8df35823dc..80363b09a0210 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-09-30 +date: 2024-10-01 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 ff7fd468a9467..2b10e9ddd20e9 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-09-30 +date: 2024-10-01 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 55dbaf66fb30f..eebc2de7e279a 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-09-30 +date: 2024-10-01 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 a2fa31ae5b050..fbd305dd8d605 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-09-30 +date: 2024-10-01 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 feb19650b34ee..ddce54fe2b62c 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index 3d6645ec5ba52..409b49c99c1a3 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.devdocs.json b/api_docs/kbn_cloud_security_posture_common.devdocs.json index bd91ea23fdcc0..4a9fcaef28d0a 100644 --- a/api_docs/kbn_cloud_security_posture_common.devdocs.json +++ b/api_docs/kbn_cloud_security_posture_common.devdocs.json @@ -17,7 +17,115 @@ "objects": [] }, "common": { - "classes": [], + "classes": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.UiMetricService", + "type": "Class", + "tags": [], + "label": "UiMetricService", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture-common/utils/ui_metrics.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.UiMetricService.setup", + "type": "Function", + "tags": [], + "label": "setup", + "description": [], + "signature": [ + "(usageCollection: ", + { + "pluginId": "usageCollection", + "scope": "public", + "docId": "kibUsageCollectionPluginApi", + "section": "def-public.UsageCollectionSetup", + "text": "UsageCollectionSetup" + }, + ") => void" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/utils/ui_metrics.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.UiMetricService.setup.$1", + "type": "Object", + "tags": [], + "label": "usageCollection", + "description": [], + "signature": [ + { + "pluginId": "usageCollection", + "scope": "public", + "docId": "kibUsageCollectionPluginApi", + "section": "def-public.UsageCollectionSetup", + "text": "UsageCollectionSetup" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/utils/ui_metrics.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.UiMetricService.trackUiMetric", + "type": "Function", + "tags": [], + "label": "trackUiMetric", + "description": [], + "signature": [ + "(metricType: string, eventName: CloudSecurityUiCounters) => void" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/utils/ui_metrics.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.UiMetricService.trackUiMetric.$1", + "type": "string", + "tags": [], + "label": "metricType", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/utils/ui_metrics.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.UiMetricService.trackUiMetric.$2", + "type": "CompoundType", + "tags": [], + "label": "eventName", + "description": [], + "signature": [ + "CloudSecurityUiCounters" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/utils/ui_metrics.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], "functions": [ { "parentPluginId": "@kbn/cloud-security-posture-common", diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index 8f8e38bd82b1a..b4f97284d288e 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; @@ -21,13 +21,16 @@ Contact [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 68 | 0 | 66 | 0 | +| 74 | 0 | 72 | 0 | ## Common ### Functions +### Classes + + ### Interfaces diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 87c6a138cdf09..bfdd0e5508583 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-09-30 +date: 2024-10-01 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 4fbf4832258e8..d6a399933674e 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-09-30 +date: 2024-10-01 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 2e97a5443befe..07b1a75112054 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-09-30 +date: 2024-10-01 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 d6a868584e0e9..76f6745f3013c 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-09-30 +date: 2024-10-01 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 23f8eb144c0c0..497399e928ff2 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-09-30 +date: 2024-10-01 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 0eda7eb993687..f6e98bfbe9d32 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index 6f9e1dc5f0c7c..be8322ba44e5d 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-09-30 +date: 2024-10-01 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 84f4b0ce06a3b..ffe6711a7318c 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index 6c4e991362c3f..91f837f7d7e83 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index 98006b06f24ae..3bb4ee45d8c8d 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 52ccdecaeb5e0..3858e6ad13e9f 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index 6469d8983f348..2cf068eea34ae 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index cfaf4c50d43d9..848c7491b96af 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-09-30 +date: 2024-10-01 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 e712d9a890ca7..55a8064e83f6d 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-09-30 +date: 2024-10-01 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 b4d7d80e79483..0a8cdc33231d7 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-09-30 +date: 2024-10-01 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 ea525aaa88837..2ae812052de35 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index 3c32fbd12e72a..e3a129efc04fb 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 57fab41924d1d..66e965f5200aa 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-09-30 +date: 2024-10-01 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.devdocs.json b/api_docs/kbn_core_analytics_browser.devdocs.json index 5cd4d439bc588..52c10b61a526b 100644 --- a/api_docs/kbn_core_analytics_browser.devdocs.json +++ b/api_docs/kbn_core_analytics_browser.devdocs.json @@ -650,6 +650,14 @@ "plugin": "dashboard", "path": "src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx" }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.ts" + }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.ts" + }, { "plugin": "integrationAssistant", "path": "x-pack/plugins/integration_assistant/public/services/telemetry/service.ts" @@ -1146,6 +1154,30 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/telemetry/send_alert_suppression_telemetry_event.test.ts" }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" + }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" + }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" + }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" + }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" + }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" + }, { "plugin": "@kbn/core-analytics-browser-mocks", "path": "packages/core/analytics/core-analytics-browser-mocks/src/analytics_service.mock.ts" @@ -1782,7 +1814,7 @@ }, { "plugin": "discover", - "path": "src/plugins/discover/public/services/discover_ebt_context_manager.ts" + "path": "src/plugins/discover/public/services/discover_ebt_manager.ts" }, { "plugin": "telemetry", @@ -1854,7 +1886,7 @@ }, { "plugin": "discover", - "path": "src/plugins/discover/public/services/discover_ebt_context_manager.test.ts" + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" }, { "plugin": "@kbn/core-application-browser-internal", diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 9c96fed17a824..dd8459b9c5025 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-09-30 +date: 2024-10-01 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 ca656e0b61ea5..9f5ff975e667b 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-09-30 +date: 2024-10-01 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 d45952f72cc7d..ffef9bd5229db 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-09-30 +date: 2024-10-01 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.devdocs.json b/api_docs/kbn_core_analytics_server.devdocs.json index 9444036ee944d..33ca18815bca9 100644 --- a/api_docs/kbn_core_analytics_server.devdocs.json +++ b/api_docs/kbn_core_analytics_server.devdocs.json @@ -658,6 +658,14 @@ "plugin": "dashboard", "path": "src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx" }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.ts" + }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.ts" + }, { "plugin": "integrationAssistant", "path": "x-pack/plugins/integration_assistant/public/services/telemetry/service.ts" @@ -1154,6 +1162,30 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/telemetry/send_alert_suppression_telemetry_event.test.ts" }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" + }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" + }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" + }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" + }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" + }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" + }, { "plugin": "@kbn/core-analytics-browser-mocks", "path": "packages/core/analytics/core-analytics-browser-mocks/src/analytics_service.mock.ts" @@ -1790,7 +1822,7 @@ }, { "plugin": "discover", - "path": "src/plugins/discover/public/services/discover_ebt_context_manager.ts" + "path": "src/plugins/discover/public/services/discover_ebt_manager.ts" }, { "plugin": "telemetry", @@ -1862,7 +1894,7 @@ }, { "plugin": "discover", - "path": "src/plugins/discover/public/services/discover_ebt_context_manager.test.ts" + "path": "src/plugins/discover/public/services/discover_ebt_manager.test.ts" }, { "plugin": "@kbn/core-application-browser-internal", diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index 850c53e234998..cdbc7d1b815ad 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-09-30 +date: 2024-10-01 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 26b5d334c332b..ba1894cf9236b 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-09-30 +date: 2024-10-01 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 43f9244f4d4ad..16a50f7b7626c 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-09-30 +date: 2024-10-01 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 c9ae4ef8d4edd..193cbc80e7b48 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-09-30 +date: 2024-10-01 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 7c7700da55ecf..320935b72f49f 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-09-30 +date: 2024-10-01 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 f1f893e0d71b3..bd0d19ddbee70 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-09-30 +date: 2024-10-01 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 c7d4ca64056eb..0ce2ecc6ac6aa 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-09-30 +date: 2024-10-01 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 7151d0c7064f8..2d1ae36f74550 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-09-30 +date: 2024-10-01 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 887ad618548af..210c03bbbfebc 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-09-30 +date: 2024-10-01 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 e0d64a299f67c..86145623392f4 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-09-30 +date: 2024-10-01 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 22ade16cda1c5..9a94242cc4f37 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-09-30 +date: 2024-10-01 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 1cb7416ed99d7..d01d2bfadd2d6 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-09-30 +date: 2024-10-01 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 d8784ac43a38c..7a1ed385cc97a 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-09-30 +date: 2024-10-01 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 e6f9e56968520..495dff641a577 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-09-30 +date: 2024-10-01 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 479dd5f3916c4..5b74e0b644293 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-09-30 +date: 2024-10-01 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 c539b39499aae..0bc55cbba5e03 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-09-30 +date: 2024-10-01 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 70eefbb15b421..3d788d2663631 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-09-30 +date: 2024-10-01 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 99d7f64ec7892..9ba9276c2e0f3 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-09-30 +date: 2024-10-01 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 4265005261b83..26a776d8de6aa 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-09-30 +date: 2024-10-01 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 4076609dadde7..5cdc7fccc068f 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-09-30 +date: 2024-10-01 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 6e8514c3b2a8f..afffb741973a2 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-09-30 +date: 2024-10-01 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 2641966a6256d..36d03e5cf51a2 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-09-30 +date: 2024-10-01 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 4e5e8a66bba3e..32d309c90918f 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-09-30 +date: 2024-10-01 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 04b554c3ed8b2..8bf417d52c2bb 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-09-30 +date: 2024-10-01 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 417aa62ace742..702a340808af6 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-09-30 +date: 2024-10-01 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 8901b2e131883..02b180a6f8bb5 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-09-30 +date: 2024-10-01 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 deee85cc12123..32d723fc7af10 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-09-30 +date: 2024-10-01 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 c7cc1873ea0b6..b9604db0cb01f 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-09-30 +date: 2024-10-01 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 b50fd885690e0..c360e0506fc8d 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-09-30 +date: 2024-10-01 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 8f729d0ea0416..1f699cdb70256 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-09-30 +date: 2024-10-01 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 ec54c0d1cf4d4..fbf534bdf9610 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-09-30 +date: 2024-10-01 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 fa621d98db61e..bba47c306b3f5 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-09-30 +date: 2024-10-01 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 acfbfd4a95e8e..1b014f453d4ce 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-09-30 +date: 2024-10-01 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 459d0c52df339..292d0199b37d1 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-09-30 +date: 2024-10-01 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 f76cc8e5e52f5..eeb8777a6f5f2 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-09-30 +date: 2024-10-01 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 bc1e7490b5d42..a4a403512ce73 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-09-30 +date: 2024-10-01 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 d8628c3b056ab..978884605cd72 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-09-30 +date: 2024-10-01 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 544529663e8b2..52ea8c4e16f1a 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-09-30 +date: 2024-10-01 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 b60fb3fdf1999..bce7b75a82848 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-09-30 +date: 2024-10-01 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 a910976cbbd58..079de0432786a 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-09-30 +date: 2024-10-01 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 f963da2a15045..180c091912cb5 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-09-30 +date: 2024-10-01 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 7441bb0c054e8..b54ea151107de 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-09-30 +date: 2024-10-01 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 5ae8f40a318dd..c9b316083ceb5 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-09-30 +date: 2024-10-01 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 22d2b2644c7c4..71759693bb652 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-09-30 +date: 2024-10-01 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 0687746b37051..4fb3049d4250c 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-09-30 +date: 2024-10-01 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 d5b88c3cd5104..05b2858995dce 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-09-30 +date: 2024-10-01 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 46c3ad39662cf..ea5a293075a69 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-09-30 +date: 2024-10-01 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 b8c4f1cf8714f..8630149294337 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-09-30 +date: 2024-10-01 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 7bd69f4a905c6..ee53ff873e760 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-09-30 +date: 2024-10-01 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 399b5e6edf012..2a9d1243df193 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-09-30 +date: 2024-10-01 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 ab9cfd2210486..ff1c19d8c75d3 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-09-30 +date: 2024-10-01 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 038b53e8c3e61..af3d0fb89a9be 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-09-30 +date: 2024-10-01 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 51c53d89a1b80..7d30c1c11b2a2 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-09-30 +date: 2024-10-01 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 5fc0f395e0323..f3b8fff70126d 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-09-30 +date: 2024-10-01 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 b8cc529db80aa..29877e2c83b4d 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser.mdx b/api_docs/kbn_core_feature_flags_browser.mdx index 51b51dc726db9..46562e4eb5d34 100644 --- a/api_docs/kbn_core_feature_flags_browser.mdx +++ b/api_docs/kbn_core_feature_flags_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser title: "@kbn/core-feature-flags-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser'] --- import kbnCoreFeatureFlagsBrowserObj from './kbn_core_feature_flags_browser.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_internal.mdx b/api_docs/kbn_core_feature_flags_browser_internal.mdx index 2f4938c766633..e58c2f915baac 100644 --- a/api_docs/kbn_core_feature_flags_browser_internal.mdx +++ b/api_docs/kbn_core_feature_flags_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-internal title: "@kbn/core-feature-flags-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-internal plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-internal'] --- import kbnCoreFeatureFlagsBrowserInternalObj from './kbn_core_feature_flags_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_mocks.mdx b/api_docs/kbn_core_feature_flags_browser_mocks.mdx index 2bf157c950928..0056a6bc4c575 100644 --- a/api_docs/kbn_core_feature_flags_browser_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-mocks title: "@kbn/core-feature-flags-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-mocks plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-mocks'] --- import kbnCoreFeatureFlagsBrowserMocksObj from './kbn_core_feature_flags_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server.mdx b/api_docs/kbn_core_feature_flags_server.mdx index dce024169a0c3..27b4daad7ceff 100644 --- a/api_docs/kbn_core_feature_flags_server.mdx +++ b/api_docs/kbn_core_feature_flags_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server title: "@kbn/core-feature-flags-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server'] --- import kbnCoreFeatureFlagsServerObj from './kbn_core_feature_flags_server.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_internal.mdx b/api_docs/kbn_core_feature_flags_server_internal.mdx index 866871c7cdd1b..0056153b1b89f 100644 --- a/api_docs/kbn_core_feature_flags_server_internal.mdx +++ b/api_docs/kbn_core_feature_flags_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-internal title: "@kbn/core-feature-flags-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-internal plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-internal'] --- import kbnCoreFeatureFlagsServerInternalObj from './kbn_core_feature_flags_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_mocks.mdx b/api_docs/kbn_core_feature_flags_server_mocks.mdx index 79b0e6384d9f4..7a99351a04975 100644 --- a/api_docs/kbn_core_feature_flags_server_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-mocks title: "@kbn/core-feature-flags-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-mocks plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-mocks'] --- import kbnCoreFeatureFlagsServerMocksObj from './kbn_core_feature_flags_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 230090ce59182..27224a167f0bd 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-09-30 +date: 2024-10-01 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 8d0a6de9c71a4..d89087b83dc8b 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-09-30 +date: 2024-10-01 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 bb0bbd9d71a0f..f6b41bbb0ccce 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-09-30 +date: 2024-10-01 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 9db29b0d955cc..c66f9aaf45038 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-09-30 +date: 2024-10-01 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 01f456d5d96ea..0e5e0df6c244e 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-09-30 +date: 2024-10-01 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 f981971a9dba2..470330cdbc120 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-09-30 +date: 2024-10-01 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 ea8cf5a283905..b416bf84af438 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-09-30 +date: 2024-10-01 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 109263a7bf6f4..724520397eb55 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-09-30 +date: 2024-10-01 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 71332556de1fd..c032e1de4715d 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-09-30 +date: 2024-10-01 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.devdocs.json b/api_docs/kbn_core_http_router_server_internal.devdocs.json index 211118bbfe356..ede556280b205 100644 --- a/api_docs/kbn_core_http_router_server_internal.devdocs.json +++ b/api_docs/kbn_core_http_router_server_internal.devdocs.json @@ -179,7 +179,7 @@ }, "<", "Method", - ">, \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", + ">, \"security\" | \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -187,7 +187,15 @@ "section": "def-server.RouteAccess", "text": "RouteAccess" }, - "; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" + "; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" ], "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.ts", "deprecated": false, @@ -258,7 +266,7 @@ }, "<", "Method", - ">, \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", + ">, \"security\" | \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -266,7 +274,15 @@ "section": "def-server.RouteAccess", "text": "RouteAccess" }, - "; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" + "; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" ], "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.ts", "deprecated": false, @@ -337,7 +353,7 @@ }, "<", "Method", - ">, \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", + ">, \"security\" | \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -345,7 +361,15 @@ "section": "def-server.RouteAccess", "text": "RouteAccess" }, - "; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" + "; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" ], "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.ts", "deprecated": false, @@ -416,7 +440,7 @@ }, "<", "Method", - ">, \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", + ">, \"security\" | \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -424,7 +448,15 @@ "section": "def-server.RouteAccess", "text": "RouteAccess" }, - "; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" + "; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" ], "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.ts", "deprecated": false, @@ -495,7 +527,7 @@ }, "<", "Method", - ">, \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", + ">, \"security\" | \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -503,7 +535,15 @@ "section": "def-server.RouteAccess", "text": "RouteAccess" }, - "; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" + "; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" ], "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.ts", "deprecated": false, diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index 5414a33b0e791..4550ad2f41790 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-09-30 +date: 2024-10-01 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.devdocs.json b/api_docs/kbn_core_http_router_server_mocks.devdocs.json index a1827393c0cb2..24e21bf81d9dc 100644 --- a/api_docs/kbn_core_http_router_server_mocks.devdocs.json +++ b/api_docs/kbn_core_http_router_server_mocks.devdocs.json @@ -72,7 +72,7 @@ "section": "def-server.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", + ", \"security\" | \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -80,7 +80,15 @@ "section": "def-server.RouteAccess", "text": "RouteAccess" }, - "; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" + "; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" ], "path": "packages/core/http/core-http-router-server-mocks/src/versioned_router.mock.ts", "deprecated": false, diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index 213262e4421fa..5f84e5c180b2f 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-09-30 +date: 2024-10-01 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 770d8f3ba717f..7b7082d5b4639 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -379,6 +379,98 @@ "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.AddVersionOpts.security", + "type": "Object", + "tags": [], + "label": "security", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined" + ], + "path": "packages/core/http/core-http-server/src/versioning/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.AuthcDisabled", + "type": "Interface", + "tags": [], + "label": "AuthcDisabled", + "description": [ + "\nDescribes the state when authentication is disabled.\n\n- `enabled`: A boolean indicating that authentication is not enabled (`false`).\n- `reason`: A string explaining why authentication is disabled." + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.AuthcDisabled.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "false" + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.AuthcDisabled.reason", + "type": "string", + "tags": [], + "label": "reason", + "description": [], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.AuthcEnabled", + "type": "Interface", + "tags": [], + "label": "AuthcEnabled", + "description": [ + "\nDescribes the authentication status when authentication is enabled.\n\n- `enabled`: A boolean or string indicating the authentication status. Can be `true` (authentication required) or `'optional'` (authentication is optional)." + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.AuthcEnabled.enabled", + "type": "CompoundType", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "true | \"optional\"" + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -790,6 +882,85 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.AuthzDisabled", + "type": "Interface", + "tags": [], + "label": "AuthzDisabled", + "description": [ + "\nDescribes the state when authorization is disabled.\n\n- `enabled`: A boolean indicating that authorization is not enabled (`false`).\n- `reason`: A string explaining why authorization is disabled." + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.AuthzDisabled.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "false" + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.AuthzDisabled.reason", + "type": "string", + "tags": [], + "label": "reason", + "description": [], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.AuthzEnabled", + "type": "Interface", + "tags": [], + "label": "AuthzEnabled", + "description": [ + "\nDescribes the authorization requirements when authorization is enabled.\n\n- `requiredPrivileges`: An array of privileges or privilege sets that are required for the route." + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.AuthzEnabled.requiredPrivileges", + "type": "Array", + "tags": [], + "label": "requiredPrivileges", + "description": [], + "signature": [ + "(string | ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.PrivilegeSet", + "text": "PrivilegeSet" + }, + ")[]" + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.CustomHttpResponseOptions", @@ -4922,6 +5093,14 @@ "plugin": "@kbn/core-http-router-server-internal", "path": "packages/core/http/core-http-router-server-internal/src/router.test.ts" }, + { + "plugin": "@kbn/core-http-router-server-internal", + "path": "packages/core/http/core-http-router-server-internal/src/router.test.ts" + }, + { + "plugin": "@kbn/core-http-router-server-internal", + "path": "packages/core/http/core-http-router-server-internal/src/router.test.ts" + }, { "plugin": "@kbn/core-http-server-internal", "path": "packages/core/http/core-http-server-internal/src/http_server.test.ts" @@ -5030,6 +5209,14 @@ "plugin": "@kbn/core-http-router-server-internal", "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts" }, + { + "plugin": "@kbn/core-http-router-server-internal", + "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts" + }, + { + "plugin": "@kbn/core-http-router-server-internal", + "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts" + }, { "plugin": "@kbn/core-http-router-server-mocks", "path": "packages/core/http/core-http-router-server-mocks/src/router.mock.ts" @@ -11182,6 +11369,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.KibanaRequest.authzResult", + "type": "Object", + "tags": [], + "label": "authzResult", + "description": [ + "\nAuthorization check result, passed to the route handler.\nIndicates whether the specific privilege was granted or denied." + ], + "signature": [ + "Record | undefined" + ], + "path": "packages/core/http/core-http-server/src/router/request.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.KibanaRequest.isInternalApiRequest", @@ -11593,6 +11796,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.KibanaRequestState.authzResult", + "type": "Object", + "tags": [], + "label": "authzResult", + "description": [], + "signature": [ + "Record | undefined" + ], + "path": "packages/core/http/core-http-server/src/router/request.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.KibanaRequestState.measureElu", @@ -11658,6 +11875,27 @@ "path": "packages/core/http/core-http-server/src/router/request.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.KibanaRouteOptions.security", + "type": "CompoundType", + "tags": [], + "label": "security", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.InternalRouteSecurity", + "text": "InternalRouteSecurity" + }, + " | undefined" + ], + "path": "packages/core/http/core-http-server/src/router/request.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -12003,10 +12241,10 @@ }, { "parentPluginId": "@kbn/core-http-server", - "id": "def-server.OnPostAuthNextResult", + "id": "def-server.OnPostAuthAuthzResult", "type": "Interface", "tags": [], - "label": "OnPostAuthNextResult", + "label": "OnPostAuthAuthzResult", "description": [], "path": "packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts", "deprecated": false, @@ -12014,7 +12252,7 @@ "children": [ { "parentPluginId": "@kbn/core-http-server", - "id": "def-server.OnPostAuthNextResult.type", + "id": "def-server.OnPostAuthAuthzResult.type", "type": "string", "tags": [], "label": "type", @@ -12026,7 +12264,22 @@ "docId": "kibKbnCoreHttpServerPluginApi", "section": "def-server.OnPostAuthResultType", "text": "OnPostAuthResultType" - } + }, + ".authzResult" + ], + "path": "packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.OnPostAuthAuthzResult.authzResult", + "type": "Object", + "tags": [], + "label": "authzResult", + "description": [], + "signature": [ + "{ [x: string]: boolean; }" ], "path": "packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts", "deprecated": false, @@ -12037,10 +12290,10 @@ }, { "parentPluginId": "@kbn/core-http-server", - "id": "def-server.OnPostAuthToolkit", + "id": "def-server.OnPostAuthNextResult", "type": "Interface", "tags": [], - "label": "OnPostAuthToolkit", + "label": "OnPostAuthNextResult", "description": [], "path": "packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts", "deprecated": false, @@ -12048,60 +12301,134 @@ "children": [ { "parentPluginId": "@kbn/core-http-server", - "id": "def-server.OnPostAuthToolkit.next", - "type": "Function", + "id": "def-server.OnPostAuthNextResult.type", + "type": "string", "tags": [], - "label": "next", - "description": [ - "To pass request to the next handler" - ], + "label": "type", + "description": [], "signature": [ - "() => ", { "pluginId": "@kbn/core-http-server", "scope": "server", "docId": "kibKbnCoreHttpServerPluginApi", - "section": "def-server.OnPostAuthNextResult", - "text": "OnPostAuthNextResult" - } + "section": "def-server.OnPostAuthResultType", + "text": "OnPostAuthResultType" + }, + ".next" ], "path": "packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts", "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] + "trackAdoption": false } ], "initialIsOpen": false }, { "parentPluginId": "@kbn/core-http-server", - "id": "def-server.OnPreAuthNextResult", + "id": "def-server.OnPostAuthToolkit", "type": "Interface", "tags": [], - "label": "OnPreAuthNextResult", + "label": "OnPostAuthToolkit", "description": [], - "path": "packages/core/http/core-http-server/src/lifecycle/on_pre_auth.ts", + "path": "packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/core-http-server", - "id": "def-server.OnPreAuthNextResult.type", - "type": "string", + "id": "def-server.OnPostAuthToolkit.next", + "type": "Function", "tags": [], - "label": "type", - "description": [], + "label": "next", + "description": [ + "To pass request to the next handler" + ], "signature": [ + "() => ", { "pluginId": "@kbn/core-http-server", "scope": "server", "docId": "kibKbnCoreHttpServerPluginApi", - "section": "def-server.OnPreAuthResultType", - "text": "OnPreAuthResultType" + "section": "def-server.OnPostAuthResult", + "text": "OnPostAuthResult" } ], - "path": "packages/core/http/core-http-server/src/lifecycle/on_pre_auth.ts", + "path": "packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.OnPostAuthToolkit.authzResultNext", + "type": "Function", + "tags": [], + "label": "authzResultNext", + "description": [], + "signature": [ + "(authzResult: Record) => ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.OnPostAuthAuthzResult", + "text": "OnPostAuthAuthzResult" + } + ], + "path": "packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.OnPostAuthToolkit.authzResultNext.$1", + "type": "Object", + "tags": [], + "label": "authzResult", + "description": [], + "signature": [ + "Record" + ], + "path": "packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.OnPreAuthNextResult", + "type": "Interface", + "tags": [], + "label": "OnPreAuthNextResult", + "description": [], + "path": "packages/core/http/core-http-server/src/lifecycle/on_pre_auth.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.OnPreAuthNextResult.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.OnPreAuthResultType", + "text": "OnPreAuthResultType" + } + ], + "path": "packages/core/http/core-http-server/src/lifecycle/on_pre_auth.ts", "deprecated": false, "trackAdoption": false } @@ -12676,6 +13003,50 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.PrivilegeSet", + "type": "Interface", + "tags": [], + "label": "PrivilegeSet", + "description": [ + "\nA set of privileges that can be used to define complex authorization requirements.\n\n- `anyRequired`: An array of privileges where at least one must be satisfied to meet the authorization requirement.\n- `allRequired`: An array of privileges where all listed privileges must be satisfied to meet the authorization requirement." + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.PrivilegeSet.anyRequired", + "type": "Array", + "tags": [], + "label": "anyRequired", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.PrivilegeSet.allRequired", + "type": "Array", + "tags": [], + "label": "allRequired", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.RequestHandlerContextBase", @@ -12802,6 +13173,29 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.RouteConfig.security", + "type": "Object", + "tags": [], + "label": "security", + "description": [ + "\nDefines the security requirements for a route, including authorization and authentication." + ], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined" + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.RouteConfig.options", @@ -13025,6 +13419,29 @@ "path": "packages/core/http/core-http-server/src/router/route.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.RouteConfigOptions.security", + "type": "Object", + "tags": [], + "label": "security", + "description": [ + "\nDefines the security requirements for a route, including authorization and authentication.\n" + ], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined" + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -13212,6 +13629,27 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.RouterRoute.security", + "type": "CompoundType", + "tags": [], + "label": "security", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.InternalRouteSecurity", + "text": "InternalRouteSecurity" + }, + " | undefined" + ], + "path": "packages/core/http/core-http-server/src/router/router.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.RouterRoute.validationSchemas", @@ -13302,6 +13740,71 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.RouteSecurity", + "type": "Interface", + "tags": [], + "label": "RouteSecurity", + "description": [ + "\nDescribes the security requirements for a route, including authorization and authentication." + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.RouteSecurity.authz", + "type": "CompoundType", + "tags": [], + "label": "authz", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.AuthzDisabled", + "text": "AuthzDisabled" + }, + " | ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.AuthzEnabled", + "text": "AuthzEnabled" + } + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.RouteSecurity.authc", + "type": "CompoundType", + "tags": [], + "label": "authc", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteAuthc", + "text": "RouteAuthc" + }, + " | undefined" + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.RouteValidationResultFactory", @@ -15266,6 +15769,22 @@ "plugin": "@kbn/core-http-router-server-internal", "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts" }, + { + "plugin": "@kbn/core-http-router-server-internal", + "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts" + }, + { + "plugin": "@kbn/core-http-router-server-internal", + "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts" + }, + { + "plugin": "@kbn/core-http-router-server-internal", + "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts" + }, + { + "plugin": "@kbn/core-http-router-server-internal", + "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts" + }, { "plugin": "@kbn/core-http-router-server-internal", "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.test.ts" @@ -15361,7 +15880,7 @@ "section": "def-server.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", + ", \"security\" | \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -15369,7 +15888,15 @@ "section": "def-server.RouteAccess", "text": "RouteAccess" }, - "; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" + "; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, @@ -15660,7 +16187,7 @@ "section": "def-server.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", + ", \"security\" | \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -15668,7 +16195,15 @@ "section": "def-server.RouteAccess", "text": "RouteAccess" }, - "; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" + "; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, @@ -16763,7 +17298,7 @@ "section": "def-server.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", + ", \"security\" | \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -16771,7 +17306,15 @@ "section": "def-server.RouteAccess", "text": "RouteAccess" }, - "; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" + "; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, @@ -16902,7 +17445,7 @@ "section": "def-server.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", + ", \"security\" | \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -16910,7 +17453,15 @@ "section": "def-server.RouteAccess", "text": "RouteAccess" }, - "; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" + "; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, @@ -17181,7 +17732,7 @@ "section": "def-server.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", + ", \"security\" | \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -17189,7 +17740,15 @@ "section": "def-server.RouteAccess", "text": "RouteAccess" }, - "; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" + "; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, @@ -17357,6 +17916,18 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.OnPostAuthResultType", + "type": "Enum", + "tags": [], + "label": "OnPostAuthResultType", + "description": [], + "path": "packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.OnPreResponseResultType", @@ -17977,6 +18548,35 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.InternalRouteSecurity", + "type": "Type", + "tags": [], + "label": "InternalRouteSecurity", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurityGetter", + "text": "RouteSecurityGetter" + } + ], + "path": "packages/core/http/core-http-server/src/router/request.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.IsAuthenticated", @@ -18321,8 +18921,8 @@ "pluginId": "@kbn/core-http-server", "scope": "server", "docId": "kibKbnCoreHttpServerPluginApi", - "section": "def-server.OnPostAuthNextResult", - "text": "OnPostAuthNextResult" + "section": "def-server.OnPostAuthResult", + "text": "OnPostAuthResult" }, " | Promise<", { @@ -18337,8 +18937,8 @@ "pluginId": "@kbn/core-http-server", "scope": "server", "docId": "kibKbnCoreHttpServerPluginApi", - "section": "def-server.OnPostAuthNextResult", - "text": "OnPostAuthNextResult" + "section": "def-server.OnPostAuthResult", + "text": "OnPostAuthResult" }, ">" ], @@ -18433,6 +19033,14 @@ "docId": "kibKbnCoreHttpServerPluginApi", "section": "def-server.OnPostAuthNextResult", "text": "OnPostAuthNextResult" + }, + " | ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.OnPostAuthAuthzResult", + "text": "OnPostAuthAuthzResult" } ], "path": "packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts", @@ -18440,18 +19048,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/core-http-server", - "id": "def-server.OnPostAuthResultType", - "type": "string", - "tags": [], - "label": "OnPostAuthResultType", - "description": [], - "path": "packages/core/http/core-http-server/src/lifecycle/on_post_auth.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.OnPreAuthHandler", @@ -18954,6 +19550,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.Privilege", + "type": "Type", + "tags": [], + "label": "Privilege", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.RawRequest", @@ -19352,6 +19963,68 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.RouteAuthc", + "type": "Type", + "tags": [], + "label": "RouteAuthc", + "description": [ + "\nRepresents the authentication status for a route. It can either be enabled (`AuthcEnabled`) or disabled (`AuthcDisabled`)." + ], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.AuthcEnabled", + "text": "AuthcEnabled" + }, + " | ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.AuthcDisabled", + "text": "AuthcDisabled" + } + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.RouteAuthz", + "type": "Type", + "tags": [], + "label": "RouteAuthz", + "description": [ + "\nRepresents the authorization status for a route. It can either be enabled (`AuthzEnabled`) or disabled (`AuthzDisabled`)." + ], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.AuthzDisabled", + "text": "AuthzDisabled" + }, + " | ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.AuthzEnabled", + "text": "AuthzEnabled" + } + ], + "path": "packages/core/http/core-http-server/src/router/route.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.RouteContentType", @@ -19563,6 +20236,62 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.RouteSecurityGetter", + "type": "Type", + "tags": [], + "label": "RouteSecurityGetter", + "description": [], + "signature": [ + "(request: { headers: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.Headers", + "text": "Headers" + }, + "; query?: unknown; }) => ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined" + ], + "path": "packages/core/http/core-http-server/src/router/request.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.RouteSecurityGetter.$1", + "type": "Object", + "tags": [], + "label": "request", + "description": [], + "signature": [ + "{ headers: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.Headers", + "text": "Headers" + }, + "; query?: unknown; }" + ], + "path": "packages/core/http/core-http-server/src/router/request.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.RouteValidationFunction", @@ -19902,7 +20631,7 @@ "section": "def-server.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", + ", \"security\" | \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -19910,7 +20639,15 @@ "section": "def-server.RouteAccess", "text": "RouteAccess" }, - "; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" + "; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, @@ -19978,7 +20715,7 @@ "section": "def-server.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", + ", \"security\" | \"description\" | \"deprecated\" | \"access\" | \"discontinued\"> | undefined; access: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -19986,7 +20723,15 @@ "section": "def-server.RouteAccess", "text": "RouteAccess" }, - "; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" + "; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; enableQueryVersion?: boolean | undefined; summary?: string | undefined; description?: string | undefined; deprecated?: boolean | undefined; discontinued?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 0548a36b3ba09..1d755fd067ec2 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_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 | |-------------------|-----------|------------------------|-----------------| -| 496 | 2 | 193 | 0 | +| 530 | 2 | 216 | 0 | ## Server diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 10dee3fc5dd42..91ae86b098cc8 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-09-30 +date: 2024-10-01 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 c2b597cc9c44c..38ce3cb89c9fe 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-09-30 +date: 2024-10-01 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 f4239d7d333bf..a1bb917f0a554 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-09-30 +date: 2024-10-01 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 a59b9ce3d143a..74a04bbc0e63a 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-09-30 +date: 2024-10-01 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 d988ea5e2e501..db80eda8e4113 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-09-30 +date: 2024-10-01 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 22f0702cc9823..c83bcfc01b9ba 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-09-30 +date: 2024-10-01 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 2d2b26eb1b5ba..fa1bfda4d4f08 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-09-30 +date: 2024-10-01 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 6af7e8b65fb46..bc788f6bfcbdf 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-09-30 +date: 2024-10-01 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 943d5b3510194..f6f3e08774d3c 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-09-30 +date: 2024-10-01 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 1e17079951e9b..7b293a2c4e73b 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-09-30 +date: 2024-10-01 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 134f0f91ce98e..cbecdf78998bc 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-09-30 +date: 2024-10-01 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 2050a6be01d36..92e90fc3d49f6 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-09-30 +date: 2024-10-01 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 d63cdee34cc2f..8b8a288c25d5d 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-09-30 +date: 2024-10-01 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 8ed31c8856538..b45eed3402a67 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-09-30 +date: 2024-10-01 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 50c807aa0ab5d..7b9156bbe3bc8 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-09-30 +date: 2024-10-01 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 fcc3067607c60..a6d3f9d197482 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 34e8dd7a2edda..9baa8923384e7 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 3d3eccd8e1014..fa5ce18f8f68a 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-09-30 +date: 2024-10-01 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 72e4efc783dc8..ecde70734f41f 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-09-30 +date: 2024-10-01 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 fcef748b7adbc..3a22611eb9070 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-09-30 +date: 2024-10-01 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 e2efed966c022..e21e9083c81e5 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-09-30 +date: 2024-10-01 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 5f3f3985a299d..9d3640f11768e 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-09-30 +date: 2024-10-01 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 5b76f0f7d0cc2..c75ef3d712c18 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-09-30 +date: 2024-10-01 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 69ece9f78d81a..a64d092522bf3 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-09-30 +date: 2024-10-01 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 9889e6d05224c..7d89b670ead29 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-09-30 +date: 2024-10-01 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 f70279ececb46..51ac5870ae176 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-09-30 +date: 2024-10-01 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 eb2347734804d..aeb99514efc46 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-09-30 +date: 2024-10-01 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 bff7ce4550429..8c448a3ae4aaa 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-09-30 +date: 2024-10-01 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 8e77587a94bae..7cc1c2cf1bac2 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-09-30 +date: 2024-10-01 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 8ca26e2a5874b..8b9885bfd4550 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-09-30 +date: 2024-10-01 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 7768916db1a7b..f4df1c28c1f90 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-09-30 +date: 2024-10-01 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 d1cf99186e20b..54af2731e0adf 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-09-30 +date: 2024-10-01 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 9ead2b84f5a89..d7d35d7c6e229 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-09-30 +date: 2024-10-01 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 086dc12bd09f5..efdbbb455be61 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-09-30 +date: 2024-10-01 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 bcadf9afc266e..fafa6d3a06d7d 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-09-30 +date: 2024-10-01 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 742f50f45f9cc..884ac3922e63f 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-09-30 +date: 2024-10-01 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 7013e7cb7a0dd..5d8350eb2eb2e 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-09-30 +date: 2024-10-01 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 1ce86f4285181..dc3b14e28cf59 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-09-30 +date: 2024-10-01 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 d540bcc984aa2..e9a6696f4038b 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-09-30 +date: 2024-10-01 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 e71ad52c32980..45997c647b7fe 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-09-30 +date: 2024-10-01 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 f3f434ade677c..7946283a6f514 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-09-30 +date: 2024-10-01 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 73cf5fe0e0282..6e085205576e6 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-09-30 +date: 2024-10-01 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 6eb796b9fcb27..22f6a606b16cd 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-09-30 +date: 2024-10-01 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 b309ce2b38716..28d97c9514d2b 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-09-30 +date: 2024-10-01 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 5d48afd33ae32..ef533ad0fa3ef 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-09-30 +date: 2024-10-01 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 83ba508ddb82c..280ad7fbbc8ff 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-09-30 +date: 2024-10-01 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 ad7685630af0c..6dc38390484aa 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-09-30 +date: 2024-10-01 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 a4d820c6480ca..ec10013d865bd 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-09-30 +date: 2024-10-01 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 b490a5dc1fe31..6c8ad6fd3279c 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-09-30 +date: 2024-10-01 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 e8dedb30689c5..161e523b0a1d0 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-09-30 +date: 2024-10-01 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 a0dfe9aa9711c..ea62ba0226054 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-09-30 +date: 2024-10-01 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 7529f241a4cff..7819a0e652f4d 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-09-30 +date: 2024-10-01 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 6c48368df7788..c3da4d02e1518 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-09-30 +date: 2024-10-01 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 8ebbef45ee0ce..95bff7fefaeda 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-09-30 +date: 2024-10-01 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 d7491716efe44..294def97417bb 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-09-30 +date: 2024-10-01 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 eeeb3f1bab68c..8fc83a3d3837b 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-09-30 +date: 2024-10-01 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 b00a5acebc6ef..4a3180afeca82 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-09-30 +date: 2024-10-01 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 04253a4f02a8a..df68bb0fd6d07 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-09-30 +date: 2024-10-01 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 3634c5cbb65cc..4a6d19d8a8eb8 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-09-30 +date: 2024-10-01 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 03792f4135333..14d7d24eef56b 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-09-30 +date: 2024-10-01 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 2e39d810f9a35..52c4d63f504c9 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-09-30 +date: 2024-10-01 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 9e073bd9b1a27..c896cbfacf26d 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-09-30 +date: 2024-10-01 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 074ad6734db47..3205a706aab30 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-09-30 +date: 2024-10-01 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 9da787088d0c3..971f8cc65aaa9 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-09-30 +date: 2024-10-01 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 8b12709ff8c83..df8f0ac12a6a1 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-09-30 +date: 2024-10-01 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 e8e702f056c80..2d68c293f9fe4 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-09-30 +date: 2024-10-01 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 076f80f900eef..4b1e28a7de9c9 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-09-30 +date: 2024-10-01 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 8b38faf4646e9..2c6fa3bf01ef7 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-09-30 +date: 2024-10-01 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 7177ec05c5c75..6b2fd5644e4b3 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-09-30 +date: 2024-10-01 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 256c41897ed66..93bc79d9aaeca 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-09-30 +date: 2024-10-01 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 3866aa57190ed..23939f977b189 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-09-30 +date: 2024-10-01 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 80dddb98a44d6..cbb589dc104d4 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-09-30 +date: 2024-10-01 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 b97429db2e558..e02c9bdca1df4 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-09-30 +date: 2024-10-01 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 7483ed73530ac..93adba1d38b85 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-09-30 +date: 2024-10-01 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 f68cafb952495..8f058e2ebcaad 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-09-30 +date: 2024-10-01 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 8d01fa7a3f848..24a4d4b7d58d3 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-09-30 +date: 2024-10-01 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 182d35b68040c..34ed2e7886e5e 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-09-30 +date: 2024-10-01 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 497a7b479bf0d..9eff12f75942d 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-09-30 +date: 2024-10-01 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 1571bc1837e47..2e62a928fcd75 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-09-30 +date: 2024-10-01 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 24c5b6d2c5451..56761fa7fa94a 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-09-30 +date: 2024-10-01 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 5c9ca0269a11b..f914a13c42f8d 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-09-30 +date: 2024-10-01 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 d5436958c7001..215d265e20262 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-09-30 +date: 2024-10-01 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 3e80690ccea01..1df80afbd4c7c 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-09-30 +date: 2024-10-01 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 75a19b1f819a0..c56c9998fddec 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-09-30 +date: 2024-10-01 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 ff4638e1ef6b6..59c1937198e78 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-09-30 +date: 2024-10-01 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 4860843b3c16f..34d13d6ed7874 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-09-30 +date: 2024-10-01 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 ca4152c08924c..9d648b7ed0ab1 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-09-30 +date: 2024-10-01 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 65c7013c10b43..ea244aacf9c2e 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-09-30 +date: 2024-10-01 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 e25f7e01bf3f7..1406599df4d8a 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-09-30 +date: 2024-10-01 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 d378db81842bb..8e70643d30c5f 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-09-30 +date: 2024-10-01 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 7a0b7926bf624..d45e41bc85ff6 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-09-30 +date: 2024-10-01 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 44ab8e90ff5ef..468dc3db9c1dc 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-09-30 +date: 2024-10-01 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 6efacde3b9b57..112bd28ab3c98 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-09-30 +date: 2024-10-01 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 fbf724dbe0552..fce03e2b207bc 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-09-30 +date: 2024-10-01 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 634d44dbc62f5..ff19d701ea5e2 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-09-30 +date: 2024-10-01 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 5ff966a29fceb..eed024a60aac8 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-09-30 +date: 2024-10-01 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 32eee801057f4..6ac848ba164df 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-09-30 +date: 2024-10-01 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 44f7b5fb1297b..35bf221601950 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-09-30 +date: 2024-10-01 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 c59a386708dad..77f84b1f1a224 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-09-30 +date: 2024-10-01 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 3a17ff8acc281..fdb8768b547ad 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-09-30 +date: 2024-10-01 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 3bb9a91db3de5..8c3729ed18d3d 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-09-30 +date: 2024-10-01 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 6066275fd05ab..fe864ebc4a974 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-09-30 +date: 2024-10-01 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 8c3426fea3a6d..b459dd9010a93 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-09-30 +date: 2024-10-01 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 66ddecbb351e4..52ea567c77e3a 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-09-30 +date: 2024-10-01 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 d10b857f988d6..412063d1eb26e 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-09-30 +date: 2024-10-01 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 0ea94eacfa6f0..12c2f120f2c2f 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-09-30 +date: 2024-10-01 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 c55fd36a97b43..a48f6d770dd09 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-09-30 +date: 2024-10-01 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 132c108741fde..806a21029dec2 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-09-30 +date: 2024-10-01 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 f6e3c7a81b849..0abcd0d819ff6 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-09-30 +date: 2024-10-01 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 1ef1c90a34eec..b3082b2375683 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-09-30 +date: 2024-10-01 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 9fa1be46a7963..ada2be47729b4 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-09-30 +date: 2024-10-01 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 cca3d82a93a38..c06023f45c2fd 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-09-30 +date: 2024-10-01 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 6cb61b8ed9aa2..7f6f7dba3f7e9 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-09-30 +date: 2024-10-01 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 a6126739b2a3b..206189e105f8b 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-09-30 +date: 2024-10-01 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 99836cf5375fa..8ceab799c19be 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-09-30 +date: 2024-10-01 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 d88e56ea131bf..af3c80c29f21f 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-09-30 +date: 2024-10-01 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 72df570915250..ea572390f3362 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-09-30 +date: 2024-10-01 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 59a72f7f2234a..4f2af16db8f67 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-09-30 +date: 2024-10-01 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 952966dcaa2d0..e50d3157080ba 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-09-30 +date: 2024-10-01 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 dcb0a42832c6a..965ef3bcdc279 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-09-30 +date: 2024-10-01 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 f5c36d7e047a6..91c86e4067133 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-09-30 +date: 2024-10-01 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 ee6bb00c8e187..991063cb1c9ea 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-09-30 +date: 2024-10-01 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 d49684a6a2186..0916876f1a1c3 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-09-30 +date: 2024-10-01 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 d4c6fb895d68a..3b513aa74dc05 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-09-30 +date: 2024-10-01 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 ace6be4fb5fa4..ba2c1c9b29333 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-09-30 +date: 2024-10-01 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 15e82385ea530..29e4317828f86 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-09-30 +date: 2024-10-01 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 5066e51ebf209..81b74a73d4373 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-09-30 +date: 2024-10-01 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 2c97807bf54d2..2d8cd04e30ed5 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-09-30 +date: 2024-10-01 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 b619d4a83c272..147ce18d35a25 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.devdocs.json b/api_docs/kbn_discover_utils.devdocs.json index fa5600e7872ef..2d3b734d648e2 100644 --- a/api_docs/kbn_discover_utils.devdocs.json +++ b/api_docs/kbn_discover_utils.devdocs.json @@ -516,7 +516,7 @@ "label": "createLogsContextService", "description": [], "signature": [ - "({ logsDataAccessPlugin, }: ", + "({ logsDataAccess }: ", "LogsContextServiceDeps", ") => Promise<{ isLogsIndexPattern: (indexPattern: unknown) => boolean; }>" ], @@ -529,7 +529,7 @@ "id": "def-common.createLogsContextService.$1", "type": "Object", "tags": [], - "label": "{\n logsDataAccessPlugin,\n}", + "label": "{ logsDataAccess }", "description": [], "signature": [ "LogsContextServiceDeps" @@ -1189,7 +1189,7 @@ "label": "getFieldValue", "description": [], "signature": [ - "(record: ", + " any" + ", TField extends string>(record: TRecord, field: TField & keyof TRecord[\"flattened\"]) => TRecord[\"flattened\"][TField]" ], "path": "packages/kbn-discover-utils/src/utils/get_field_value.ts", "deprecated": false, @@ -1206,18 +1206,12 @@ { "parentPluginId": "@kbn/discover-utils", "id": "def-common.getFieldValue.$1", - "type": "Object", + "type": "Uncategorized", "tags": [], "label": "record", "description": [], "signature": [ - { - "pluginId": "@kbn/discover-utils", - "scope": "common", - "docId": "kibKbnDiscoverUtilsPluginApi", - "section": "def-common.DataTableRecord", - "text": "DataTableRecord" - } + "TRecord" ], "path": "packages/kbn-discover-utils/src/utils/get_field_value.ts", "deprecated": false, @@ -1227,12 +1221,12 @@ { "parentPluginId": "@kbn/discover-utils", "id": "def-common.getFieldValue.$2", - "type": "string", + "type": "CompoundType", "tags": [], "label": "field", "description": [], "signature": [ - "string" + "TField & keyof TRecord[\"flattened\"]" ], "path": "packages/kbn-discover-utils/src/utils/get_field_value.ts", "deprecated": false, diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 3a6d3bbb49887..0f5d0f043ea52 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-09-30 +date: 2024-10-01 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 a5794f0584ac3..521545ee89718 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-09-30 +date: 2024-10-01 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 9b1b3ea4f5908..e3eae99b96058 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-09-30 +date: 2024-10-01 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 c9adc253b6278..81d89982c57f6 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-09-30 +date: 2024-10-01 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 6db98c94b5ae2..10996d3869e8e 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-09-30 +date: 2024-10-01 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 10ddfe6b1b645..42e633b1bf3cd 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-09-30 +date: 2024-10-01 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 5f8b4fdc363ca..9339a96ad0078 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-09-30 +date: 2024-10-01 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 392aedccdc670..67ebd23beb45d 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-09-30 +date: 2024-10-01 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.devdocs.json b/api_docs/kbn_elastic_assistant_common.devdocs.json index cb9fad9537b72..48301e65f7fd4 100644 --- a/api_docs/kbn_elastic_assistant_common.devdocs.json +++ b/api_docs/kbn_elastic_assistant_common.devdocs.json @@ -476,7 +476,7 @@ "label": "replaceAnonymizedValuesWithOriginalValues", "description": [], "signature": [ - "({ messageContent, replacements, }: { messageContent: string; replacements: Zod.objectOutputType<{}, Zod.ZodString, \"strip\">; }) => string" + "({ messageContent, replacements, }: { messageContent: string; replacements: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | null | undefined; }) => string" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.ts", "deprecated": false, @@ -512,7 +512,7 @@ "label": "replacements", "description": [], "signature": [ - "{} & { [k: string]: string; }" + "Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | null | undefined" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.ts", "deprecated": false, diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 51d175e601a67..642fd2f06b012 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 18f63c088e8a4..0677fb33a8f04 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 3e783a0265734..cdad5b2fec3bc 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-09-30 +date: 2024-10-01 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 091a29f8d243b..260857abbd005 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-09-30 +date: 2024-10-01 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 d48b846bd5ff3..b3aab2ccb6655 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-09-30 +date: 2024-10-01 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 cd367c551378f..95ab60d012b3c 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-09-30 +date: 2024-10-01 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 411ddc1cd4b2f..ecb40ec85497b 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-09-30 +date: 2024-10-01 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 ce897efc284b7..b5468890cd5d3 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-09-30 +date: 2024-10-01 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 f538e4d51209b..37d2ef2c0719a 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_editor.mdx b/api_docs/kbn_esql_editor.mdx index f5e51262bee96..b44f95809d84b 100644 --- a/api_docs/kbn_esql_editor.mdx +++ b/api_docs/kbn_esql_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-editor title: "@kbn/esql-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-editor plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-editor'] --- import kbnEsqlEditorObj from './kbn_esql_editor.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index fe4344fc4280a..90941e5d63252 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 0bd81e7dafbd1..82ab9f9a68fe4 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-09-30 +date: 2024-10-01 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 ed41cd2f52cca..7ed16b15b54c4 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-09-30 +date: 2024-10-01 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 1fa1031fc246f..03b880b6aa9f9 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-09-30 +date: 2024-10-01 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 046dbbe245069..d43ee875371cd 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-09-30 +date: 2024-10-01 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 a61e3e8d5f64f..6297654e49f3d 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 4a53b5fc4ff01..ccc8d29b7a048 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 2eeccbd0ec0cf..a3dfd34cfe7f8 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-09-30 +date: 2024-10-01 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 290a7eff0f7cf..d54dbfec4d997 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-09-30 +date: 2024-10-01 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 52654a7f75451..4443520e21885 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-09-30 +date: 2024-10-01 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 5ee23b2719a68..c8165efdbc07f 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-09-30 +date: 2024-10-01 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 57e0f75170b94..98aa56d6288f2 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-09-30 +date: 2024-10-01 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 f977e2402cbf3..8ae2b60a76b2a 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-09-30 +date: 2024-10-01 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 8df97c078813b..3ba302aac67dd 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index f354852248aef..6778905579cdb 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index 8baa1a3401595..49e77ae481dc4 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 5e4c939d953fc..2df84955942c6 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-09-30 +date: 2024-10-01 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 78f5e7c63c45f..7b0a02caa876b 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-09-30 +date: 2024-10-01 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 1fbeee682258c..61d4578c8df43 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-09-30 +date: 2024-10-01 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 fc50746562c94..803e195207c12 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-09-30 +date: 2024-10-01 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 939bf3d0f06da..4836506d39a4d 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-09-30 +date: 2024-10-01 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 affebd4ef6ef1..e9c8cb7ab2278 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-09-30 +date: 2024-10-01 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 40fff90a10e89..2533b80f1e732 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-09-30 +date: 2024-10-01 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 bfc6a850db5b8..a1be22ef39755 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-09-30 +date: 2024-10-01 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 a7f1c7d516719..5c8de142e5ea8 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management_shared_types.mdx b/api_docs/kbn_index_management_shared_types.mdx index 74b284e6e7d36..707f869ebe87e 100644 --- a/api_docs/kbn_index_management_shared_types.mdx +++ b/api_docs/kbn_index_management_shared_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management-shared-types title: "@kbn/index-management-shared-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management-shared-types plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management-shared-types'] --- import kbnIndexManagementSharedTypesObj from './kbn_index_management_shared_types.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index 61ca7d876ebe1..4c89e81521072 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-09-30 +date: 2024-10-01 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 b240f0f8b163c..fd720ed14ac54 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-09-30 +date: 2024-10-01 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 15550631e5943..2c3a09d4b358c 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index a54f19ffd54c3..f52e304ff36c9 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 61ef22189b156..2e35c2de50370 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-09-30 +date: 2024-10-01 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 31274a24c6630..43a3780cc6a9f 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-09-30 +date: 2024-10-01 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 afd49c0c71ac1..6428ab7c6b463 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-09-30 +date: 2024-10-01 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 bfd46bf124621..0debf9e57a5a1 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-09-30 +date: 2024-10-01 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 a852d3d10b734..ebcbab6f60c0c 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 4d113127e5462..39c959324ae46 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 4920f02bd4be1..bbf6600847392 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation.mdx b/api_docs/kbn_language_documentation.mdx index c6b45c82e7a76..f8b2d671c9010 100644 --- a/api_docs/kbn_language_documentation.mdx +++ b/api_docs/kbn_language_documentation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation title: "@kbn/language-documentation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation'] --- import kbnLanguageDocumentationObj from './kbn_language_documentation.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index b7248d0db484b..3737133cd0b66 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-09-30 +date: 2024-10-01 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 48d7b9de8a0c9..3bc1132770cbd 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-09-30 +date: 2024-10-01 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 15aa7db247687..14ce7091f242d 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-09-30 +date: 2024-10-01 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 43f0fac47a531..3a5a0761fd9f7 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-09-30 +date: 2024-10-01 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 a5f2e3d5486db..14be6eeb6fd91 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-09-30 +date: 2024-10-01 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 17f665ac54a66..3e61f0cbad0ea 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-09-30 +date: 2024-10-01 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 5c3b44aba3912..df95e83ac2971 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-09-30 +date: 2024-10-01 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 d8397cb5613e5..e6d3c59c829fc 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-09-30 +date: 2024-10-01 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 a9ec06acb5c6f..80b94b11cf70c 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-09-30 +date: 2024-10-01 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 262683c5a4566..0fef3c793ab12 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-09-30 +date: 2024-10-01 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 ef04a1c04810a..482fb62959150 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-09-30 +date: 2024-10-01 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 51e9f5fbd55d5..0ebd5498dc48e 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-09-30 +date: 2024-10-01 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 e08979aac3b8a..190d69e66c82f 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-09-30 +date: 2024-10-01 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 6c9ed97185515..9d5845197a9c9 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-09-30 +date: 2024-10-01 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 219b04228d993..970803071fff4 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-09-30 +date: 2024-10-01 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 19b472c7eb39a..a970ffe068eef 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-09-30 +date: 2024-10-01 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 8529a7107b253..1275ba3987bd7 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-09-30 +date: 2024-10-01 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 b2d80783e167a..f874d68e25c4b 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-09-30 +date: 2024-10-01 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 b96aed922a5e0..3e946b549a9ea 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-09-30 +date: 2024-10-01 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 3fed2eff0487b..40514d7e726e4 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-09-30 +date: 2024-10-01 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 af6de3fb7f145..cb2244fa168e3 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-09-30 +date: 2024-10-01 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 34d0c0523b2c4..eef8d334d4684 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-09-30 +date: 2024-10-01 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 397e3a83750d5..0e06abf57ba09 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-09-30 +date: 2024-10-01 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 f08b1249dbc48..e618ff9739440 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-09-30 +date: 2024-10-01 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 c9388d07a7f87..bd77f992694df 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-09-30 +date: 2024-10-01 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 26b342495be4f..078672d989cf9 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-09-30 +date: 2024-10-01 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 c792818f55a3d..c9406eede84be 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-09-30 +date: 2024-10-01 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 f3de901060ce7..488f87e30fd05 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-09-30 +date: 2024-10-01 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 42cc49610fb4e..eb90efe54b7f6 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-09-30 +date: 2024-10-01 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 60490ccd3ee4d..7fea72d99e3c2 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_field_stats_flyout.mdx b/api_docs/kbn_ml_field_stats_flyout.mdx index a96cf26b39685..97c7ada0a8de6 100644 --- a/api_docs/kbn_ml_field_stats_flyout.mdx +++ b/api_docs/kbn_ml_field_stats_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-field-stats-flyout title: "@kbn/ml-field-stats-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-field-stats-flyout plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-field-stats-flyout'] --- import kbnMlFieldStatsFlyoutObj from './kbn_ml_field_stats_flyout.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 31baf2994ba2e..6b69a8403ed3e 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-09-30 +date: 2024-10-01 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 a3e03e88dbde5..2257374763016 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-09-30 +date: 2024-10-01 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 217e792c4955b..2b476984688b9 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-09-30 +date: 2024-10-01 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 c524c9b83457a..bbc86966dde13 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-09-30 +date: 2024-10-01 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 44a64004df2be..0dc0e5fa0a06d 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-09-30 +date: 2024-10-01 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 6bdd3907aaefe..362168657f29e 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-09-30 +date: 2024-10-01 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 627d9eb11c196..5478f89183c97 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_parse_interval.mdx b/api_docs/kbn_ml_parse_interval.mdx index ea1cfa188ca0d..9ea5269642814 100644 --- a/api_docs/kbn_ml_parse_interval.mdx +++ b/api_docs/kbn_ml_parse_interval.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-parse-interval title: "@kbn/ml-parse-interval" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-parse-interval plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-parse-interval'] --- import kbnMlParseIntervalObj from './kbn_ml_parse_interval.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 60f9632f0fcfc..22cc194900007 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-09-30 +date: 2024-10-01 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 f26760a1773fb..c348d149f1cd7 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-09-30 +date: 2024-10-01 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 ea665c53d213e..abc608daca077 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-09-30 +date: 2024-10-01 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 fd67b1684e1b3..6050ce5528184 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-09-30 +date: 2024-10-01 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 3441cbe42fb0f..2c187ef245cd4 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-09-30 +date: 2024-10-01 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 06c5b550ef879..c9ddf77603092 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-09-30 +date: 2024-10-01 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 f73a9778f45b1..d10bd6f0041d7 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-09-30 +date: 2024-10-01 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 39bf6c7789998..3e6752339f44a 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-09-30 +date: 2024-10-01 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 ae3be62c009a2..86aaf5b62eda1 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_ml_validators.mdx b/api_docs/kbn_ml_validators.mdx index 967d5d2e8709b..0b825a146b981 100644 --- a/api_docs/kbn_ml_validators.mdx +++ b/api_docs/kbn_ml_validators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-validators title: "@kbn/ml-validators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-validators plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-validators'] --- import kbnMlValidatorsObj from './kbn_ml_validators.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 9fe74b64330f9..5d77909202cf3 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-09-30 +date: 2024-10-01 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 7a03275e453e5..ca3b0561307c2 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-09-30 +date: 2024-10-01 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 894c246d5b897..058170b55816a 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index 4fb7513525d72..a14d50ef62b93 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index a3a300c635dd7..543b80574160a 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index 437adb49792c0..28d5410a30011 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index f5bf83a6f3dc9..48c8adfc9a894 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-09-30 +date: 2024-10-01 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 b866ba02496b9..1d4246facea11 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-09-30 +date: 2024-10-01 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 d59b23cc65fd9..13f9b5bd318e6 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-09-30 +date: 2024-10-01 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 2d12ca3da2796..2fa42a1620c1d 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-09-30 +date: 2024-10-01 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 1cdc98385b65d..77fe323165ace 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-09-30 +date: 2024-10-01 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 468f53c28db96..953ed23eb8836 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-09-30 +date: 2024-10-01 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 062a65af7f3a7..1de7980a16039 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-09-30 +date: 2024-10-01 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 2efd1db56aca0..53f46ee3f0b56 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-09-30 +date: 2024-10-01 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 1b1cf32a7fa1d..ac19c831ad2c5 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-09-30 +date: 2024-10-01 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 5cd4db6a9fc27..63e0c3c8af852 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-09-30 +date: 2024-10-01 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 e9f51f3b3c474..4f8f6419b5451 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-09-30 +date: 2024-10-01 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 fdd8dc355981b..7c95f6be43a41 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-09-30 +date: 2024-10-01 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 640a6910cee92..7b09886fdb7ef 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-09-30 +date: 2024-10-01 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 5af98de8c35ce..aede943c2a5c4 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-09-30 +date: 2024-10-01 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 5f3c2760ef0bf..bf61f9a86fa69 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-09-30 +date: 2024-10-01 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 f09d4be3143e2..2ff242a545971 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-09-30 +date: 2024-10-01 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 302cff21763c2..7d46fc90fbea8 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-09-30 +date: 2024-10-01 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 860f5b5e25301..9258a199ae78b 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-09-30 +date: 2024-10-01 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 40adbf08d705e..80b24d5f7cc37 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-09-30 +date: 2024-10-01 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 7edc2205e8383..d1f9057e516d0 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-09-30 +date: 2024-10-01 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 674c5dd440b31..5bbc7ceef7b4c 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-09-30 +date: 2024-10-01 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 872f8eb82da88..40725a847a075 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-09-30 +date: 2024-10-01 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 3eace9bfed7d3..eb43a8e747d11 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-09-30 +date: 2024-10-01 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 2dc3734b14e3f..61f69006d9b6a 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 7af4d042fc4de..31b2513d2059e 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index c1d788e323ac6..ff5a113a597ea 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-09-30 +date: 2024-10-01 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 680dc7d0ab64c..0be339f20f47e 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-09-30 +date: 2024-10-01 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 ef849b87ec8aa..e2b8c32308503 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-09-30 +date: 2024-10-01 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 11f0dbc22fa41..ae355d010e8df 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-09-30 +date: 2024-10-01 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 fcc64f7c3f21d..d8d24e9e310c8 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-09-30 +date: 2024-10-01 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 95c555c527255..56379d994c6af 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-09-30 +date: 2024-10-01 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 ba040c0c67725..4f6dd7cc454fc 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-09-30 +date: 2024-10-01 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 08d173360ab59..5790ced14523e 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-09-30 +date: 2024-10-01 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 18a956b435370..1bd38c8e2deba 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-09-30 +date: 2024-10-01 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 55711ffbe68f2..adf330132e99f 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-09-30 +date: 2024-10-01 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 bd122073117cd..de177903c61cb 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-09-30 +date: 2024-10-01 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 42531868ba1a4..8bb958aa52a56 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-09-30 +date: 2024-10-01 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 60e495fd7a4b3..04494f84d39af 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-09-30 +date: 2024-10-01 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 3e28d2d66e37f..538185e68f8d6 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-09-30 +date: 2024-10-01 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 b8f8188761e4b..bdaa889ba6c4f 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-09-30 +date: 2024-10-01 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 9b2967457bdb1..d7dfe2cdb88e1 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index 202fb4ae1cf0e..97881df306f85 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index fc879a29d0eae..f1eceba31c1e4 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 69f563a37c50c..676993b297271 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index f7752cf80c5f9..3020ce64ffb07 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-09-30 +date: 2024-10-01 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 370785836306d..65a1058e9daeb 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-09-30 +date: 2024-10-01 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 102cb196e6170..b1aa26a7e951f 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-09-30 +date: 2024-10-01 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 0d7c7f4365346..620239d122974 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-09-30 +date: 2024-10-01 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 814d03e40befd..fe6fe2a88f538 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index f8a40a7db4a57..efc465e25225a 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index f194322e6e8c4..822b29919a2d2 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-09-30 +date: 2024-10-01 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 6a7cc2e2b67db..b357dd1a442e5 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-09-30 +date: 2024-10-01 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 bfb3f502ef731..6231fe929240f 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-09-30 +date: 2024-10-01 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 cebb3ede3e7bc..305809b495e81 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-09-30 +date: 2024-10-01 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 3c2291f41430d..6864e29c4df30 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-09-30 +date: 2024-10-01 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 483729522beec..8c4b3768c88fb 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index 4d593ad366990..0c3c20d753cb0 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index fc3f7cffc4357..bb3295a7e618c 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index 0b445960272c2..ead1434d5bcb1 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 2d2755c163eed..ee51dbd5ec0fc 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-09-30 +date: 2024-10-01 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 0835ccb589a9a..e40ebc36b7bf7 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-09-30 +date: 2024-10-01 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 5f93b46e5b6fe..442aeeafae6b9 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-09-30 +date: 2024-10-01 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 1bb2681789148..cf95f79f143d2 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index 68632f9caa071..294fb6005b530 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_common.mdx b/api_docs/kbn_security_solution_common.mdx index 1ea0f279e61eb..1696a47a296cc 100644 --- a/api_docs/kbn_security_solution_common.mdx +++ b/api_docs/kbn_security_solution_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-common title: "@kbn/security-solution-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-common plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-common'] --- import kbnSecuritySolutionCommonObj from './kbn_security_solution_common.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index 38edb09102e41..46045d49f3be8 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 99e1a97de911f..c297172d64c08 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-09-30 +date: 2024-10-01 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 c4e3a39139850..2d5366fc3fe86 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-09-30 +date: 2024-10-01 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 59af464dbe3da..c231f9d32e2e7 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-09-30 +date: 2024-10-01 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 ae68011b424fd..439eee1e67a49 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index 068eed0662437..fc1f03d35d65b 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index c552c2166744a..7dbb5c002c8f7 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-09-30 +date: 2024-10-01 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 ec9536e8b59bf..84ee327e93794 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-09-30 +date: 2024-10-01 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 e0ba10db97a98..f0823b5e1d707 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-09-30 +date: 2024-10-01 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 a6b621e2e3c28..ebec2fb015012 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-09-30 +date: 2024-10-01 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 f30827086ad7c..7b53f9a440395 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 2e120754e0e24..cb67715b9d258 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-09-30 +date: 2024-10-01 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 6193050520d44..f19904eeb6152 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-09-30 +date: 2024-10-01 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.devdocs.json b/api_docs/kbn_securitysolution_io_ts_list_types.devdocs.json index 8b77c1af12ea7..89daf03f4a461 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.devdocs.json +++ b/api_docs/kbn_securitysolution_io_ts_list_types.devdocs.json @@ -11579,12 +11579,8 @@ "]>; id: ", "Type", "; item_id: ", - "UnionC", - "<[", - "StringC", - ", ", - "UndefinedC", - "]>; meta: ", + "Type", + "; meta: ", "ObjectC", "; namespace_type: ", "Type", diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index e657674156692..052655a0d647e 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-09-30 +date: 2024-10-01 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 de593d9b62462..8f4681576361c 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-09-30 +date: 2024-10-01 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 4fb04972255b2..9408b6c7abc37 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-09-30 +date: 2024-10-01 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 0244a63ad147b..a271dd803ec63 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-09-30 +date: 2024-10-01 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 c8c8ed77a4741..4627c050a4f32 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-09-30 +date: 2024-10-01 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 63c323808cb2e..2ee36434040e5 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-09-30 +date: 2024-10-01 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 a022cd1d7a0a4..b41d807f98f55 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-09-30 +date: 2024-10-01 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 dc2ee45d3fbda..2bfd9e4418955 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-09-30 +date: 2024-10-01 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 38ee726adb11e..f1698e12bedac 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-09-30 +date: 2024-10-01 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 7ca3d040b2aa8..6ed317a594a3c 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-09-30 +date: 2024-10-01 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 273d2e2a2de1f..5e6aab4076b37 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-09-30 +date: 2024-10-01 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 bf23a5f788be6..0ac9b96ea0033 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index 0332c32f44f44..da5b0c3861248 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index 38ba5ccc0c3c2..28c6f53f338ae 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index fa2eb55d7a3e7..66cc2dd71c445 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-09-30 +date: 2024-10-01 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 589fa2f0e6b59..d1d24edfe1d8a 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-09-30 +date: 2024-10-01 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 f6c2ee0a17a29..5c6600514349b 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-09-30 +date: 2024-10-01 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 9741a05e5f05f..422b0718f072d 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-09-30 +date: 2024-10-01 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 bd255ffdb18fc..3df47ff49bbc6 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-09-30 +date: 2024-10-01 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 37beb69198437..5af347070b05a 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-09-30 +date: 2024-10-01 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 346ee4a630045..45dd9e3652b88 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-09-30 +date: 2024-10-01 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 a8f4fe4cbb2fa..a778b905e6398 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-09-30 +date: 2024-10-01 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 3c21ce35f2ad3..2210afdc99e0d 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-09-30 +date: 2024-10-01 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 344eaa215314f..4f961f45fe04e 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-09-30 +date: 2024-10-01 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 562f1943d0cd6..ca899d3281c0a 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-09-30 +date: 2024-10-01 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 4c690ff6019c9..500d528d3acd5 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-09-30 +date: 2024-10-01 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 6f94d956b975d..4cd923b09f9df 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-09-30 +date: 2024-10-01 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 9a9c42806c0f7..cce4acd766b90 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-09-30 +date: 2024-10-01 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 e831d7262343f..e7558cea68716 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-09-30 +date: 2024-10-01 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 e091fb20ae3b6..5a172df0d1ea7 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-09-30 +date: 2024-10-01 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 bbb55c8fc323f..560cc9bf1e252 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-09-30 +date: 2024-10-01 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 4da3dd6ffe07b..2efb7dbcb2036 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-09-30 +date: 2024-10-01 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 163fb05948cb8..4221f8b6f93e8 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-09-30 +date: 2024-10-01 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 6d2157f6a7c90..d14f83142105c 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-09-30 +date: 2024-10-01 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 09a8c47c3ac35..8fec769c8f044 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-09-30 +date: 2024-10-01 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 a83b00b3ea25d..7a0adf7dc9606 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-09-30 +date: 2024-10-01 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 39417ad1ff129..3be5475b7c953 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-09-30 +date: 2024-10-01 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 55f1894663209..d5100ba2c7b18 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-09-30 +date: 2024-10-01 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 b8a587bd7a17b..9bb184ce62527 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-09-30 +date: 2024-10-01 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 1dcbf3f99c810..7aa4feefbc35c 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-09-30 +date: 2024-10-01 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 5061965a38bc6..848ddf4639299 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-09-30 +date: 2024-10-01 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 6c21fc625ad2a..d3e372e9bbc9c 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-09-30 +date: 2024-10-01 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 12fe90544d7da..7b78bdcfdd4ec 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-09-30 +date: 2024-10-01 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 65be20d693c3d..1528c4aa811ff 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-09-30 +date: 2024-10-01 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 18eb84c9a2571..7c109660a386b 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-09-30 +date: 2024-10-01 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 bf18348ffff45..53c946aadc2cd 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-09-30 +date: 2024-10-01 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 8d40dc49fa606..9af60601567b4 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-09-30 +date: 2024-10-01 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 92bfc86952f73..c5ef3b0b9e465 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-09-30 +date: 2024-10-01 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 6780b84958e3e..47d4e3a9a48d0 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-09-30 +date: 2024-10-01 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 f5a7fd486dec9..0862fd0c9fc7f 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-09-30 +date: 2024-10-01 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 0bdc472f330c2..8053b43fc09df 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-09-30 +date: 2024-10-01 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 35c51a4176744..0662c54a524b1 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-09-30 +date: 2024-10-01 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 7fb7836849ca0..d759f8d05819c 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-09-30 +date: 2024-10-01 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 f921776f27222..c3ead9fec01c0 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-09-30 +date: 2024-10-01 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 0924a2d674588..f79b2f00918ed 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-09-30 +date: 2024-10-01 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 1f3d7b390e249..cb84dfb3c2c62 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-09-30 +date: 2024-10-01 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 0d49dbc9cc673..d3bbc14a34747 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-09-30 +date: 2024-10-01 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 5d07401a58ad8..a2cf7b918655f 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-09-30 +date: 2024-10-01 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 76c8c00c2811e..1c9a562f19ff4 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index b00e412647737..ea9709d6dc3ce 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 0d6d96e54a118..1b3521b7c65f5 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-09-30 +date: 2024-10-01 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 21884042eb227..6b6c573157eb1 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 1856c7b09f4cf..925c595641dd5 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-09-30 +date: 2024-10-01 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 193b5f114c2fe..ad256a5e303b5 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_sse_utils.mdx b/api_docs/kbn_sse_utils.mdx index 354c7a537bcbc..eac1daf9c55af 100644 --- a/api_docs/kbn_sse_utils.mdx +++ b/api_docs/kbn_sse_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils title: "@kbn/sse-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils'] --- import kbnSseUtilsObj from './kbn_sse_utils.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_client.mdx b/api_docs/kbn_sse_utils_client.mdx index 5002f3ad27535..0651e1a1cb4ff 100644 --- a/api_docs/kbn_sse_utils_client.mdx +++ b/api_docs/kbn_sse_utils_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-client title: "@kbn/sse-utils-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-client plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-client'] --- import kbnSseUtilsClientObj from './kbn_sse_utils_client.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_server.mdx b/api_docs/kbn_sse_utils_server.mdx index e342bd1b1ca0d..42871196889f3 100644 --- a/api_docs/kbn_sse_utils_server.mdx +++ b/api_docs/kbn_sse_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-server title: "@kbn/sse-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-server plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-server'] --- import kbnSseUtilsServerObj from './kbn_sse_utils_server.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index ddd48d3684709..9b0d29f9fda9a 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-09-30 +date: 2024-10-01 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 5cfd9a7bf8574..d7642b52b1144 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-09-30 +date: 2024-10-01 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 42ea8e5259cf5..383c8a6044521 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 6f18bc079e06e..26175e1340298 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index 922024cd586ad..de114263110e5 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 3a699877ba849..1b93ed574344a 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-09-30 +date: 2024-10-01 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 087b39638a077..67f338bd5e90c 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-09-30 +date: 2024-10-01 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 83500b2e84702..6f76ea922d9d3 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-09-30 +date: 2024-10-01 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 ff05e3f7f5e53..0ee8f1f612ecf 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-09-30 +date: 2024-10-01 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 2f3e8848dc798..f12b118ea9c10 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index afa75182c343b..0e7ca2c0dd017 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-09-30 +date: 2024-10-01 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 a6c59436bf8fa..aeb7b0bced041 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-09-30 +date: 2024-10-01 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 c380e82b60b58..b8c1f6ffff12d 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 1784b9d0fd831..431a49159089b 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 13e0a46279cd4..b1299fc238a5d 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-09-30 +date: 2024-10-01 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 88388edc2f007..a97b8a95678cd 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-09-30 +date: 2024-10-01 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 cb42effffee9d..580a3c7e55af8 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-09-30 +date: 2024-10-01 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 a33f732fe5a63..5edf893f709b4 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-09-30 +date: 2024-10-01 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 76a75c8cf1b2d..3699415f2ac01 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.devdocs.json b/api_docs/kbn_unified_data_table.devdocs.json index bf0686fb24c6c..dcfb9d2f4cdb4 100644 --- a/api_docs/kbn_unified_data_table.devdocs.json +++ b/api_docs/kbn_unified_data_table.devdocs.json @@ -5,33 +5,65 @@ "functions": [ { "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.DataTableRowControl", + "id": "def-public.getDataGridDensity", "type": "Function", "tags": [], - "label": "DataTableRowControl", + "label": "getDataGridDensity", "description": [], "signature": [ - "({ size, children, }: React.PropsWithChildren>) => JSX.Element" + "(storage: ", + { + "pluginId": "kibanaUtils", + "scope": "public", + "docId": "kibKibanaUtilsPluginApi", + "section": "def-public.Storage", + "text": "Storage" + }, + ", consumer: string) => ", + { + "pluginId": "@kbn/unified-data-table", + "scope": "public", + "docId": "kibKbnUnifiedDataTablePluginApi", + "section": "def-public.DataGridDensity", + "text": "DataGridDensity" + } ], - "path": "packages/kbn-unified-data-table/src/components/data_table_row_control.tsx", + "path": "packages/kbn-unified-data-table/src/hooks/use_data_grid_density.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.DataTableRowControl.$1", - "type": "CompoundType", + "id": "def-public.getDataGridDensity.$1", + "type": "Object", "tags": [], - "label": "{\n size,\n children,\n}", + "label": "storage", "description": [], "signature": [ - "React.PropsWithChildren>" + { + "pluginId": "kibanaUtils", + "scope": "public", + "docId": "kibKibanaUtilsPluginApi", + "section": "def-public.Storage", + "text": "Storage" + } ], - "path": "packages/kbn-unified-data-table/src/components/data_table_row_control.tsx", + "path": "packages/kbn-unified-data-table/src/hooks/use_data_grid_density.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.getDataGridDensity.$2", + "type": "string", + "tags": [], + "label": "consumer", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-unified-data-table/src/hooks/use_data_grid_density.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -172,6 +204,39 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.getRowHeight", + "type": "Function", + "tags": [], + "label": "getRowHeight", + "description": [], + "signature": [ + "({ storage, consumer, rowHeightState, configRowHeight, }: Pick & { configRowHeight?: number | undefined; }) => number" + ], + "path": "packages/kbn-unified-data-table/src/hooks/use_row_height.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.getRowHeight.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n storage,\n consumer,\n rowHeightState,\n configRowHeight,\n}", + "description": [], + "signature": [ + "Pick & { configRowHeight?: number | undefined; }" + ], + "path": "packages/kbn-unified-data-table/src/hooks/use_row_height.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/unified-data-table", "id": "def-public.getRowsPerPageOptions", @@ -500,6 +565,256 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument", + "type": "Function", + "tags": [], + "label": "SourceDocument", + "description": [], + "signature": [ + "({\n useTopLevelObjectColumns,\n row,\n columnId,\n dataView,\n shouldShowFieldHandler,\n maxEntries,\n isPlainRecord,\n fieldFormats,\n dataTestSubj = 'discoverCellDescriptionList',\n className,\n isCompressed = true,\n}: { useTopLevelObjectColumns: boolean; row: ", + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.DataTableRecord", + "text": "DataTableRecord" + }, + "; columnId: string; dataView: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + "; shouldShowFieldHandler: ", + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.ShouldShowFieldInTableHandler", + "text": "ShouldShowFieldInTableHandler" + }, + "; maxEntries: number; isPlainRecord?: boolean | undefined; fieldFormats: ", + { + "pluginId": "fieldFormats", + "scope": "public", + "docId": "kibFieldFormatsPluginApi", + "section": "def-public.FieldFormatsStart", + "text": "FieldFormatsStart" + }, + "; dataTestSubj?: string | undefined; className?: string | undefined; isCompressed?: boolean | undefined; }) => JSX.Element" + ], + "path": "packages/kbn-unified-data-table/src/components/source_document.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument.$1", + "type": "Object", + "tags": [], + "label": "{\n useTopLevelObjectColumns,\n row,\n columnId,\n dataView,\n shouldShowFieldHandler,\n maxEntries,\n isPlainRecord,\n fieldFormats,\n dataTestSubj = 'discoverCellDescriptionList',\n className,\n isCompressed = true,\n}", + "description": [], + "path": "packages/kbn-unified-data-table/src/components/source_document.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument.$1.useTopLevelObjectColumns", + "type": "boolean", + "tags": [], + "label": "useTopLevelObjectColumns", + "description": [], + "path": "packages/kbn-unified-data-table/src/components/source_document.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument.$1.row", + "type": "Object", + "tags": [], + "label": "row", + "description": [], + "signature": [ + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.DataTableRecord", + "text": "DataTableRecord" + } + ], + "path": "packages/kbn-unified-data-table/src/components/source_document.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument.$1.columnId", + "type": "string", + "tags": [], + "label": "columnId", + "description": [], + "path": "packages/kbn-unified-data-table/src/components/source_document.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument.$1.dataView", + "type": "Object", + "tags": [], + "label": "dataView", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + } + ], + "path": "packages/kbn-unified-data-table/src/components/source_document.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument.$1.shouldShowFieldHandler", + "type": "Function", + "tags": [], + "label": "shouldShowFieldHandler", + "description": [], + "signature": [ + "(fieldName: string) => boolean" + ], + "path": "packages/kbn-unified-data-table/src/components/source_document.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument.$1.shouldShowFieldHandler.$1", + "type": "string", + "tags": [], + "label": "fieldName", + "description": [], + "path": "packages/kbn-discover-utils/src/utils/get_should_show_field_handler.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument.$1.maxEntries", + "type": "number", + "tags": [], + "label": "maxEntries", + "description": [], + "path": "packages/kbn-unified-data-table/src/components/source_document.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument.$1.isPlainRecord", + "type": "CompoundType", + "tags": [], + "label": "isPlainRecord", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-unified-data-table/src/components/source_document.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument.$1.fieldFormats", + "type": "CompoundType", + "tags": [], + "label": "fieldFormats", + "description": [], + "signature": [ + "Omit<", + { + "pluginId": "fieldFormats", + "scope": "common", + "docId": "kibFieldFormatsPluginApi", + "section": "def-common.FieldFormatsRegistry", + "text": "FieldFormatsRegistry" + }, + ", \"init\" | \"register\"> & { deserialize: ", + { + "pluginId": "fieldFormats", + "scope": "common", + "docId": "kibFieldFormatsPluginApi", + "section": "def-common.FormatFactory", + "text": "FormatFactory" + }, + "; }" + ], + "path": "packages/kbn-unified-data-table/src/components/source_document.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument.$1.dataTestSubj", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-unified-data-table/src/components/source_document.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument.$1.className", + "type": "string", + "tags": [], + "label": "className", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-unified-data-table/src/components/source_document.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SourceDocument.$1.isCompressed", + "type": "CompoundType", + "tags": [], + "label": "isCompressed", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-unified-data-table/src/components/source_document.tsx", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/unified-data-table", "id": "def-public.UnifiedDataTable", @@ -2965,6 +3280,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.SOURCE_COLUMN", + "type": "string", + "tags": [], + "label": "SOURCE_COLUMN", + "description": [], + "signature": [ + "\"_source\"" + ], + "path": "packages/kbn-unified-data-table/src/utils/columns.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/unified-data-table", "id": "def-public.UnifiedDataTableRenderCustomToolbar", diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 0df7a92d3e807..a821f090448b9 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 165 | 0 | 90 | 2 | +| 183 | 0 | 108 | 1 | ## Client diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 490b379b3e8f3..912f345ce45d2 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-09-30 +date: 2024-10-01 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 2be4019f471a0..a975d41e7910c 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-09-30 +date: 2024-10-01 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 a9a945bbd644d..46f4b5323d4be 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index 5d7c4b50c4ecb..b5c2bbf4d2952 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index ba709ffc87e28..b76ac9c1773f7 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-09-30 +date: 2024-10-01 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 a7e60d264c71c..d464592521ec8 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-09-30 +date: 2024-10-01 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 6fe9c03c1ab83..68db096926513 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-09-30 +date: 2024-10-01 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 36a1c1e332704..791988c7dca21 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-09-30 +date: 2024-10-01 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 0434d38389775..5780f7f974402 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-09-30 +date: 2024-10-01 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 3c0472c036d06..99fe2e17510d0 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-09-30 +date: 2024-10-01 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 30601fb671e54..4300cba0cf59f 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-09-30 +date: 2024-10-01 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 214e50366c8dd..e93413eded9e2 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-09-30 +date: 2024-10-01 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 46609dddd0d44..7152ce3a26646 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index 3edc5fd608a3d..edf27b9b76e7b 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index f4a4ce5a2907f..4f70c5dd1b9ff 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-09-30 +date: 2024-10-01 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 e7970204f2717..0e61c5edd946d 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 69985044c2667..ca8f5b2586435 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-09-30 +date: 2024-10-01 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 7470e26f8df42..ef714d3e61240 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-09-30 +date: 2024-10-01 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 9f01614eab5f3..e2bb6c1195229 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-09-30 +date: 2024-10-01 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 be2530bcdc508..a29d1b1c2bf3a 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-09-30 +date: 2024-10-01 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 376b4adf15032..921b8948c0dd5 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-09-30 +date: 2024-10-01 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 7a4b23f08a0ef..82870639243a6 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-09-30 +date: 2024-10-01 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 9cc9fcf4834a5..2da3bb498a5c6 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-09-30 +date: 2024-10-01 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 c96b66e32f9f5..e18b4140315d5 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-09-30 +date: 2024-10-01 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 954d946e0d280..3a93b1df649d2 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index 46c3496f4ce15..b790f91d184e6 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 1d82ca228ab8a..cc99d12aa0e2d 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-09-30 +date: 2024-10-01 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 3c21db5160fe2..52a9f480ef8d8 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-09-30 +date: 2024-10-01 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 e8b0da57f1164..ca36d6234e45e 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 2dc705d16f3ff..51fe33fad784f 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index d7394cb0ba45d..f7b5c3ab1e769 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-09-30 +date: 2024-10-01 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 5245f77603d4a..a9a02e2d30de6 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-09-30 +date: 2024-10-01 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 39418c0a212b5..a41f072fd2c09 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-09-30 +date: 2024-10-01 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 0a1cebec9624b..c1a9f326dfe23 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-09-30 +date: 2024-10-01 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 ec09caeeb8376..4159f0355bcb7 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-09-30 +date: 2024-10-01 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 1b025cd8be5c6..4fdb21fd4a6dd 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-09-30 +date: 2024-10-01 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 6c1a9ddad4ed6..331434ec190e6 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-09-30 +date: 2024-10-01 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 fe466f0106497..f934c96161da6 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-09-30 +date: 2024-10-01 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 271ef9cb39d7f..57f5e59ee54e1 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-09-30 +date: 2024-10-01 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 b57aec54fb781..1eee3d99d5543 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-09-30 +date: 2024-10-01 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 b12159bcddf8c..9ac1c5e2a497e 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-09-30 +date: 2024-10-01 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 75922418bef35..d225d68eba652 100644 --- a/api_docs/observability_a_i_assistant.devdocs.json +++ b/api_docs/observability_a_i_assistant.devdocs.json @@ -9520,7 +9520,15 @@ "text": "ChatCompletionErrorEvent" }, " | ", - "TokenCountEvent" + "TokenCountEvent", + " | ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.BufferFlushEvent", + "text": "BufferFlushEvent" + } ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", "deprecated": false, @@ -9567,7 +9575,15 @@ "text": "ChatCompletionChunkEvent" }, " | ", - "TokenCountEvent" + "TokenCountEvent", + " | ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.BufferFlushEvent", + "text": "BufferFlushEvent" + } ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", "deprecated": false, diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 6e48bd5310892..baae91ec81803 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-09-30 +date: 2024-10-01 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 478d83805ded2..ce9f06dfa77b5 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-09-30 +date: 2024-10-01 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 09e3b37e0994b..716495409af36 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-09-30 +date: 2024-10-01 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 af5d9242498fb..d47057e2bbf12 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-09-30 +date: 2024-10-01 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 a8d754fb07def..0b3a5b2e45690 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.devdocs.json b/api_docs/observability_shared.devdocs.json index 411e26945dba4..b62196dbdd307 100644 --- a/api_docs/observability_shared.devdocs.json +++ b/api_docs/observability_shared.devdocs.json @@ -3947,6 +3947,76 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "observabilityShared", + "id": "def-common.EntitiesInventoryLocatorDefinition", + "type": "Class", + "tags": [], + "label": "EntitiesInventoryLocatorDefinition", + "description": [], + "signature": [ + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.EntitiesInventoryLocatorDefinition", + "text": "EntitiesInventoryLocatorDefinition" + }, + " implements ", + { + "pluginId": "share", + "scope": "common", + "docId": "kibSharePluginApi", + "section": "def-common.LocatorDefinition", + "text": "LocatorDefinition" + }, + "<", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.SerializableRecord", + "text": "SerializableRecord" + }, + ">" + ], + "path": "x-pack/plugins/observability_solution/observability_shared/common/locators/entity_inventory/entity_inventory_locator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityShared", + "id": "def-common.EntitiesInventoryLocatorDefinition.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "\"ENTITY_INVENTORY_LOCATOR\"" + ], + "path": "x-pack/plugins/observability_solution/observability_shared/common/locators/entity_inventory/entity_inventory_locator.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityShared", + "id": "def-common.EntitiesInventoryLocatorDefinition.getLocation", + "type": "Function", + "tags": [], + "label": "getLocation", + "description": [], + "signature": [ + "() => Promise<{ app: string; path: string; state: {}; }>" + ], + "path": "x-pack/plugins/observability_solution/observability_shared/common/locators/entity_inventory/entity_inventory_locator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-common.FlamegraphLocatorDefinition", @@ -6601,6 +6671,51 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observabilityShared", + "id": "def-common.ENTITIES_INVENTORY_LOCATOR_ID", + "type": "string", + "tags": [], + "label": "ENTITIES_INVENTORY_LOCATOR_ID", + "description": [], + "signature": [ + "\"ENTITY_INVENTORY_LOCATOR\"" + ], + "path": "x-pack/plugins/observability_solution/observability_shared/common/locators/entity_inventory/entity_inventory_locator.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityShared", + "id": "def-common.EntitiesInventoryLocator", + "type": "Type", + "tags": [], + "label": "EntitiesInventoryLocator", + "description": [], + "signature": [ + { + "pluginId": "share", + "scope": "common", + "docId": "kibSharePluginApi", + "section": "def-common.LocatorPublic", + "text": "LocatorPublic" + }, + "<", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.SerializableRecord", + "text": "SerializableRecord" + }, + ">" + ], + "path": "x-pack/plugins/observability_solution/observability_shared/common/locators/entity_inventory/entity_inventory_locator.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-common.ERROR_CULPRIT", @@ -6826,6 +6941,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observabilityShared", + "id": "def-common.HOST_NAME", + "type": "string", + "tags": [], + "label": "HOST_NAME", + "description": [], + "signature": [ + "\"host.name\"" + ], + "path": "x-pack/plugins/observability_solution/observability_shared/common/field_names/elasticsearch.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-common.HOST_OS_PLATFORM", diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 41b83f009305c..d7869264cedd4 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 478 | 1 | 473 | 19 | +| 484 | 1 | 479 | 19 | ## Client diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index e60a1f050046c..1258bfe614189 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-09-30 +date: 2024-10-01 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 0759edc108820..46896024dac86 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-09-30 +date: 2024-10-01 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 a812ec47c62d5..144e1ad2111a3 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 53386 | 245 | 40009 | 1981 | +| 53450 | 245 | 40062 | 1980 | ## Plugin Directory @@ -158,7 +158,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin exposes and registers observability log consumption features. | 19 | 0 | 19 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 24 | 0 | 24 | 0 | -| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 478 | 1 | 473 | 19 | +| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 484 | 1 | 479 | 19 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 23 | 0 | 23 | 7 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds a standardized Presentation panel which allows any forward ref component to interface with various Kibana systems. | 11 | 0 | 11 | 4 | @@ -277,7 +277,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 62 | 0 | 17 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 74 | 1 | 74 | 0 | -| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 68 | 0 | 66 | 0 | +| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 74 | 0 | 72 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 41 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) | - | 9 | 0 | 4 | 0 | @@ -371,7 +371,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 7 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 54 | 7 | 54 | 6 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 15 | 0 | 15 | 1 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 496 | 2 | 193 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 530 | 2 | 216 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 96 | 0 | 83 | 10 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 46 | 0 | 45 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 2 | 0 | @@ -776,7 +776,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 42 | 0 | 28 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 59 | 0 | 50 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 9 | 0 | 8 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 165 | 0 | 90 | 2 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 183 | 0 | 108 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 18 | 0 | 17 | 5 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list and field stats which can be integrated into apps | 314 | 0 | 285 | 8 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 13 | 0 | 9 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 3c411143e6bc2..d3e9e9952a269 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-09-30 +date: 2024-10-01 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 c37ae92418cc0..ea40b232504af 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-09-30 +date: 2024-10-01 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 3930932cd4559..3f847ffa29d09 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-09-30 +date: 2024-10-01 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 71138344d5303..05d2ff7481b3b 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-09-30 +date: 2024-10-01 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 165ec64f812b9..cdbe5e0beba1d 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-09-30 +date: 2024-10-01 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 ed8f82d1e1fda..6c8d6189823df 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-09-30 +date: 2024-10-01 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 ecfd27575404a..e83018eca915d 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index d574c84e8ff7f..663f645639c31 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-09-30 +date: 2024-10-01 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 c5ff2853c1f1b..e5ea93d8745bf 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-09-30 +date: 2024-10-01 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 e085f0ff58bef..4bbc4276299f4 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-09-30 +date: 2024-10-01 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 152443f911f7e..23db480af11d1 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-09-30 +date: 2024-10-01 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 cb85671033386..819215de0acd7 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-09-30 +date: 2024-10-01 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 0f70d48b862eb..f642e3f2c1dac 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-09-30 +date: 2024-10-01 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 5a38434868201..16f2f9145dd5d 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-09-30 +date: 2024-10-01 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 0666295dde691..e493bcbcb7dd7 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-09-30 +date: 2024-10-01 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 8c9a9d5f008f4..57eb7e8393826 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-09-30 +date: 2024-10-01 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 8929a01aae630..adff5413e8295 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index 7e024597324a0..a3ecda9535694 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 63808cbaa0891..ce4b5836f797d 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index dc80035f89f06..5fba961b47c57 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index 8a8c3d1642603..a99dec00d605c 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 55de2c0c3aeb7..e84158310a65e 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index e4f8e7aa5e196..09d101c02590f 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-09-30 +date: 2024-10-01 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 0a6409f98ae58..1ce786ee12787 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-09-30 +date: 2024-10-01 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 23cda2a61ce08..b40f78850375b 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index e2dfdd33a7dab..0d7c4e49d2a24 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-09-30 +date: 2024-10-01 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 5523c1f940f06..890f79d18b7b5 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-09-30 +date: 2024-10-01 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 8383709fc6b3c..9e7193ae47373 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-09-30 +date: 2024-10-01 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 eeae132ef6b53..2b06d2416ce05 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-09-30 +date: 2024-10-01 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 5cbd6e28cce7f..a069838984e6e 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-09-30 +date: 2024-10-01 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 2ee08bacffcd0..8cc7095235cca 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-09-30 +date: 2024-10-01 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 1fab24248e431..0fc171cd65a01 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-09-30 +date: 2024-10-01 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 1479191871765..95d3fb2db8d41 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-09-30 +date: 2024-10-01 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 34e14029dea76..1b13dc2b1a51a 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-09-30 +date: 2024-10-01 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 3aa01b4222dc2..9821976429955 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-09-30 +date: 2024-10-01 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 5e1e89c153ade..09662fd4305f1 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-09-30 +date: 2024-10-01 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 45f32f25805a1..789f8fd4dca20 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-09-30 +date: 2024-10-01 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 8334becb04701..a03e152a73c8e 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-09-30 +date: 2024-10-01 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 653094e76024d..0e4bc42f5b3e2 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-09-30 +date: 2024-10-01 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 a596cca06552a..00378c1a14809 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-09-30 +date: 2024-10-01 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 2529c1593ee0b..3f4d31bafee30 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-09-30 +date: 2024-10-01 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 b3ae5fe918f3c..8beb088b1f01e 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-09-30 +date: 2024-10-01 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 ed97be0e59a5e..977d1f9dd93ab 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 43bd1340c50d0..17cf097f0e87d 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-09-30 +date: 2024-10-01 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 ed514a70e8f63..a0fa177db0f15 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-09-30 +date: 2024-10-01 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 71e722b0117b1..2e01cb896ef68 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-09-30 +date: 2024-10-01 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 9159ed2e6dcbb..52a3d3b74ba27 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-09-30 +date: 2024-10-01 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 52df3b914b3be..de6145d7f50e6 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-09-30 +date: 2024-10-01 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 1d5f7cd653be8..11682517241ec 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-09-30 +date: 2024-10-01 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 45317d8df3425..6d4f43f65e397 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-09-30 +date: 2024-10-01 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 fd319eafe595b..89ba7e2af7d99 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-09-30 +date: 2024-10-01 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 42b11395fead7..964244828057d 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-09-30 +date: 2024-10-01 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 8033db5116988..563b3f9c048ff 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-09-30 +date: 2024-10-01 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 04f3c093e845d..dd325efea54b9 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-09-30 +date: 2024-10-01 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 81eb182c0e99f..11e5a7b3e0528 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-09-30 +date: 2024-10-01 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 530ef57462fa5..0233ce9784368 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-09-30 +date: 2024-10-01 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 066241addf6bd..00a5ec129e57c 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-09-30 +date: 2024-10-01 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 d5fb3191150ee..787de382e04f2 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-09-30 +date: 2024-10-01 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 7cf44073fabb9..180f8b70539c4 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-09-30 +date: 2024-10-01 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 d2413ede759a6..0528133d7d8b4 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-09-30 +date: 2024-10-01 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 5d918e9b65c99..1b4210053ad15 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-09-30 +date: 2024-10-01 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 28b74ac21f59f..5ab20118f42f7 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-09-30 +date: 2024-10-01 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 1042bc5052d61..40508cdf5a138 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-09-30 +date: 2024-10-01 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 2a83e18fa1fcc..b7a84f83698a7 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-09-30 +date: 2024-10-01 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 54383966923b4..55eb18e178f3e 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-09-30 +date: 2024-10-01 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 eddfd2633ba70..1b64be0e76bdb 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-09-30 +date: 2024-10-01 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 5543b5f15529f..9f209eb1fd312 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-09-30 +date: 2024-10-01 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 bd2f8ad01e6f6..1b6b7804fe379 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-09-30 +date: 2024-10-01 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json';