From 7c79c0f431a339af6e62c62b68ccd01e7f3a6c8d Mon Sep 17 00:00:00 2001 From: Elena Stoeva <59341489+ElenaStoeva@users.noreply.github.com> Date: Thu, 15 Feb 2024 13:47:03 +0000 Subject: [PATCH 01/40] [Remote Clusters] Improve Connection mode form fields (#176547) Closes https://github.com/elastic/kibana/issues/162500 ## Summary This PR improves the Connection mode fields of the Remote cluster creation form on Cloud. Screenshot 2024-02-12 at 11 10 27 When we switch the toggle on: Screenshot 2024-02-12 at 11 13 01 **How to test:** These changes apply only for on-Cloud so here are instructions for testing them in a cloud deployment: 1. If you haven't done yet, configure Vault locally (https://docs.elastic.dev/ci/using-secrets#installing-vault). 2. Run `export VAULT_ADDR=https://secrets.elastic.co:8200` 3. Log into Vault: `vault login --method github` 4. Obtain the cloud deployment credentials: `vault read secret/kibana-issues/dev/cloud-deploy/kibana-pr-176547` 5. Access the CI Cloud deployment for this PR: https://kibana-pr-176547.kb.us-west2.gcp.elastic-cloud.com:9243/ 6. Log in with the obtained credentials. 7. Go to Stack Management -> Remote Clusters and start creating a new remote cluster. 8. Try different inputs in the Connection mode fields, click on "Show Request" and verify that the request is correct. 9. Verify that not adding a port to the remote address will result in the `9400` port in the request. 10. Verify that if the `https://` protocol is added to the remote address, it will be stripped in the request. 11. Verify that the Server name by default is equal to the host from the remote address unless you specify a different server name. 13. Verify that a missing remote address or one that has host with invalid characters results in an error message. 14. Start editing a created remote cluster and verify that the form is correctly filled. The self-managed version should not be affected by these changes. Run Es locally with `yarn es snapshot` and Kibana with `yarn start` and verify that the Connection mode fields look and behave in the same way as they do now. --- .../add/remote_clusters_add.test.ts | 45 +++-- .../edit/remote_clusters_edit.test.tsx | 26 ++- .../helpers/remote_clusters_actions.ts | 38 +++- .../components/cloud_url_help.tsx | 61 ------ .../components/connection_mode.tsx | 73 +++---- .../components/connection_mode_cloud.tsx | 175 +++++++++++++++++ .../components/proxy_connection.tsx | 178 +++++++----------- .../remote_cluster_form.tsx | 76 ++++---- .../remote_cluster_form/validators/index.ts | 8 +- .../validators/validate_cloud_url.test.ts | 110 ++++------- .../validators/validate_cloud_url.tsx | 58 +++--- .../validators/validate_cluster.tsx | 17 +- .../validators/validate_server_name.tsx | 22 --- .../translations/translations/fr-FR.json | 13 -- .../translations/translations/ja-JP.json | 13 -- .../translations/translations/zh-CN.json | 13 -- 16 files changed, 434 insertions(+), 492 deletions(-) delete mode 100644 x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/cloud_url_help.tsx create mode 100644 x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/connection_mode_cloud.tsx delete mode 100644 x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_server_name.tsx diff --git a/x-pack/plugins/remote_clusters/__jest__/client_integration/add/remote_clusters_add.test.ts b/x-pack/plugins/remote_clusters/__jest__/client_integration/add/remote_clusters_add.test.ts index 650d8b50625ab9..0a73eddd6e5c71 100644 --- a/x-pack/plugins/remote_clusters/__jest__/client_integration/add/remote_clusters_add.test.ts +++ b/x-pack/plugins/remote_clusters/__jest__/client_integration/add/remote_clusters_add.test.ts @@ -80,8 +80,8 @@ describe('Create Remote cluster', () => { expect(actions.saveButton.isDisabled()).toBe(true); }); - test('renders no switch for cloud url input and proxy address + server name input modes', () => { - expect(actions.cloudUrlSwitch.exists()).toBe(false); + test('renders no switch for cloud advanced options', () => { + expect(actions.cloudAdvancedOptionsSwitch.exists()).toBe(false); }); }); describe('on cloud', () => { @@ -93,19 +93,21 @@ describe('Create Remote cluster', () => { component.update(); }); - test('renders a switch between cloud url input and proxy address + server name input for proxy connection', () => { - expect(actions.cloudUrlSwitch.exists()).toBe(true); + test('TLS server name has optional label', () => { + actions.cloudAdvancedOptionsSwitch.toggle(); + expect(actions.tlsServerNameInput.getLabel()).toBe('TLS server name (optional)'); + }); + + test('renders a switch for advanced options', () => { + expect(actions.cloudAdvancedOptionsSwitch.exists()).toBe(true); }); test('renders no switch between sniff and proxy modes', () => { expect(actions.connectionModeSwitch.exists()).toBe(false); }); - test('defaults to cloud url input for proxy connection', () => { - expect(actions.cloudUrlSwitch.isChecked()).toBe(false); - }); - test('server name has no optional label', () => { - actions.cloudUrlSwitch.toggle(); - expect(actions.serverNameInput.getLabel()).toBe('Server name'); + + test('advanced options are initially disabled', () => { + expect(actions.cloudAdvancedOptionsSwitch.isChecked()).toBe(false); }); }); }); @@ -290,19 +292,22 @@ describe('Create Remote cluster', () => { component.update(); }); - test('cloud url is required since cloud url input is enabled by default', () => { + test('remote address is required', () => { actions.saveButton.click(); - expect(actions.getErrorMessages()).toContain('A url is required.'); + expect(actions.getErrorMessages()).toContain('A remote address is required.'); }); - test('proxy address and server name are required when cloud url input is disabled', () => { - actions.cloudUrlSwitch.toggle(); - actions.saveButton.click(); - expect(actions.getErrorMessages()).toEqual([ - 'Name is required.', - 'A proxy address is required.', - 'A server name is required.', - ]); + test('should only allow alpha-numeric characters and "-" (dash) in the remote address "host" part', async () => { + await actions.saveButton.click(); // display form errors + + const expectInvalidChar = (char: string) => { + actions.cloudRemoteAddressInput.setValue(`192.16${char}:3000`); + expect(actions.getErrorMessages()).toContain('Remote address is invalid.'); + }; + + [...NON_ALPHA_NUMERIC_CHARS, ...ACCENTED_CHARS] + .filter(notInArray(['-', '_', ':'])) + .forEach(expectInvalidChar); }); }); }); diff --git a/x-pack/plugins/remote_clusters/__jest__/client_integration/edit/remote_clusters_edit.test.tsx b/x-pack/plugins/remote_clusters/__jest__/client_integration/edit/remote_clusters_edit.test.tsx index d83e82397b19c2..c4c656bb646d5b 100644 --- a/x-pack/plugins/remote_clusters/__jest__/client_integration/edit/remote_clusters_edit.test.tsx +++ b/x-pack/plugins/remote_clusters/__jest__/client_integration/edit/remote_clusters_edit.test.tsx @@ -77,7 +77,7 @@ describe('Edit Remote cluster', () => { describe('on cloud', () => { const cloudUrl = 'cloud-url'; const defaultCloudPort = '9400'; - test('existing cluster that defaults to cloud url (default port)', async () => { + test('existing cluster that has the same TLS server name as the host in the remote address', async () => { const cluster: Cluster = { name: REMOTE_CLUSTER_EDIT_NAME, mode: 'proxy', @@ -92,16 +92,16 @@ describe('Edit Remote cluster', () => { }); component.update(); - expect(actions.cloudUrlInput.exists()).toBe(true); - expect(actions.cloudUrlInput.getValue()).toBe(cloudUrl); + expect(actions.cloudRemoteAddressInput.exists()).toBe(true); + expect(actions.cloudRemoteAddressInput.getValue()).toBe(`${cloudUrl}:${defaultCloudPort}`); + expect(actions.tlsServerNameInput.exists()).toBe(false); }); - test('existing cluster that defaults to manual input (non-default port)', async () => { + test("existing cluster that doesn't have a TLS server name", async () => { const cluster: Cluster = { name: REMOTE_CLUSTER_EDIT_NAME, mode: 'proxy', proxyAddress: `${cloudUrl}:9500`, - serverName: cloudUrl, securityModel: 'certificate', }; httpRequestsMockHelpers.setLoadRemoteClustersResponse([cluster]); @@ -111,13 +111,12 @@ describe('Edit Remote cluster', () => { }); component.update(); - expect(actions.cloudUrlInput.exists()).toBe(false); - - expect(actions.proxyAddressInput.exists()).toBe(true); - expect(actions.serverNameInput.exists()).toBe(true); + expect(actions.cloudRemoteAddressInput.exists()).toBe(true); + expect(actions.cloudRemoteAddressInput.getValue()).toBe(`${cloudUrl}:9500`); + expect(actions.tlsServerNameInput.exists()).toBe(true); }); - test('existing cluster that defaults to manual input (proxy address is different from server name)', async () => { + test('existing cluster that has remote address different from TLS server name)', async () => { const cluster: Cluster = { name: REMOTE_CLUSTER_EDIT_NAME, mode: 'proxy', @@ -132,10 +131,9 @@ describe('Edit Remote cluster', () => { }); component.update(); - expect(actions.cloudUrlInput.exists()).toBe(false); - - expect(actions.proxyAddressInput.exists()).toBe(true); - expect(actions.serverNameInput.exists()).toBe(true); + expect(actions.cloudRemoteAddressInput.exists()).toBe(true); + expect(actions.cloudRemoteAddressInput.getValue()).toBe(`${cloudUrl}:${defaultCloudPort}`); + expect(actions.tlsServerNameInput.exists()).toBe(true); }); }); }); diff --git a/x-pack/plugins/remote_clusters/__jest__/client_integration/helpers/remote_clusters_actions.ts b/x-pack/plugins/remote_clusters/__jest__/client_integration/helpers/remote_clusters_actions.ts index f17a790c65041a..f657058231a847 100644 --- a/x-pack/plugins/remote_clusters/__jest__/client_integration/helpers/remote_clusters_actions.ts +++ b/x-pack/plugins/remote_clusters/__jest__/client_integration/helpers/remote_clusters_actions.ts @@ -28,14 +28,15 @@ export interface RemoteClustersActions { toggle: () => void; isChecked: () => boolean; }; - cloudUrlSwitch: { + cloudAdvancedOptionsSwitch: { toggle: () => void; exists: () => boolean; isChecked: () => boolean; }; - cloudUrlInput: { + cloudRemoteAddressInput: { exists: () => boolean; getValue: () => string; + setValue: (remoteAddress: string) => void; }; seedsInput: { setValue: (seed: string) => void; @@ -49,6 +50,10 @@ export interface RemoteClustersActions { getLabel: () => string; exists: () => boolean; }; + tlsServerNameInput: { + getLabel: () => string; + exists: () => boolean; + }; isOnFirstStep: () => boolean; saveButton: { click: () => void; @@ -123,10 +128,10 @@ export const createRemoteClustersActions = (testBed: TestBed): RemoteClustersAct }; }; - const createCloudUrlSwitchActions = () => { - const cloudUrlSelector = 'remoteClusterFormCloudUrlToggle'; + const createCloudAdvancedOptionsSwitchActions = () => { + const cloudUrlSelector = 'remoteClusterFormCloudAdvancedOptionsToggle'; return { - cloudUrlSwitch: { + cloudAdvancedOptionsSwitch: { exists: () => exists(cloudUrlSelector), toggle: () => { act(() => { @@ -230,14 +235,26 @@ export const createRemoteClustersActions = (testBed: TestBed): RemoteClustersAct }; }; + const createTlsServerNameActions = () => { + const serverNameSelector = 'remoteClusterFormTLSServerNameFormRow'; + return { + tlsServerNameInput: { + getLabel: () => find(serverNameSelector).find('label').text(), + exists: () => exists(serverNameSelector), + }, + }; + }; + const globalErrorExists = () => exists('remoteClusterFormGlobalError'); - const createCloudUrlInputActions = () => { - const cloudUrlInputSelector = 'remoteClusterFormCloudUrlInput'; + const createCloudRemoteAddressInputActions = () => { + const cloudUrlInputSelector = 'remoteClusterFormRemoteAddressInput'; return { - cloudUrlInput: { + cloudRemoteAddressInput: { exists: () => exists(cloudUrlInputSelector), getValue: () => find(cloudUrlInputSelector).props().value, + setValue: (remoteAddress: string) => + form.setInputValue(cloudUrlInputSelector, remoteAddress), }, }; }; @@ -247,11 +264,12 @@ export const createRemoteClustersActions = (testBed: TestBed): RemoteClustersAct ...createNameInputActions(), ...createSkipUnavailableActions(), ...createConnectionModeActions(), - ...createCloudUrlSwitchActions(), + ...createCloudAdvancedOptionsSwitchActions(), ...createSeedsInputActions(), - ...createCloudUrlInputActions(), + ...createCloudRemoteAddressInputActions(), ...createProxyAddressActions(), ...createServerNameActions(), + ...createTlsServerNameActions(), ...createSetupTrustActions(), getErrorMessages: form.getErrorsMessages, globalErrorExists, diff --git a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/cloud_url_help.tsx b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/cloud_url_help.tsx deleted file mode 100644 index 504d77514e654a..00000000000000 --- a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/cloud_url_help.tsx +++ /dev/null @@ -1,61 +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, { FunctionComponent, useState } from 'react'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiLink, EuiPopover, EuiPopoverTitle, EuiText } from '@elastic/eui'; -import { useAppContext } from '../../../../app_context'; - -export const CloudUrlHelp: FunctionComponent = () => { - const [isOpen, setIsOpen] = useState(false); - const { cloudBaseUrl } = useAppContext(); - return ( - - { - setIsOpen(!isOpen); - }} - > - - - - } - isOpen={isOpen} - closePopover={() => setIsOpen(false)} - anchorPosition="upCenter" - > - - - - - - - - ), - elasticsearch: Elasticsearch, - }} - /> - - - ); -}; diff --git a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/connection_mode.tsx b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/connection_mode.tsx index 1808a519ccac67..f44f5ffc0cf9c1 100644 --- a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/connection_mode.tsx +++ b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/connection_mode.tsx @@ -8,12 +8,13 @@ import React, { FunctionComponent } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiDescribedFormGroup, EuiTitle, EuiFormRow, EuiSwitch, EuiSpacer } from '@elastic/eui'; +import { EuiDescribedFormGroup, EuiTitle, EuiFormRow, EuiSwitch } from '@elastic/eui'; import { SNIFF_MODE, PROXY_MODE } from '../../../../../../common/constants'; import { useAppContext } from '../../../../app_context'; import { ClusterErrors } from '../validators'; +import { ConnectionModeCloud } from './connection_mode_cloud'; import { SniffConnection } from './sniff_connection'; import { ProxyConnection } from './proxy_connection'; import { FormFields } from '../remote_cluster_form'; @@ -27,10 +28,12 @@ export interface Props { export const ConnectionMode: FunctionComponent = (props) => { const { fields, onFieldsChange } = props; - const { mode, cloudUrlEnabled } = fields; + const { mode } = fields; const { isCloudEnabled } = useAppContext(); - return ( + return isCloudEnabled ? ( + + ) : ( @@ -44,51 +47,27 @@ export const ConnectionMode: FunctionComponent = (props) => { } description={ <> - {isCloudEnabled ? ( - <> - - - - } - checked={!cloudUrlEnabled} - data-test-subj="remoteClusterFormCloudUrlToggle" - onChange={(e) => onFieldsChange({ cloudUrlEnabled: !e.target.checked })} - /> - - - - ) : ( - <> - + + + + } + checked={mode === PROXY_MODE} + data-test-subj="remoteClusterFormConnectionModeToggle" + onChange={(e) => + onFieldsChange({ mode: e.target.checked ? PROXY_MODE : SNIFF_MODE }) + } /> - - - } - checked={mode === PROXY_MODE} - data-test-subj="remoteClusterFormConnectionModeToggle" - onChange={(e) => - onFieldsChange({ mode: e.target.checked ? PROXY_MODE : SNIFF_MODE }) - } - /> - - - )} + + } fullWidth diff --git a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/connection_mode_cloud.tsx b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/connection_mode_cloud.tsx new file mode 100644 index 00000000000000..42dc257b4baf34 --- /dev/null +++ b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/connection_mode_cloud.tsx @@ -0,0 +1,175 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { FunctionComponent } from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; + +import { + EuiDescribedFormGroup, + EuiTitle, + EuiFormRow, + EuiSwitch, + EuiSpacer, + EuiFieldText, + EuiLink, + EuiFieldNumber, + EuiCode, +} from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; +import { proxySettingsUrl } from '../../../../services/documentation'; + +import { ClusterErrors } from '../validators'; +import { FormFields } from '../remote_cluster_form'; + +export interface Props { + fields: FormFields; + onFieldsChange: (fields: Partial) => void; + fieldsErrors: ClusterErrors; + areErrorsVisible: boolean; +} + +export const ConnectionModeCloud: FunctionComponent = (props) => { + const { fields, fieldsErrors, areErrorsVisible, onFieldsChange } = props; + const { cloudRemoteAddress, serverName, proxySocketConnections, cloudAdvancedOptionsEnabled } = + fields; + const { cloudRemoteAddress: cloudRemoteAddressError } = fieldsErrors; + + return ( + +

+ +

+ + } + description={ + <> + + + + } + checked={cloudAdvancedOptionsEnabled} + data-test-subj="remoteClusterFormCloudAdvancedOptionsToggle" + onChange={(e) => onFieldsChange({ cloudAdvancedOptionsEnabled: e.target.checked })} + /> + + + + } + fullWidth + > + + } + helpText={ + {'9400'}, + }} + /> + } + isInvalid={Boolean(areErrorsVisible && cloudRemoteAddressError)} + error={cloudRemoteAddressError} + fullWidth + > + onFieldsChange({ cloudRemoteAddress: e.target.value })} + isInvalid={Boolean(areErrorsVisible && cloudRemoteAddressError)} + data-test-subj="remoteClusterFormRemoteAddressInput" + fullWidth + /> + + + {cloudAdvancedOptionsEnabled && ( + <> + + } + helpText={ + + + + ), + }} + /> + } + fullWidth + > + onFieldsChange({ serverName: e.target.value })} + fullWidth + /> + + + + } + helpText={ + + } + fullWidth + > + onFieldsChange({ proxySocketConnections: Number(e.target.value) })} + fullWidth + /> + + + )} +
+ ); +}; diff --git a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/proxy_connection.tsx b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/proxy_connection.tsx index 2158b497016da5..f322aebee9d7ee 100644 --- a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/proxy_connection.tsx +++ b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/components/proxy_connection.tsx @@ -9,132 +9,84 @@ import React, { FunctionComponent } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { EuiFieldNumber, EuiFieldText, EuiFormRow, EuiLink } from '@elastic/eui'; -import { useAppContext } from '../../../../app_context'; import { proxySettingsUrl } from '../../../../services/documentation'; import { Props } from './connection_mode'; -import { CloudUrlHelp } from './cloud_url_help'; export const ProxyConnection: FunctionComponent = (props) => { const { fields, fieldsErrors, areErrorsVisible, onFieldsChange } = props; - const { isCloudEnabled } = useAppContext(); - const { proxyAddress, serverName, proxySocketConnections, cloudUrl, cloudUrlEnabled } = fields; - const { - proxyAddress: proxyAddressError, - serverName: serverNameError, - cloudUrl: cloudUrlError, - } = fieldsErrors; + const { proxyAddress, serverName, proxySocketConnections } = fields; + const { proxyAddress: proxyAddressError } = fieldsErrors; return ( <> - {cloudUrlEnabled ? ( - <> - - } - labelAppend={} - isInvalid={Boolean(areErrorsVisible && cloudUrlError)} - error={cloudUrlError} - fullWidth - helpText={ - - } - > - onFieldsChange({ cloudUrl: e.target.value })} - isInvalid={Boolean(areErrorsVisible && cloudUrlError)} - data-test-subj="remoteClusterFormCloudUrlInput" - fullWidth + <> + + } + helpText={ + - - - ) : ( - <> - - } - helpText={ - - } + } + isInvalid={Boolean(areErrorsVisible && proxyAddressError)} + error={proxyAddressError} + fullWidth + > + onFieldsChange({ proxyAddress: e.target.value })} isInvalid={Boolean(areErrorsVisible && proxyAddressError)} - error={proxyAddressError} + data-test-subj="remoteClusterFormProxyAddressInput" fullWidth - > - onFieldsChange({ proxyAddress: e.target.value })} - isInvalid={Boolean(areErrorsVisible && proxyAddressError)} - data-test-subj="remoteClusterFormProxyAddressInput" - fullWidth - /> - + /> + - - ) : ( - - ) - } - helpText={ - - - - ), - }} - /> - } - fullWidth - > - onFieldsChange({ serverName: e.target.value })} - isInvalid={Boolean(areErrorsVisible && serverNameError)} - fullWidth + - - - )} + } + helpText={ + + + + ), + }} + /> + } + fullWidth + > + onFieldsChange({ serverName: e.target.value })} + fullWidth + /> + + + { { ...defaultClusterValues, mode: defaultMode, - cloudUrl: convertProxyConnectionToCloudUrl(cluster), - cloudUrlEnabled: isCloudEnabled && isCloudUrlEnabled(cluster), + cloudRemoteAddress: cluster?.proxyAddress || '', + cloudAdvancedOptionsEnabled: isCloudAdvancedOptionsEnabled(cluster), }, cluster ); @@ -123,14 +125,33 @@ export class RemoteClusterForm extends Component { onFieldsChange = (changedFields: Partial) => { const { isCloudEnabled } = this.context; - // when cloudUrl changes, fill proxy address and server name - const { cloudUrl } = changedFields; - if (cloudUrl) { - const { proxyAddress, serverName } = convertCloudUrlToProxyConnection(cloudUrl); + // when cloud remote address changes, fill proxy address and server name + const { cloudRemoteAddress, cloudAdvancedOptionsEnabled } = changedFields; + if (cloudRemoteAddress) { + const { proxyAddress, serverName } = + convertCloudRemoteAddressToProxyConnection(cloudRemoteAddress); + // Only change the server name if the advanced options are not currently open + if (this.state.fields.cloudAdvancedOptionsEnabled) { + changedFields = { + ...changedFields, + proxyAddress, + }; + } else { + changedFields = { + ...changedFields, + proxyAddress, + serverName, + }; + } + } + + // If we switch off the advanced options, revert the server name to + // the host name from the proxy address + if (cloudAdvancedOptionsEnabled === false) { changedFields = { ...changedFields, - proxyAddress, - serverName, + serverName: this.state.fields.proxyAddress?.split(':')[0], + proxySocketConnections: defaultClusterValues.proxySocketConnections, }; } @@ -416,13 +437,7 @@ export class RemoteClusterForm extends Component { renderErrors = () => { const { areErrorsVisible, - fieldsErrors: { - name: errorClusterName, - seeds: errorsSeeds, - proxyAddress: errorProxyAddress, - serverName: errorServerName, - cloudUrl: errorCloudUrl, - }, + fieldsErrors: { name: errorClusterName, seeds: errorsSeeds, proxyAddress: errorProxyAddress }, } = this.state; const hasErrors = this.hasErrors(); @@ -463,29 +478,6 @@ export class RemoteClusterForm extends Component { }); } - if (errorServerName) { - errorExplanations.push({ - key: 'serverNameExplanation', - field: i18n.translate( - 'xpack.remoteClusters.remoteClusterForm.inputServerNameErrorMessage', - { - defaultMessage: 'The "Server name" field is invalid.', - } - ), - error: errorServerName, - }); - } - - if (errorCloudUrl) { - errorExplanations.push({ - key: 'cloudUrlExplanation', - field: i18n.translate('xpack.remoteClusters.remoteClusterForm.inputcloudUrlErrorMessage', { - defaultMessage: 'The "Elasticsearch endpoint URL" field is invalid.', - }), - error: errorCloudUrl, - }); - } - const messagesToBeRendered = errorExplanations.length && (
diff --git a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/index.ts b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/index.ts index a695b95b8de859..6a710dae744bad 100644 --- a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/index.ts +++ b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/index.ts @@ -9,12 +9,10 @@ export { validateName } from './validate_name'; export { validateProxy } from './validate_proxy'; export { validateSeeds } from './validate_seeds'; export { validateSeed } from './validate_seed'; -export { validateServerName } from './validate_server_name'; export type { ClusterErrors } from './validate_cluster'; export { validateCluster } from './validate_cluster'; export { - isCloudUrlEnabled, - validateCloudUrl, - convertProxyConnectionToCloudUrl, - convertCloudUrlToProxyConnection, + isCloudAdvancedOptionsEnabled, + validateCloudRemoteAddress, + convertCloudRemoteAddressToProxyConnection, } from './validate_cloud_url'; diff --git a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_cloud_url.test.ts b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_cloud_url.test.ts index 5990b29474da2d..5bdfd23f5cfdb6 100644 --- a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_cloud_url.test.ts +++ b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_cloud_url.test.ts @@ -6,135 +6,93 @@ */ import { - isCloudUrlEnabled, - validateCloudUrl, - convertCloudUrlToProxyConnection, - convertProxyConnectionToCloudUrl, + isCloudAdvancedOptionsEnabled, + validateCloudRemoteAddress, + convertCloudRemoteAddressToProxyConnection, i18nTexts, } from './validate_cloud_url'; -describe('Cloud url', () => { +describe('Cloud remote address', () => { describe('validation', () => { it('errors when the url is empty', () => { - const actual = validateCloudUrl(''); + const actual = validateCloudRemoteAddress(''); expect(actual).toBe(i18nTexts.urlEmpty); }); it('errors when the url is invalid', () => { - const actual = validateCloudUrl('invalid%url'); + const actual = validateCloudRemoteAddress('invalid%url'); expect(actual).toBe(i18nTexts.urlInvalid); }); }); - describe('is cloud url', () => { - it('true for a new cluster', () => { - const actual = isCloudUrlEnabled(); - expect(actual).toBe(true); + describe('is advanced options toggle enabled', () => { + it('false for a new cluster', () => { + const actual = isCloudAdvancedOptionsEnabled(); + expect(actual).toBe(false); }); - it('true when proxy connection is empty', () => { - const actual = isCloudUrlEnabled({ + it('false when proxy address is empty', () => { + const actual = isCloudAdvancedOptionsEnabled({ name: 'test', proxyAddress: '', - serverName: '', securityModel: 'certificate', }); - expect(actual).toBe(true); + expect(actual).toBe(false); }); - it('true when proxy address is the same as server name and default port', () => { - const actual = isCloudUrlEnabled({ + it('false when proxy address is the same as server name', () => { + const actual = isCloudAdvancedOptionsEnabled({ name: 'test', proxyAddress: 'some-proxy:9400', serverName: 'some-proxy', securityModel: 'certificate', }); - expect(actual).toBe(true); + expect(actual).toBe(false); }); - it('false when proxy address is the same as server name but not default port', () => { - const actual = isCloudUrlEnabled({ + it('true when proxy address is not the same as server name', () => { + const actual = isCloudAdvancedOptionsEnabled({ name: 'test', - proxyAddress: 'some-proxy:1234', - serverName: 'some-proxy', + proxyAddress: 'some-proxy:9400', + serverName: 'some-server-name', securityModel: 'certificate', }); - expect(actual).toBe(false); + expect(actual).toBe(true); }); - it('true when proxy address is not the same as server name', () => { - const actual = isCloudUrlEnabled({ + it('true when socket connections is not the default value', () => { + const actual = isCloudAdvancedOptionsEnabled({ name: 'test', proxyAddress: 'some-proxy:9400', - serverName: 'some-server-name', + serverName: 'some-proxy-name', + proxySocketConnections: 19, securityModel: 'certificate', }); - expect(actual).toBe(false); + expect(actual).toBe(true); }); }); - describe('conversion from cloud url', () => { + describe('conversion from cloud remote address', () => { it('empty url to empty proxy connection values', () => { - const actual = convertCloudUrlToProxyConnection(''); + const actual = convertCloudRemoteAddressToProxyConnection(''); expect(actual).toEqual({ proxyAddress: '', serverName: '' }); }); it('url with protocol and port to proxy connection values', () => { - const actual = convertCloudUrlToProxyConnection('http://test.com:1234'); - expect(actual).toEqual({ proxyAddress: 'test.com:9400', serverName: 'test.com' }); + const actual = convertCloudRemoteAddressToProxyConnection('http://test.com:1234'); + expect(actual).toEqual({ proxyAddress: 'test.com:1234', serverName: 'test.com' }); }); it('url with protocol and no port to proxy connection values', () => { - const actual = convertCloudUrlToProxyConnection('http://test.com'); + const actual = convertCloudRemoteAddressToProxyConnection('http://test.com'); expect(actual).toEqual({ proxyAddress: 'test.com:9400', serverName: 'test.com' }); }); it('url with no protocol to proxy connection values', () => { - const actual = convertCloudUrlToProxyConnection('test.com'); + const actual = convertCloudRemoteAddressToProxyConnection('test.com'); expect(actual).toEqual({ proxyAddress: 'test.com:9400', serverName: 'test.com' }); }); + it('invalid url to empty proxy connection values', () => { - const actual = convertCloudUrlToProxyConnection('invalid%url'); + const actual = convertCloudRemoteAddressToProxyConnection('invalid%url'); expect(actual).toEqual({ proxyAddress: '', serverName: '' }); }); }); - - describe('conversion to cloud url', () => { - it('empty proxy address to empty cloud url', () => { - const actual = convertProxyConnectionToCloudUrl({ - name: 'test', - proxyAddress: '', - serverName: 'test', - securityModel: 'certificate', - }); - expect(actual).toEqual(''); - }); - - it('empty server name to empty cloud url', () => { - const actual = convertProxyConnectionToCloudUrl({ - name: 'test', - proxyAddress: 'test', - serverName: '', - securityModel: 'certificate', - }); - expect(actual).toEqual(''); - }); - - it('different proxy address and server name to empty cloud url', () => { - const actual = convertProxyConnectionToCloudUrl({ - name: 'test', - proxyAddress: 'test', - serverName: 'another-test', - securityModel: 'certificate', - }); - expect(actual).toEqual(''); - }); - - it('valid proxy connection to cloud url', () => { - const actual = convertProxyConnectionToCloudUrl({ - name: 'test', - proxyAddress: 'test-proxy:9400', - serverName: 'test-proxy', - securityModel: 'certificate', - }); - expect(actual).toEqual('test-proxy'); - }); - }); }); diff --git a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_cloud_url.tsx b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_cloud_url.tsx index deb0148f36edfb..54f050a789b9fe 100644 --- a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_cloud_url.tsx +++ b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_cloud_url.tsx @@ -13,14 +13,14 @@ import { isAddressValid } from './validate_address'; export const i18nTexts = { urlEmpty: ( ), urlInvalid: ( ), }; @@ -28,20 +28,22 @@ export const i18nTexts = { const CLOUD_DEFAULT_PROXY_PORT = '9400'; const EMPTY_PROXY_VALUES = { proxyAddress: '', serverName: '' }; const PROTOCOL_REGEX = new RegExp(/^https?:\/\//); +const DEFAULT_SOCKET_CONNECTIONS = 18; -export const isCloudUrlEnabled = (cluster?: Cluster): boolean => { - // enable cloud url for new clusters +export const isCloudAdvancedOptionsEnabled = (cluster?: Cluster): boolean => { + // The toggle is switched off by default if (!cluster) { - return true; + return false; } - const { proxyAddress, serverName } = cluster; - if (!proxyAddress && !serverName) { - return true; + const { proxyAddress, serverName, proxySocketConnections } = cluster; + if (!proxyAddress) { + return false; } - const portParts = (proxyAddress ?? '').split(':'); - const proxyAddressWithoutPort = portParts[0]; - const port = portParts[1]; - return port === CLOUD_DEFAULT_PROXY_PORT && proxyAddressWithoutPort === serverName; + const proxyAddressWithoutPort = (proxyAddress ?? '').split(':')[0]; + return ( + proxyAddressWithoutPort !== serverName || + (proxySocketConnections != null && proxySocketConnections !== DEFAULT_SOCKET_CONNECTIONS) + ); }; const formatUrl = (url: string) => { @@ -51,29 +53,23 @@ const formatUrl = (url: string) => { return url; }; -export const convertProxyConnectionToCloudUrl = (cluster?: Cluster): string => { - if (!isCloudUrlEnabled(cluster)) { - return ''; - } - return cluster?.serverName ?? ''; -}; -export const convertCloudUrlToProxyConnection = ( - cloudUrl: string = '' -): { proxyAddress: string; serverName: string } => { - cloudUrl = formatUrl(cloudUrl); - if (!cloudUrl || !isAddressValid(cloudUrl)) { +export const convertCloudRemoteAddressToProxyConnection = (url: string) => { + url = formatUrl(url); + if (!url || !isAddressValid(url)) { return EMPTY_PROXY_VALUES; } - const address = cloudUrl.split(':')[0]; - return { proxyAddress: `${address}:${CLOUD_DEFAULT_PROXY_PORT}`, serverName: address }; + const host = url.split(':')[0]; + const port = url.split(':')[1]; + const proxyAddress = port ? url : `${host}:${CLOUD_DEFAULT_PROXY_PORT}`; + return { proxyAddress, serverName: host }; }; -export const validateCloudUrl = (cloudUrl: string): JSX.Element | null => { - if (!cloudUrl) { +export const validateCloudRemoteAddress = (url?: string): JSX.Element | null => { + if (!url) { return i18nTexts.urlEmpty; } - cloudUrl = formatUrl(cloudUrl); - if (!isAddressValid(cloudUrl)) { + url = formatUrl(url); + if (!isAddressValid(url)) { return i18nTexts.urlInvalid; } return null; diff --git a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_cluster.tsx b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_cluster.tsx index e0fa434f21d5c7..aba0b0462cdf51 100644 --- a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_cluster.tsx +++ b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_cluster.tsx @@ -9,8 +9,7 @@ import { validateName } from './validate_name'; import { PROXY_MODE, SNIFF_MODE } from '../../../../../../common/constants'; import { validateSeeds } from './validate_seeds'; import { validateProxy } from './validate_proxy'; -import { validateServerName } from './validate_server_name'; -import { validateCloudUrl } from './validate_cloud_url'; +import { validateCloudRemoteAddress } from './validate_cloud_url'; import { FormFields } from '../remote_cluster_form'; type ClusterError = JSX.Element | null; @@ -19,21 +18,15 @@ export interface ClusterErrors { name?: ClusterError; seeds?: ClusterError; proxyAddress?: ClusterError; - serverName?: ClusterError; - cloudUrl?: ClusterError; + cloudRemoteAddress?: ClusterError; } export const validateCluster = (fields: FormFields, isCloudEnabled: boolean): ClusterErrors => { - const { name, seeds = [], mode, proxyAddress, serverName, cloudUrlEnabled, cloudUrl } = fields; + const { name, seeds = [], mode, proxyAddress, cloudRemoteAddress } = fields; return { name: validateName(name), seeds: mode === SNIFF_MODE ? validateSeeds(seeds) : null, - proxyAddress: !cloudUrlEnabled && mode === PROXY_MODE ? validateProxy(proxyAddress) : null, - // server name is only required in cloud when proxy mode is enabled - serverName: - !cloudUrlEnabled && isCloudEnabled && mode === PROXY_MODE - ? validateServerName(serverName) - : null, - cloudUrl: cloudUrlEnabled ? validateCloudUrl(cloudUrl) : null, + proxyAddress: mode === PROXY_MODE ? validateProxy(proxyAddress) : null, + cloudRemoteAddress: isCloudEnabled ? validateCloudRemoteAddress(cloudRemoteAddress) : null, }; }; diff --git a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_server_name.tsx b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_server_name.tsx deleted file mode 100644 index eb110f75e9e15b..00000000000000 --- a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/validators/validate_server_name.tsx +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { FormattedMessage } from '@kbn/i18n-react'; - -export function validateServerName(serverName?: string) { - if (!serverName || !serverName.trim()) { - return ( - - ); - } - - return null; -} diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index c0b43ad512382e..05aff9e3894de1 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -29666,7 +29666,6 @@ "xpack.remoteClusters.detailPanel.deprecatedSettingsMessage": "{editLink} pour mettre à jour les paramètres.", "xpack.remoteClusters.editAction.failedDefaultErrorMessage": "La requête a échoué avec une erreur {statusCode}. {message}", "xpack.remoteClusters.form.errors.illegalCharacters": "Supprimez {characterListLength, plural, one {le caractère} many {les caractères} other {les caractères}} {characterList} du nom.", - "xpack.remoteClusters.remoteClusterForm.cloudUrlHelp.stepOneText": "Ouvrez le {deploymentsLink}, sélectionnez le déploiement distant et copiez l'URL de point de terminaison {elasticsearch}.", "xpack.remoteClusters.remoteClusterForm.fieldSeedsHelpText": "Adresse IP ou nom d'hôte, suivi du {transportPort} du cluster distant. Spécifiez les différents nœuds initiaux afin que la découverte n'échoue pas si un nœud n'est pas disponible.", "xpack.remoteClusters.remoteClusterForm.fieldServerNameHelpText": "Chaîne envoyée dans le champ server_name de l'extension d'indication de nom du serveur TLS si TLS est activé. {learnMoreLink}", "xpack.remoteClusters.remoteClusterForm.nextButtonLabel": "{isEditMode, select, true {Enregistrer} other {Suivant}}", @@ -29684,8 +29683,6 @@ "xpack.remoteClusters.addTitle": "Ajouter un cluster distant", "xpack.remoteClusters.appName": "Clusters distants", "xpack.remoteClusters.appTitle": "Clusters distants", - "xpack.remoteClusters.cloudDeploymentForm.urlInvalidError": "L'URL n'est pas valide", - "xpack.remoteClusters.cloudDeploymentForm.urlRequiredError": "Une URL est requise.", "xpack.remoteClusters.clusterWizard.addConnectionInfoLabel": "Ajouter des informations de connexion", "xpack.remoteClusters.clusterWizard.setupTrustLabel": "Établir la confiance", "xpack.remoteClusters.clusterWizard.trustStep.backButtonLabel": "Retour", @@ -29749,19 +29746,13 @@ "xpack.remoteClusters.form.errors.illegalSpace": "Les espaces ne sont pas autorisés dans le nom.", "xpack.remoteClusters.form.errors.nameMissing": "Le nom est requis.", "xpack.remoteClusters.form.errors.seedMissing": "Au moins un nœud initial est requis.", - "xpack.remoteClusters.form.errors.serverNameMissing": "Un nom de serveur est requis.", "xpack.remoteClusters.licenseCheckErrorMessage": "La vérification de la licence a échoué", "xpack.remoteClusters.listBreadcrumbTitle": "Clusters distants", "xpack.remoteClusters.readDocsButtonLabel": "Documents du cluster distant", "xpack.remoteClusters.refreshAction.errorTitle": "Erreur lors de l'actualisation des clusters distants", "xpack.remoteClusters.remoteClusterForm.addressError.invalidPortMessage": "Un port est requis.", "xpack.remoteClusters.remoteClusterForm.cancelButtonLabel": "Annuler", - "xpack.remoteClusters.remoteClusterForm.cloudUrlHelp.buttonLabel": "Besoin d'aide ?", - "xpack.remoteClusters.remoteClusterForm.cloudUrlHelp.popoverTitle": "Comment trouver votre URL de point de terminaison Elasticsearch", - "xpack.remoteClusters.remoteClusterForm.cloudUrlHelpModal.deploymentsLink": "page des déploiements", "xpack.remoteClusters.remoteClusterForm.errorTitle": "Il vous faut inspecter certains champs.", - "xpack.remoteClusters.remoteClusterForm.fieldCloudUrlHelpText": "Les valeurs de protocole (https://) et de port sont facultatives.", - "xpack.remoteClusters.remoteClusterForm.fieldCloudUrlLabel": "URL de point de terminaison Elasticsearch", "xpack.remoteClusters.remoteClusterForm.fieldModeLabel": "Utiliser le mode proxy", "xpack.remoteClusters.remoteClusterForm.fieldNameLabel": "Nom", "xpack.remoteClusters.remoteClusterForm.fieldNameLabelHelpText": "Doit contenir uniquement des lettres, chiffres, traits de soulignement et tirets.", @@ -29775,18 +29766,14 @@ "xpack.remoteClusters.remoteClusterForm.fieldSeedsPlaceholder": "host:port", "xpack.remoteClusters.remoteClusterForm.fieldServerNameHelpText.learnMoreLinkLabel": "En savoir plus.", "xpack.remoteClusters.remoteClusterForm.fieldServerNameOptionalLabel": "Nom du serveur (facultatif)", - "xpack.remoteClusters.remoteClusterForm.fieldServerNameRequiredLabel": "Nom du serveur", "xpack.remoteClusters.remoteClusterForm.fieldSocketConnectionsHelpText": "Nombre de connexions à ouvrir par cluster distant.", "xpack.remoteClusters.remoteClusterForm.hideRequestButtonLabel": "Masquer la requête", - "xpack.remoteClusters.remoteClusterForm.inputcloudUrlErrorMessage": "Le champ \"URL de point de terminaison Elasticsearch\" n'est pas valide.", "xpack.remoteClusters.remoteClusterForm.inputNameErrorMessage": "Le champ \"Nom\" n'est pas valide.", "xpack.remoteClusters.remoteClusterForm.inputProxyErrorMessage": "Le champ \"Adresse proxy\" n'est pas valide.", "xpack.remoteClusters.remoteClusterForm.inputSeedsErrorMessage": "Le champ \"Nœuds initiaux\" n'est pas valide.", - "xpack.remoteClusters.remoteClusterForm.inputServerNameErrorMessage": "Le champ \"Nom du serveur\" n'est pas valide.", "xpack.remoteClusters.remoteClusterForm.localSeedError.duplicateMessage": "Les nœuds initiaux en double ne sont pas autorisés.\"", "xpack.remoteClusters.remoteClusterForm.localSeedError.invalidCharactersMessage": "Le nœud initial doit utiliser le format host:port. Exemple : 127.0.0.1:9400, localhost:9400. Les hôtes ne peuvent comprendre que des lettres, des chiffres et des tirets.", "xpack.remoteClusters.remoteClusterForm.localSeedError.invalidPortMessage": "Un port est requis.", - "xpack.remoteClusters.remoteClusterForm.manualModeFieldLabel": "Entrer manuellement l'adresse proxy et le nom du serveur", "xpack.remoteClusters.remoteClusterForm.proxyError.invalidCharactersMessage": "L'adresse doit utiliser le format host:port. Exemple : 127.0.0.1:9400, localhost:9400. Les hôtes ne peuvent comprendre que des lettres, des chiffres et des tirets.", "xpack.remoteClusters.remoteClusterForm.proxyError.missingProxyMessage": "Une adresse proxy est requise.", "xpack.remoteClusters.remoteClusterForm.sectionModeCloudDescription": "Configurez automatiquement le cluster distant à l'aide de l'URL de point de terminaison Elasticsearch du déploiement distant ou entrez l'adresse proxy et le nom du serveur manuellement.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index de53645abf2c93..ae652805fe4755 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -29667,7 +29667,6 @@ "xpack.remoteClusters.detailPanel.deprecatedSettingsMessage": "設定を更新するための{editLink}。", "xpack.remoteClusters.editAction.failedDefaultErrorMessage": "{statusCode}エラーでリクエストが失敗しました。{message}", "xpack.remoteClusters.form.errors.illegalCharacters": "名前から{characterListLength, plural, other {文字}}{characterList}を削除します。", - "xpack.remoteClusters.remoteClusterForm.cloudUrlHelp.stepOneText": "{deploymentsLink}を開き、リモート配置を選択し、{elasticsearch}のエンドポイントURLをコピーします。", "xpack.remoteClusters.remoteClusterForm.fieldSeedsHelpText": "リモートクラスターの{transportPort}の前にくるIPアドレスまたはホスト名です。ノードが利用不能な場合に発見が失敗しないように複数のシードノードを指定します。", "xpack.remoteClusters.remoteClusterForm.fieldServerNameHelpText": "TLSが有効な場合にTLSサーバー名表示拡張のserver_nameフィールドで送信される文字列。{learnMoreLink}", "xpack.remoteClusters.remoteClusterForm.nextButtonLabel": "{isEditMode, select, true {保存} other {次へ}}", @@ -29685,8 +29684,6 @@ "xpack.remoteClusters.addTitle": "リモートクラスターを追加", "xpack.remoteClusters.appName": "リモートクラスター", "xpack.remoteClusters.appTitle": "リモートクラスター", - "xpack.remoteClusters.cloudDeploymentForm.urlInvalidError": "URLが無効です", - "xpack.remoteClusters.cloudDeploymentForm.urlRequiredError": "URLは必須です。", "xpack.remoteClusters.clusterWizard.addConnectionInfoLabel": "接続情報を追加", "xpack.remoteClusters.clusterWizard.setupTrustLabel": "信頼を確立", "xpack.remoteClusters.clusterWizard.trustStep.backButtonLabel": "戻る", @@ -29750,19 +29747,13 @@ "xpack.remoteClusters.form.errors.illegalSpace": "名前にスペースは使用できません。", "xpack.remoteClusters.form.errors.nameMissing": "名前が必要です。", "xpack.remoteClusters.form.errors.seedMissing": "シードノードが最低 1 つ必要です。", - "xpack.remoteClusters.form.errors.serverNameMissing": "サーバー名が必要です。", "xpack.remoteClusters.licenseCheckErrorMessage": "ライセンス確認失敗", "xpack.remoteClusters.listBreadcrumbTitle": "リモートクラスター", "xpack.remoteClusters.readDocsButtonLabel": "リモートクラスタードキュメント", "xpack.remoteClusters.refreshAction.errorTitle": "リモートクラスターの更新中にエラーが発生", "xpack.remoteClusters.remoteClusterForm.addressError.invalidPortMessage": "ポートが必要です。", "xpack.remoteClusters.remoteClusterForm.cancelButtonLabel": "キャンセル", - "xpack.remoteClusters.remoteClusterForm.cloudUrlHelp.buttonLabel": "ヘルプが必要な場合", - "xpack.remoteClusters.remoteClusterForm.cloudUrlHelp.popoverTitle": "ElasticsearchエンドポイントURLを見つける方法", - "xpack.remoteClusters.remoteClusterForm.cloudUrlHelpModal.deploymentsLink": "デプロイページ", "xpack.remoteClusters.remoteClusterForm.errorTitle": "一部のフィールドでは注意が必要です。", - "xpack.remoteClusters.remoteClusterForm.fieldCloudUrlHelpText": "プロトコル(https://)とポート値は任意です。", - "xpack.remoteClusters.remoteClusterForm.fieldCloudUrlLabel": "ElasticsearchエンドポイントURL", "xpack.remoteClusters.remoteClusterForm.fieldModeLabel": "プロキシモードを使用", "xpack.remoteClusters.remoteClusterForm.fieldNameLabel": "名前", "xpack.remoteClusters.remoteClusterForm.fieldNameLabelHelpText": "文字、数字、アンダースコア、ハイフンのみ使用できます。", @@ -29776,18 +29767,14 @@ "xpack.remoteClusters.remoteClusterForm.fieldSeedsPlaceholder": "ホスト:ポート", "xpack.remoteClusters.remoteClusterForm.fieldServerNameHelpText.learnMoreLinkLabel": "詳細情報", "xpack.remoteClusters.remoteClusterForm.fieldServerNameOptionalLabel": "サーバー名(任意)", - "xpack.remoteClusters.remoteClusterForm.fieldServerNameRequiredLabel": "サーバー名", "xpack.remoteClusters.remoteClusterForm.fieldSocketConnectionsHelpText": "リモートクラスターごとに開く接続の数。", "xpack.remoteClusters.remoteClusterForm.hideRequestButtonLabel": "リクエストを非表示", - "xpack.remoteClusters.remoteClusterForm.inputcloudUrlErrorMessage": "「ElasticsearchエンドポイントURL」フィールドが無効です。", "xpack.remoteClusters.remoteClusterForm.inputNameErrorMessage": "「名前」フィールドが無効です。", "xpack.remoteClusters.remoteClusterForm.inputProxyErrorMessage": "「プロキシアドレス」フィールドが無効です。", "xpack.remoteClusters.remoteClusterForm.inputSeedsErrorMessage": "「シードノード」フィールドが無効です。", - "xpack.remoteClusters.remoteClusterForm.inputServerNameErrorMessage": "「サーバー名」フィールドが無効です。", "xpack.remoteClusters.remoteClusterForm.localSeedError.duplicateMessage": "重複シードノードは使用できません。`", "xpack.remoteClusters.remoteClusterForm.localSeedError.invalidCharactersMessage": "シードノードはホストポートのフォーマットを使用する必要があります。例:127.0.0.1:9400、localhost:9400ホストには文字、数字、ハイフンのみが使用できます。", "xpack.remoteClusters.remoteClusterForm.localSeedError.invalidPortMessage": "ポートが必要です。", - "xpack.remoteClusters.remoteClusterForm.manualModeFieldLabel": "手動でプロキシアドレスとサーバー名を入力", "xpack.remoteClusters.remoteClusterForm.proxyError.invalidCharactersMessage": "アドレスはホスト:ポートの形式にする必要があります。例:127.0.0.1:9400、localhost:9400ホストには文字、数字、ハイフンのみが使用できます。", "xpack.remoteClusters.remoteClusterForm.proxyError.missingProxyMessage": "プロキシアドレスが必要です。", "xpack.remoteClusters.remoteClusterForm.sectionModeCloudDescription": "リモートデプロイのElasticsearchエンドポイントURLを使用して、リモートクラスターを自動的に構成するか、プロキシアドレスとサーバー名を手動で入力します。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index d155530f9d158d..f51c0039ff8c92 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -29651,7 +29651,6 @@ "xpack.remoteClusters.detailPanel.deprecatedSettingsMessage": "{editLink}以更新设置。", "xpack.remoteClusters.editAction.failedDefaultErrorMessage": "请求失败,显示 {statusCode} 错误。{message}", "xpack.remoteClusters.form.errors.illegalCharacters": "从名称中删除{characterListLength, plural, other {字符}} {characterList}。", - "xpack.remoteClusters.remoteClusterForm.cloudUrlHelp.stepOneText": "打开 {deploymentsLink},选择远程部署并复制 {elasticsearch} 终端 URL。", "xpack.remoteClusters.remoteClusterForm.fieldSeedsHelpText": "IP 地址或主机名,后跟远程集群的 {transportPort}。指定多个种子节点,以便在节点不可用时发现不会失败。", "xpack.remoteClusters.remoteClusterForm.fieldServerNameHelpText": "启用 TLS 时在 TLS 服务器名称指示扩展的 server_name 字段中发送的字符串。{learnMoreLink}", "xpack.remoteClusters.remoteClusterForm.nextButtonLabel": "{isEditMode, select, true {保存} other {下一步}}", @@ -29669,8 +29668,6 @@ "xpack.remoteClusters.addTitle": "添加远程集群", "xpack.remoteClusters.appName": "远程集群", "xpack.remoteClusters.appTitle": "远程集群", - "xpack.remoteClusters.cloudDeploymentForm.urlInvalidError": "URL 无效", - "xpack.remoteClusters.cloudDeploymentForm.urlRequiredError": "URL 必填。", "xpack.remoteClusters.clusterWizard.addConnectionInfoLabel": "添加连接信息", "xpack.remoteClusters.clusterWizard.setupTrustLabel": "建立信任", "xpack.remoteClusters.clusterWizard.trustStep.backButtonLabel": "返回", @@ -29734,19 +29731,13 @@ "xpack.remoteClusters.form.errors.illegalSpace": "名称中不允许使用空格。", "xpack.remoteClusters.form.errors.nameMissing": "“名称”必填。", "xpack.remoteClusters.form.errors.seedMissing": "至少需要一个种子节点。", - "xpack.remoteClusters.form.errors.serverNameMissing": "服务器名必填。", "xpack.remoteClusters.licenseCheckErrorMessage": "许可证检查失败", "xpack.remoteClusters.listBreadcrumbTitle": "远程集群", "xpack.remoteClusters.readDocsButtonLabel": "远程集群文档", "xpack.remoteClusters.refreshAction.errorTitle": "刷新远程集群时出错", "xpack.remoteClusters.remoteClusterForm.addressError.invalidPortMessage": "端口必填。", "xpack.remoteClusters.remoteClusterForm.cancelButtonLabel": "取消", - "xpack.remoteClusters.remoteClusterForm.cloudUrlHelp.buttonLabel": "需要帮助?", - "xpack.remoteClusters.remoteClusterForm.cloudUrlHelp.popoverTitle": "如何查找 Elasticsearch 终端 URL", - "xpack.remoteClusters.remoteClusterForm.cloudUrlHelpModal.deploymentsLink": "部署页面", "xpack.remoteClusters.remoteClusterForm.errorTitle": "某些字段需要您的关注。", - "xpack.remoteClusters.remoteClusterForm.fieldCloudUrlHelpText": "协议 (https://) 和端口值可选。", - "xpack.remoteClusters.remoteClusterForm.fieldCloudUrlLabel": "Elasticsearch 终端 URL", "xpack.remoteClusters.remoteClusterForm.fieldModeLabel": "使用代理模式", "xpack.remoteClusters.remoteClusterForm.fieldNameLabel": "名称", "xpack.remoteClusters.remoteClusterForm.fieldNameLabelHelpText": "只能包含字母、数字、下划线和短划线。", @@ -29760,18 +29751,14 @@ "xpack.remoteClusters.remoteClusterForm.fieldSeedsPlaceholder": "host:port", "xpack.remoteClusters.remoteClusterForm.fieldServerNameHelpText.learnMoreLinkLabel": "了解详情。", "xpack.remoteClusters.remoteClusterForm.fieldServerNameOptionalLabel": "服务器名(可选)", - "xpack.remoteClusters.remoteClusterForm.fieldServerNameRequiredLabel": "服务器名", "xpack.remoteClusters.remoteClusterForm.fieldSocketConnectionsHelpText": "每个远程集群要打开的连接数目。", "xpack.remoteClusters.remoteClusterForm.hideRequestButtonLabel": "隐藏请求", - "xpack.remoteClusters.remoteClusterForm.inputcloudUrlErrorMessage": "“Elasticsearch 终端 URL”字段无效。", "xpack.remoteClusters.remoteClusterForm.inputNameErrorMessage": "“名称”字段无效。", "xpack.remoteClusters.remoteClusterForm.inputProxyErrorMessage": "“代理地址”字段无效。", "xpack.remoteClusters.remoteClusterForm.inputSeedsErrorMessage": "“种子节点”字段无效。", - "xpack.remoteClusters.remoteClusterForm.inputServerNameErrorMessage": "“服务器名称”字段无效。", "xpack.remoteClusters.remoteClusterForm.localSeedError.duplicateMessage": "不允许重复的种子节点。`", "xpack.remoteClusters.remoteClusterForm.localSeedError.invalidCharactersMessage": "种子节点必须使用 host:port 格式。例如:127.0.0.1:9400、localhost:9400。主机只能由字母、数字和短划线构成。", "xpack.remoteClusters.remoteClusterForm.localSeedError.invalidPortMessage": "端口必填。", - "xpack.remoteClusters.remoteClusterForm.manualModeFieldLabel": "手动输入代理地址和服务器名称", "xpack.remoteClusters.remoteClusterForm.proxyError.invalidCharactersMessage": "地址必须使用 host:port 格式。例如:127.0.0.1:9400、localhost:9400。主机只能由字母、数字和短划线构成。", "xpack.remoteClusters.remoteClusterForm.proxyError.missingProxyMessage": "必须指定代理地址。", "xpack.remoteClusters.remoteClusterForm.sectionModeCloudDescription": "通过使用远程部署的 Elasticsearch 终端 URL 自动配置运程集群或手动输入代理地址和服务器名称。", From 061d9829ad71b9f93b0745987fbd4728fa816ce1 Mon Sep 17 00:00:00 2001 From: Konrad Szwarc Date: Thu, 15 Feb 2024 15:28:42 +0100 Subject: [PATCH 02/40] [EDR Workflows] Make saving interactions more intuitive within endpoint integration policy (#176605) This PR: 1. Makes the save button on the Policy Settings tab disabled when you first open it. The button will only become enabled if you make changes. 2. It adds a popup that warns you about unsaved changes whenever you try to switch tabs while there are unsaved changes on the current tab. Added to both Policy Settings and Protection Updates tabs. https://github.com/elastic/kibana/assets/29123534/ccabafc9-6b11-4a25-805b-241edbc5d1e1 ![Screenshot 2024-02-13 at 14 06 48](https://github.com/elastic/kibana/assets/29123534/054c0c63-b409-4bc0-a73d-2a4b4fe6876d) --- .../cypress/e2e/policy/policy_details.cy.ts | 62 +++- .../policy_settings_layout.test.tsx | 19 +- .../policy_settings_layout.tsx | 340 +++++++++--------- .../protection_updates_layout.tsx | 7 +- .../pages/policy/view/tabs/policy_tabs.tsx | 100 +++++- .../tabs/unsaved_changes_confirm_modal.tsx | 46 +++ 6 files changed, 395 insertions(+), 179 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/tabs/unsaved_changes_confirm_modal.tsx diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_details.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_details.cy.ts index 78239fbca02d1f..0bc6e907fe8275 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_details.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_details.cy.ts @@ -44,9 +44,7 @@ describe( const testNote = 'test note'; const updatedTestNote = 'updated test note'; - // FLAKY: https://github.com/elastic/kibana/issues/169187 - // FLAKY: https://github.com/elastic/kibana/issues/169188 - describe.skip('Renders and saves protection updates', () => { + describe('Renders and saves protection updates', () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; const defaultDate = moment.utc().subtract(1, 'days'); @@ -90,6 +88,21 @@ describe( cy.getByTestSubj('protectionUpdatesSaveButton').should('be.enabled'); }); + it('should display warning modal when user has unsaved changes', () => { + loadProtectionUpdatesUrl(policy.id); + cy.getByTestSubj('protection-updates-manifest-switch').click(); + cy.getByTestSubj('policySettingsTab').click(); + cy.getByTestSubj('policyDetailsUnsavedChangesModal').within(() => { + cy.getByTestSubj('confirmModalCancelButton').click(); + }); + cy.url().should('include', 'protectionUpdates'); + cy.getByTestSubj('policySettingsTab').click(); + cy.getByTestSubj('policyDetailsUnsavedChangesModal').within(() => { + cy.getByTestSubj('confirmModalConfirmButton').click(); + }); + cy.url().should('include', 'settings'); + }); + it('should successfully update the manifest version to custom date', () => { loadProtectionUpdatesUrl(policy.id); cy.getByTestSubj('protectionUpdatesSaveButton').should('be.disabled'); @@ -310,5 +323,48 @@ describe( }); }); }); + describe('Policy settings', () => { + const loadSettingsUrl = (policyId: string) => + loadPage(`/app/security/administration/policy/${policyId}/settings`); + + describe('Renders policy settings form', () => { + let indexedPolicy: IndexedFleetEndpointPolicyResponse; + let policy: PolicyData; + + beforeEach(() => { + login(); + disableExpandableFlyoutAdvancedSettings(); + getEndpointIntegrationVersion().then((version) => { + createAgentPolicyTask(version).then((data) => { + indexedPolicy = data; + policy = indexedPolicy.integrationPolicies[0]; + }); + }); + }); + + afterEach(() => { + if (indexedPolicy) { + cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); + } + }); + it('should render disabled button and display modal if unsaved changes are present', () => { + loadSettingsUrl(policy.id); + cy.getByTestSubj('policyDetailsSaveButton').should('be.disabled'); + cy.getByTestSubj('endpointPolicyForm-malware-enableDisableSwitch').click(); + cy.getByTestSubj('policyDetailsSaveButton').should('not.be.disabled'); + cy.getByTestSubj('policyProtectionUpdatesTab').click(); + cy.getByTestSubj('policyDetailsUnsavedChangesModal').within(() => { + cy.getByTestSubj('confirmModalCancelButton').click(); + }); + cy.url().should('include', 'settings'); + cy.getByTestSubj('policyProtectionUpdatesTab').click(); + + cy.getByTestSubj('policyDetailsUnsavedChangesModal').within(() => { + cy.getByTestSubj('confirmModalConfirmButton').click(); + }); + cy.url().should('include', 'protectionUpdates'); + }); + }); + }); } ); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/policy_settings_layout.test.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/policy_settings_layout.test.tsx index 0c5a98281eec6c..b7c4c13237a1fd 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/policy_settings_layout.test.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/policy_settings_layout.test.tsx @@ -47,7 +47,9 @@ describe('When rendering PolicySettingsLayout', () => { apiMocks = allFleetHttpMocks(mockedContext.coreStart.http); policyData = new FleetPackagePolicyGenerator('seed').generateEndpointPackagePolicy(); render = () => { - renderResult = mockedContext.render(); + renderResult = mockedContext.render( + + ); return renderResult; }; }); @@ -117,9 +119,17 @@ describe('When rendering PolicySettingsLayout', () => { return expectedUpdates; }; - it('should render layout with expected content', () => { + it('should render layout with expected content when no changes have been made', () => { const { getByTestId } = render(); + expect(getByTestId('endpointPolicyForm')); + expect(getByTestId('policyDetailsCancelButton')).not.toBeDisabled(); + expect(getByTestId('policyDetailsSaveButton')).toBeDisabled(); + }); + + it('should render layout with expected content when changes have been made', () => { + const { getByTestId } = render(); + makeUpdates(); expect(getByTestId('endpointPolicyForm')); expect(getByTestId('policyDetailsCancelButton')).not.toBeDisabled(); expect(getByTestId('policyDetailsSaveButton')).not.toBeDisabled(); @@ -141,6 +151,7 @@ describe('When rendering PolicySettingsLayout', () => { const deferred = getDeferred(); apiMocks.responseProvider.updateEndpointPolicy.mockDelay.mockReturnValue(deferred.promise); const { getByTestId } = render(); + makeUpdates(); await clickSave(true, false); await waitFor(() => { @@ -157,10 +168,11 @@ describe('When rendering PolicySettingsLayout', () => { it('should show success toast on update success', async () => { render(); + makeUpdates(); await clickSave(); await waitFor(() => { - expect(renderResult.getByTestId('policyDetailsSaveButton')).not.toBeDisabled(); + expect(renderResult.getByTestId('policyDetailsSaveButton')).toBeDisabled(); }); expect(toasts.addSuccess).toHaveBeenCalledWith({ @@ -175,6 +187,7 @@ describe('When rendering PolicySettingsLayout', () => { throw new Error('oh oh!'); }); render(); + makeUpdates(); await clickSave(); await waitFor(() => { diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/policy_settings_layout.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/policy_settings_layout.tsx index 1a3a62c1e2ebfe..03ce2889d6f614 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/policy_settings_layout.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/policy_settings_layout.tsx @@ -12,7 +12,7 @@ import type { ApplicationStart } from '@kbn/core-application-browser'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiButton, EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; -import { cloneDeep } from 'lodash'; +import { cloneDeep, isEqual } from 'lodash'; import { i18n } from '@kbn/i18n'; import { useUserPrivileges } from '../../../../../common/components/user_privileges'; import { useFetchAgentByAgentPolicySummary } from '../../../../hooks/policy/use_fetch_endpoint_policy_agent_summary'; @@ -33,176 +33,194 @@ import { ConfirmUpdate } from './components/policy_form_confirm_update'; export interface PolicySettingsLayoutProps { policy: MaybeImmutable; + setUnsavedChanges: (isModified: boolean) => void; } -export const PolicySettingsLayout = memo(({ policy: _policy }) => { - const policy = _policy as PolicyData; - const { - services: { - application: { navigateToApp }, - }, - } = useKibana(); - const toasts = useToasts(); - const dispatch = useDispatch(); - const { state: locationRouteState } = useLocation(); - const { canWritePolicyManagement } = useUserPrivileges().endpointPrivileges; - const { isLoading: isUpdating, mutateAsync: sendPolicyUpdate } = useUpdateEndpointPolicy(); - const { data: agentSummaryData } = useFetchAgentByAgentPolicySummary(policy.policy_id); - - const [policySettings, setPolicySettings] = useState( - cloneDeep(policy.inputs[0].config.policy.value) - ); - const [showConfirm, setShowConfirm] = useState(false); - const [routeState, setRouteState] = useState(); - - const isEditMode = canWritePolicyManagement; - const policyName = policy?.name ?? ''; - const routingOnCancelNavigateTo = routeState?.onCancelNavigateTo; - - const navigateToAppArguments = useMemo((): Parameters => { - if (routingOnCancelNavigateTo) { - return routingOnCancelNavigateTo; - } - - return [ - APP_UI_ID, - { - path: getPoliciesPath(), +export const PolicySettingsLayout = memo( + ({ policy: _policy, setUnsavedChanges }) => { + const policy = _policy as PolicyData; + const { + services: { + application: { navigateToApp }, }, - ]; - }, [routingOnCancelNavigateTo]); - - const handleSettingsOnChange: PolicySettingsFormProps['onChange'] = useCallback((updates) => { - setPolicySettings(updates.updatedPolicy); - }, []); - - const handleCancelOnClick = useNavigateToAppEventHandler(...navigateToAppArguments); - - const handleSaveOnClick = useCallback(() => { - setShowConfirm(true); - }, []); - - const handleSaveCancel = useCallback(() => { - setShowConfirm(false); - }, []); - - const handleSaveConfirmation = useCallback(() => { - const update = cloneDeep(policy); - - update.inputs[0].config.policy.value = policySettings; - sendPolicyUpdate({ policy: update }) - .then(({ item: policyItem }) => { - toasts.addSuccess({ - 'data-test-subj': 'policyDetailsSuccessMessage', - title: i18n.translate( - 'xpack.securitySolution.endpoint.policy.details.updateSuccessTitle', - { - defaultMessage: 'Success!', - } - ), - text: i18n.translate( - 'xpack.securitySolution.endpoint.policy.details.updateSuccessMessage', - { - defaultMessage: 'Integration {name} has been updated.', - values: { name: policyName }, - } - ), - }); + } = useKibana(); + const toasts = useToasts(); + const dispatch = useDispatch(); + const { state: locationRouteState } = useLocation(); + const { canWritePolicyManagement } = useUserPrivileges().endpointPrivileges; + const { isLoading: isUpdating, mutateAsync: sendPolicyUpdate } = useUpdateEndpointPolicy(); + const { data: agentSummaryData } = useFetchAgentByAgentPolicySummary(policy.policy_id); + + const [policySettings, setPolicySettings] = useState( + cloneDeep(policy.inputs[0].config.policy.value) + ); + + const [policyModified, setPolicyModified] = useState(false); + + const [showConfirm, setShowConfirm] = useState(false); + const [routeState, setRouteState] = useState(); + + const isEditMode = canWritePolicyManagement; + const policyName = policy?.name ?? ''; + const routingOnCancelNavigateTo = routeState?.onCancelNavigateTo; + + const navigateToAppArguments = useMemo((): Parameters => { + if (routingOnCancelNavigateTo) { + return routingOnCancelNavigateTo; + } + + return [ + APP_UI_ID, + { + path: getPoliciesPath(), + }, + ]; + }, [routingOnCancelNavigateTo]); + + const handleSettingsOnChange: PolicySettingsFormProps['onChange'] = useCallback( + (updates) => { + setPolicySettings(updates.updatedPolicy); + setPolicyModified(!isEqual(updates.updatedPolicy, policy.inputs[0].config.policy.value)); + }, + [policy.inputs] + ); + const handleCancelOnClick = useNavigateToAppEventHandler(...navigateToAppArguments); + + const handleSaveOnClick = useCallback(() => { + setShowConfirm(true); + }, []); + + const handleSaveCancel = useCallback(() => { + setShowConfirm(false); + }, []); + + const handleSaveConfirmation = useCallback(() => { + const update = cloneDeep(policy); + + update.inputs[0].config.policy.value = policySettings; + sendPolicyUpdate({ policy: update }) + .then(({ item: policyItem }) => { + toasts.addSuccess({ + 'data-test-subj': 'policyDetailsSuccessMessage', + title: i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.updateSuccessTitle', + { + defaultMessage: 'Success!', + } + ), + text: i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.updateSuccessMessage', + { + defaultMessage: 'Integration {name} has been updated.', + values: { name: policyName }, + } + ), + }); - if (routeState && routeState.onSaveNavigateTo) { - navigateToApp(...routeState.onSaveNavigateTo); - } else { - // Since the 'policyItem' is stored in a store and fetched as a result of an action on urlChange, we still need to dispatch an action even though Redux was removed from this component. - dispatch({ - type: 'serverReturnedPolicyDetailsData', - payload: { - policyItem, - }, + if (routeState && routeState.onSaveNavigateTo) { + navigateToApp(...routeState.onSaveNavigateTo); + } else { + setPolicyModified(false); + // Since the 'policyItem' is stored in a store and fetched as a result of an action on urlChange, we still need to dispatch an action even though Redux was removed from this component. + dispatch({ + type: 'serverReturnedPolicyDetailsData', + payload: { + policyItem, + }, + }); + } + }) + .catch((err) => { + toasts.addDanger({ + 'data-test-subj': 'policyDetailsFailureMessage', + title: i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.updateErrorTitle', + { + defaultMessage: 'Failed!', + } + ), + text: err.message, }); - } - }) - .catch((err) => { - toasts.addDanger({ - 'data-test-subj': 'policyDetailsFailureMessage', - title: i18n.translate('xpack.securitySolution.endpoint.policy.details.updateErrorTitle', { - defaultMessage: 'Failed!', - }), - text: err.message, }); - }); - - handleSaveCancel(); - }, [ - dispatch, - handleSaveCancel, - navigateToApp, - policy, - policyName, - policySettings, - routeState, - sendPolicyUpdate, - toasts, - ]); - - useEffect(() => { - if (!routeState && locationRouteState) { - setRouteState(locationRouteState); - } - }, [locationRouteState, routeState]); - - return ( - <> - {showConfirm && ( - { + if (!routeState && locationRouteState) { + setRouteState(locationRouteState); + } + }, [locationRouteState, routeState]); + + useEffect(() => { + setUnsavedChanges(policyModified); + }, [policyModified, setUnsavedChanges]); + + return ( + <> + {showConfirm && ( + + )} + + - )} - - - - - - - - - - - - - {isEditMode && ( + + + + + - - + - )} - - - - ); -}); + {isEditMode && ( + + + + + + )} + + + + ); + } +); PolicySettingsLayout.displayName = 'PolicySettingsLayout'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/protection_updates_layout.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/protection_updates_layout.tsx index d99a7682dfd904..5d244884c1068d 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/protection_updates_layout.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/protection_updates_layout.tsx @@ -43,6 +43,7 @@ import { getControlledArtifactCutoffDate } from '../../../../../../common/endpoi interface ProtectionUpdatesLayoutProps { policy: MaybeImmutable; + setUnsavedChanges: (isModified: boolean) => void; } const AUTOMATIC_UPDATES_CHECKBOX_LABEL = i18n.translate( @@ -60,7 +61,7 @@ const AUTOMATIC_UPDATES_OFF_CHECKBOX_LABEL = i18n.translate( ); export const ProtectionUpdatesLayout = React.memo( - ({ policy: _policy }) => { + ({ policy: _policy, setUnsavedChanges }) => { const toasts = useToasts(); const dispatch = useDispatch(); const { isLoading: isUpdating, mutateAsync: sendPolicyUpdate } = useUpdateEndpointPolicy(); @@ -106,6 +107,10 @@ export const ProtectionUpdatesLayout = React.memo( (fetchedNote ? note !== fetchedNote.note : note !== '') || manifestVersion !== deployedVersion; + useEffect(() => { + setUnsavedChanges(saveButtonEnabled); + }, [saveButtonEnabled, setUnsavedChanges]); + const onSave = useCallback(() => { const update = cloneDeep(policy); update.inputs[0].config.policy.value.global_manifest_version = manifestVersion; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/tabs/policy_tabs.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/tabs/policy_tabs.tsx index cdbc253ec6776e..5b37aa798effd2 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/tabs/policy_tabs.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/tabs/policy_tabs.tsx @@ -9,8 +9,9 @@ import type { EuiTabbedContentTab } from '@elastic/eui'; import { EuiSpacer, EuiTabbedContent } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import React, { useCallback, useEffect, useMemo } from 'react'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useHistory, useLocation } from 'react-router-dom'; +import { UnsavedChangesConfirmModal } from './unsaved_changes_confirm_modal'; import { useLicense } from '../../../../../common/hooks/use_license'; import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; import { ProtectionUpdatesLayout } from '../protection_updates/protection_updates_layout'; @@ -85,6 +86,28 @@ export const PolicyTabs = React.memo(() => { const isInProtectionUpdatesTab = usePolicyDetailsSelector(isOnProtectionUpdatesView); const policyId = usePolicyDetailsSelector(policyIdFromParams); + const [unsavedChangesModal, setUnsavedChangesModal] = useState<{ + showModal: boolean; + nextTab: EuiTabbedContentTab | null; + }>({ showModal: false, nextTab: null }); + + const [unsavedChanges, setUnsavedChanges] = useState< + Record + >({ + [PolicyTabKeys.SETTINGS]: false, + [PolicyTabKeys.PROTECTION_UPDATES]: false, + }); + + const setTabUnsavedChanges = useCallback( + (tab: PolicyTabKeys.SETTINGS | PolicyTabKeys.PROTECTION_UPDATES) => + (hasUnsavedChanges: boolean) => { + if (unsavedChanges[tab] !== hasUnsavedChanges) { + setUnsavedChanges((prev) => ({ ...prev, [tab]: hasUnsavedChanges })); + } + }, + [unsavedChanges] + ); + // By the time the tabs load, we know that we already have a `policyItem` since a conditional // check is done at the `PageDetails` component level. So asserting to non-null/undefined here. // eslint-disable-next-line @typescript-eslint/no-non-null-assertion @@ -213,9 +236,13 @@ export const PolicyTabs = React.memo(() => { <> - + ), + 'data-test-subj': 'policySettingsTab', }, [PolicyTabKeys.TRUSTED_APPS]: canReadTrustedApplications ? { @@ -240,6 +267,7 @@ export const PolicyTabs = React.memo(() => { /> ), + 'data-test-subj': 'policyTrustedAppsTab', } : undefined, [PolicyTabKeys.EVENT_FILTERS]: canReadEventFilters @@ -265,6 +293,7 @@ export const PolicyTabs = React.memo(() => { /> ), + 'data-test-subj': 'policyEventFiltersTab', } : undefined, [PolicyTabKeys.HOST_ISOLATION_EXCEPTIONS]: canReadHostIsolationExceptions @@ -290,6 +319,7 @@ export const PolicyTabs = React.memo(() => { /> ), + 'data-test-subj': 'policyHostIsolationExceptionsTab', } : undefined, [PolicyTabKeys.BLOCKLISTS]: canReadBlocklist @@ -312,6 +342,7 @@ export const PolicyTabs = React.memo(() => { /> ), + 'data-test-subj': 'policyBlocklistTab', } : undefined, @@ -327,14 +358,19 @@ export const PolicyTabs = React.memo(() => { content: ( <> - + ), + 'data-test-subj': 'policyProtectionUpdatesTab', } : undefined, }; }, [ policyItem, + setTabUnsavedChanges, canReadTrustedApplications, getTrustedAppsApiClientInstance, canWriteTrustedApplications, @@ -385,8 +421,15 @@ export const PolicyTabs = React.memo(() => { isInProtectionUpdatesTab, ]); - const onTabClickHandler = useCallback( + const cancelUnsavedChangesModal = useCallback(() => { + setUnsavedChangesModal({ showModal: false, nextTab: null }); + }, [setUnsavedChangesModal]); + + const changeTab = useCallback( (selectedTab: EuiTabbedContentTab) => { + if (unsavedChangesModal.showModal) { + cancelUnsavedChangesModal(); + } let path: string = ''; switch (selectedTab.id) { case PolicyTabKeys.SETTINGS: @@ -410,21 +453,56 @@ export const PolicyTabs = React.memo(() => { } history.push(path, routeState?.backLink ? { backLink: routeState.backLink } : null); }, - [history, policyId, routeState] + [ + cancelUnsavedChangesModal, + history, + policyId, + routeState.backLink, + unsavedChangesModal.showModal, + ] ); + const onTabClickHandler = useCallback( + (selectedTab: EuiTabbedContentTab) => { + if ( + (isInSettingsTab && unsavedChanges[PolicyTabKeys.SETTINGS]) || + (isInProtectionUpdatesTab && unsavedChanges[PolicyTabKeys.PROTECTION_UPDATES]) + ) { + setUnsavedChangesModal({ showModal: true, nextTab: selectedTab }); + } else { + changeTab(selectedTab); + } + }, + [changeTab, isInProtectionUpdatesTab, isInSettingsTab, unsavedChanges] + ); + + const confirmUnsavedChangesModal = useCallback(() => { + if (unsavedChangesModal.nextTab) { + changeTab(unsavedChangesModal.nextTab); + } + }, [changeTab, unsavedChangesModal.nextTab]); + // show loader for privileges validation if (privilegesLoading) { return ; } return ( - + <> + {unsavedChangesModal.showModal && ( + + )} + + ); }); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/tabs/unsaved_changes_confirm_modal.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/tabs/unsaved_changes_confirm_modal.tsx new file mode 100644 index 00000000000000..b7e1b065670814 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/tabs/unsaved_changes_confirm_modal.tsx @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiConfirmModal } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +export const UnsavedChangesConfirmModal = React.memo<{ + onConfirm: () => void; + onCancel: () => void; +}>(({ onCancel, onConfirm }) => { + return ( + + + + ); +}); + +UnsavedChangesConfirmModal.displayName = 'UnsavedChangesConfirmModal'; From b5225232d038ea8d29f4f21c4bd528209e1b365e Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Thu, 15 Feb 2024 09:40:48 -0500 Subject: [PATCH 03/40] [Response Ops][Task Manager] Introduce task priority during task claiming (#175334) Resolves https://github.com/elastic/kibana/issues/174352 ## Summary Adds an optional `priority` definition to task types which defaults to `Normal` priority. Updates the task claiming update by query to include a new scripted sort that sorts by priority in descending order so that highest priority tasks are claimed first. This priority field is planned for use by backfill rule execution tasks so the only usages in this PR are in the functional tests. Also included an integration test that will ping the team if a task type explicitly sets a priority in the task definition --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/plugins/task_manager/server/index.ts | 2 +- .../task_priority_check.test.ts.snap | 3 + .../task_priority_check.test.ts | 60 +++++ x-pack/plugins/task_manager/server/task.ts | 18 +- .../task_claimers/strategy_default.test.ts | 25 +- .../server/task_claimers/strategy_default.ts | 50 +++- .../server/task_type_dictionary.test.ts | 221 ++++++++++++------ .../server/task_type_dictionary.ts | 8 +- .../sample_task_plugin/server/init_routes.ts | 1 + .../sample_task_plugin/server/plugin.ts | 31 +++ .../check_registered_task_types.ts | 1 + .../test_suites/task_manager/index.ts | 1 + .../test_suites/task_manager/task_priority.ts | 216 +++++++++++++++++ 13 files changed, 550 insertions(+), 87 deletions(-) create mode 100644 x-pack/plugins/task_manager/server/integration_tests/__snapshots__/task_priority_check.test.ts.snap create mode 100644 x-pack/plugins/task_manager/server/integration_tests/task_priority_check.test.ts create mode 100644 x-pack/test/plugin_api_integration/test_suites/task_manager/task_priority.ts diff --git a/x-pack/plugins/task_manager/server/index.ts b/x-pack/plugins/task_manager/server/index.ts index a7555b3316a8e2..92153a4878d767 100644 --- a/x-pack/plugins/task_manager/server/index.ts +++ b/x-pack/plugins/task_manager/server/index.ts @@ -24,7 +24,7 @@ export type { LoadIndirectParamsResult, } from './task'; -export { TaskStatus } from './task'; +export { TaskStatus, TaskPriority } from './task'; export type { TaskRegisterDefinition, TaskDefinitionRegistry } from './task_type_dictionary'; diff --git a/x-pack/plugins/task_manager/server/integration_tests/__snapshots__/task_priority_check.test.ts.snap b/x-pack/plugins/task_manager/server/integration_tests/__snapshots__/task_priority_check.test.ts.snap new file mode 100644 index 00000000000000..75726039709fa7 --- /dev/null +++ b/x-pack/plugins/task_manager/server/integration_tests/__snapshots__/task_priority_check.test.ts.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Task priority checks detects tasks with priority definitions 1`] = `Array []`; diff --git a/x-pack/plugins/task_manager/server/integration_tests/task_priority_check.test.ts b/x-pack/plugins/task_manager/server/integration_tests/task_priority_check.test.ts new file mode 100644 index 00000000000000..ebbea6f1e8a07a --- /dev/null +++ b/x-pack/plugins/task_manager/server/integration_tests/task_priority_check.test.ts @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + type TestElasticsearchUtils, + type TestKibanaUtils, +} from '@kbn/core-test-helpers-kbn-server'; +import { TaskDefinition, TaskPriority } from '../task'; +import { setupTestServers } from './lib'; +import { TaskTypeDictionary } from '../task_type_dictionary'; + +jest.mock('../task_type_dictionary', () => { + const actual = jest.requireActual('../task_type_dictionary'); + return { + ...actual, + TaskTypeDictionary: jest.fn().mockImplementation((opts) => { + return new actual.TaskTypeDictionary(opts); + }), + }; +}); + +// Notify response-ops if a task sets a priority to something other than `Normal` +describe('Task priority checks', () => { + let esServer: TestElasticsearchUtils; + let kibanaServer: TestKibanaUtils; + let taskTypeDictionary: TaskTypeDictionary; + + beforeAll(async () => { + const setupResult = await setupTestServers(); + esServer = setupResult.esServer; + kibanaServer = setupResult.kibanaServer; + + const mockedTaskTypeDictionary = jest.requireMock('../task_type_dictionary'); + expect(mockedTaskTypeDictionary.TaskTypeDictionary).toHaveBeenCalledTimes(1); + taskTypeDictionary = mockedTaskTypeDictionary.TaskTypeDictionary.mock.results[0].value; + }); + + afterAll(async () => { + if (kibanaServer) { + await kibanaServer.stop(); + } + if (esServer) { + await esServer.stop(); + } + }); + + it('detects tasks with priority definitions', async () => { + const taskTypes = taskTypeDictionary.getAllDefinitions(); + const taskTypesWithPriority = taskTypes + .map((taskType: TaskDefinition) => + !!taskType.priority ? { taskType: taskType.type, priority: taskType.priority } : null + ) + .filter((tt: { taskType: string; priority: TaskPriority } | null) => null != tt); + expect(taskTypesWithPriority).toMatchSnapshot(); + }); +}); diff --git a/x-pack/plugins/task_manager/server/task.ts b/x-pack/plugins/task_manager/server/task.ts index 0d064153859a58..b7b86c50c8b084 100644 --- a/x-pack/plugins/task_manager/server/task.ts +++ b/x-pack/plugins/task_manager/server/task.ts @@ -6,10 +6,16 @@ */ import { ObjectType, schema, TypeOf } from '@kbn/config-schema'; +import { isNumber } from 'lodash'; import { isErr, tryAsResult } from './lib/result_type'; import { Interval, isInterval, parseIntervalAsMillisecond } from './lib/intervals'; import { DecoratedError } from './task_running'; +export enum TaskPriority { + Low = 1, + Normal = 50, +} + /* * Type definitions and validations for tasks. */ @@ -132,6 +138,10 @@ export const taskDefinitionSchema = schema.object( * A brief, human-friendly title for this task. */ title: schema.maybe(schema.string()), + /** + * Priority of this task type. Defaults to "NORMAL" if not defined + */ + priority: schema.maybe(schema.number()), /** * An optional more detailed description of what this task does. */ @@ -179,10 +189,16 @@ export const taskDefinitionSchema = schema.object( indirectParamsSchema: schema.maybe(schema.any()), }, { - validate({ timeout }) { + validate({ timeout, priority }) { if (!isInterval(timeout) || isErr(tryAsResult(() => parseIntervalAsMillisecond(timeout)))) { return `Invalid timeout "${timeout}". Timeout must be of the form "{number}{cadance}" where number is an integer. Example: 5m.`; } + + if (priority && (!isNumber(priority) || !(priority in TaskPriority))) { + return `Invalid priority "${priority}". Priority must be one of ${Object.keys(TaskPriority) + .filter((key) => isNaN(Number(key))) + .map((key) => `${key} => ${TaskPriority[key as keyof typeof TaskPriority]}`)}`; + } }, } ); diff --git a/x-pack/plugins/task_manager/server/task_claimers/strategy_default.test.ts b/x-pack/plugins/task_manager/server/task_claimers/strategy_default.test.ts index c89ecdf669218f..d6911b1b67e20b 100644 --- a/x-pack/plugins/task_manager/server/task_claimers/strategy_default.test.ts +++ b/x-pack/plugins/task_manager/server/task_claimers/strategy_default.test.ts @@ -9,7 +9,7 @@ import _ from 'lodash'; import { v1 as uuidv1, v4 as uuidv4 } from 'uuid'; import { filter, take, toArray } from 'rxjs/operators'; -import { TaskStatus, ConcreteTaskInstance } from '../task'; +import { TaskStatus, ConcreteTaskInstance, TaskPriority } from '../task'; import { SearchOpts, StoreOpts, UpdateByQueryOpts, UpdateByQuerySearchOpts } from '../task_store'; import { asTaskClaimEvent, TaskEvent } from '../task_events'; import { asOk, isOk, unwrap } from '../lib/result_type'; @@ -255,6 +255,7 @@ describe('TaskClaiming', () => { definitions.registerTaskDefinitions({ foo: { title: 'foo', + priority: TaskPriority.Low, createTaskRunner: jest.fn(), }, bar: { @@ -351,6 +352,28 @@ describe('TaskClaiming', () => { }, }); expect(sort).toMatchObject([ + { + _script: { + type: 'number', + order: 'desc', + script: { + lang: 'painless', + params: { + priority_map: { + foo: 1, + }, + }, + source: ` + String taskType = doc['task.taskType'].value; + if (params.priority_map.containsKey(taskType)) { + return params.priority_map[taskType]; + } else { + return 50; + } + `, + }, + }, + }, { _script: { type: 'number', diff --git a/x-pack/plugins/task_manager/server/task_claimers/strategy_default.ts b/x-pack/plugins/task_manager/server/task_claimers/strategy_default.ts index 0d9ccb2ef723d9..93101b19cd77fd 100644 --- a/x-pack/plugins/task_manager/server/task_claimers/strategy_default.ts +++ b/x-pack/plugins/task_manager/server/task_claimers/strategy_default.ts @@ -8,6 +8,7 @@ /* * This module contains helpers for managing the task manager storage layer. */ +import type { estypes } from '@elastic/elasticsearch'; import apm from 'elastic-apm-node'; import minimatch from 'minimatch'; import { Subject, Observable, from, of } from 'rxjs'; @@ -17,7 +18,7 @@ import { groupBy, pick } from 'lodash'; import { asOk } from '../lib/result_type'; import { TaskTypeDictionary } from '../task_type_dictionary'; import { TaskClaimerOpts, ClaimOwnershipResult } from '.'; -import { ConcreteTaskInstance } from '../task'; +import { ConcreteTaskInstance, TaskPriority } from '../task'; import { TASK_MANAGER_TRANSACTION_TYPE } from '../task_running'; import { isLimited, TASK_MANAGER_MARK_AS_CLAIMED } from '../queries/task_claiming'; import { TaskClaim, asTaskClaimEvent, startTaskTimer } from '../task_events'; @@ -104,11 +105,12 @@ export function claimAvailableTasksDefault( async function executeClaimAvailableTasks( opts: OwnershipClaimingOpts ): Promise { - const { taskStore, size, taskTypes, events$ } = opts; + const { taskStore, size, taskTypes, events$, definitions } = opts; const { updated: tasksUpdated, version_conflicts: tasksConflicted } = await markAvailableTasksAsClaimed(opts); - const docs = tasksUpdated > 0 ? await sweepForClaimedTasks(taskStore, taskTypes, size) : []; + const docs = + tasksUpdated > 0 ? await sweepForClaimedTasks(taskStore, taskTypes, size, definitions) : []; emitEvents( events$, @@ -166,7 +168,7 @@ async function markAvailableTasksAsClaimed({ shouldBeOneOf(IdleTaskWithExpiredRunAt, RunningOrClaimingTaskWithExpiredRetryAt) ); - const sort: NonNullable = [SortByRunAtAndRetryAt]; + const sort: NonNullable = getClaimSort(definitions); const query = matchesClauses(queryForScheduledTasks, filterDownBy(InactiveTasks)); const script = updateFieldsAndMarkAsFailed({ fieldUpdates: { @@ -206,7 +208,8 @@ async function markAvailableTasksAsClaimed({ async function sweepForClaimedTasks( taskStore: TaskStore, taskTypes: Set, - size: number + size: number, + definitions: TaskTypeDictionary ): Promise { const claimedTasksQuery = tasksClaimedByOwner( taskStore.taskManagerId, @@ -215,7 +218,7 @@ async function sweepForClaimedTasks( const { docs } = await taskStore.fetch({ query: claimedTasksQuery, size, - sort: SortByRunAtAndRetryAt, + sort: getClaimSort(definitions), seq_no_primary_term: true, }); @@ -253,3 +256,38 @@ function accumulateClaimOwnershipResults( } return prev; } + +function getClaimSort(definitions: TaskTypeDictionary): estypes.SortCombinations[] { + // Sort by descending priority, then by ascending runAt/retryAt time + return [ + { + _script: { + type: 'number', + order: 'desc', + script: { + lang: 'painless', + // Use priority if explicitly specified in task definition, otherwise default to 50 (Normal) + source: ` + String taskType = doc['task.taskType'].value; + if (params.priority_map.containsKey(taskType)) { + return params.priority_map[taskType]; + } else { + return ${TaskPriority.Normal}; + } + `, + params: { + priority_map: definitions + .getAllDefinitions() + .reduce>((acc, taskDefinition) => { + if (taskDefinition.priority) { + acc[taskDefinition.type] = taskDefinition.priority; + } + return acc; + }, {}), + }, + }, + }, + }, + SortByRunAtAndRetryAt, + ]; +} diff --git a/x-pack/plugins/task_manager/server/task_type_dictionary.test.ts b/x-pack/plugins/task_manager/server/task_type_dictionary.test.ts index 039403816da5e4..d1b44a7577025f 100644 --- a/x-pack/plugins/task_manager/server/task_type_dictionary.test.ts +++ b/x-pack/plugins/task_manager/server/task_type_dictionary.test.ts @@ -6,7 +6,7 @@ */ import { get } from 'lodash'; -import { RunContext, TaskDefinition } from './task'; +import { RunContext, TaskDefinition, TaskPriority } from './task'; import { mockLogger } from './test_utils'; import { sanitizeTaskDefinitions, @@ -50,17 +50,18 @@ const getMockTaskDefinitions = (opts: Opts) => { describe('taskTypeDictionary', () => { let definitions: TaskTypeDictionary; + const logger = mockLogger(); beforeEach(() => { - definitions = new TaskTypeDictionary(mockLogger()); + definitions = new TaskTypeDictionary(logger); }); - describe('sanitizeTaskDefinitions', () => {}); - it('provides tasks with defaults', () => { - const taskDefinitions = getMockTaskDefinitions({ numTasks: 3 }); - const result = sanitizeTaskDefinitions(taskDefinitions); + describe('sanitizeTaskDefinitions', () => { + it('provides tasks with defaults', () => { + const taskDefinitions = getMockTaskDefinitions({ numTasks: 3 }); + const result = sanitizeTaskDefinitions(taskDefinitions); - expect(result).toMatchInlineSnapshot(` + expect(result).toMatchInlineSnapshot(` Array [ Object { "createTaskRunner": [Function], @@ -85,89 +86,117 @@ describe('taskTypeDictionary', () => { }, ] `); - }); + }); - it('throws a validation exception for invalid task definition', () => { - const runsanitize = () => { - const taskDefinitions: TaskDefinitionRegistry = { - some_kind_of_task: { - // @ts-ignore - fail: 'extremely', // cause a validation failure - type: 'breaky_task', - title: 'Test XYZ', - description: `Actually this won't work`, - createTaskRunner() { - return { - async run() { - return { - state: {}, - }; - }, - }; + it('throws a validation exception for invalid task definition', () => { + const runsanitize = () => { + const taskDefinitions: TaskDefinitionRegistry = { + some_kind_of_task: { + // @ts-ignore + fail: 'extremely', // cause a validation failure + type: 'breaky_task', + title: 'Test XYZ', + description: `Actually this won't work`, + createTaskRunner() { + return { + async run() { + return { + state: {}, + }; + }, + }; + }, }, - }, - }; + }; - return sanitizeTaskDefinitions(taskDefinitions); - }; + return sanitizeTaskDefinitions(taskDefinitions); + }; - expect(runsanitize).toThrowErrorMatchingInlineSnapshot( - `"[fail]: definition for this key is missing"` - ); - }); + expect(runsanitize).toThrowErrorMatchingInlineSnapshot( + `"[fail]: definition for this key is missing"` + ); + }); - it('throws a validation exception for invalid timeout on task definition', () => { - const runsanitize = () => { - const taskDefinitions: TaskDefinitionRegistry = { - some_kind_of_task: { - title: 'Test XYZ', - timeout: '15 days', - description: `Actually this won't work`, - createTaskRunner() { - return { - async run() { - return { - state: {}, - }; - }, - }; + it('throws a validation exception for invalid timeout on task definition', () => { + const runsanitize = () => { + const taskDefinitions: TaskDefinitionRegistry = { + some_kind_of_task: { + title: 'Test XYZ', + timeout: '15 days', + description: `Actually this won't work`, + createTaskRunner() { + return { + async run() { + return { + state: {}, + }; + }, + }; + }, }, - }, - }; + }; - return sanitizeTaskDefinitions(taskDefinitions); - }; + return sanitizeTaskDefinitions(taskDefinitions); + }; - expect(runsanitize).toThrowErrorMatchingInlineSnapshot( - `"Invalid timeout \\"15 days\\". Timeout must be of the form \\"{number}{cadance}\\" where number is an integer. Example: 5m."` - ); - }); + expect(runsanitize).toThrowErrorMatchingInlineSnapshot( + `"Invalid timeout \\"15 days\\". Timeout must be of the form \\"{number}{cadance}\\" where number is an integer. Example: 5m."` + ); + }); - it('throws a validation exception for invalid floating point timeout on task definition', () => { - const runsanitize = () => { - const taskDefinitions: TaskDefinitionRegistry = { - some_kind_of_task: { - title: 'Test XYZ', - timeout: '1.5h', - description: `Actually this won't work`, - createTaskRunner() { - return { - async run() { - return { - state: {}, - }; - }, - }; + it('throws a validation exception for invalid floating point timeout on task definition', () => { + const runsanitize = () => { + const taskDefinitions: TaskDefinitionRegistry = { + some_kind_of_task: { + title: 'Test XYZ', + timeout: '1.5h', + description: `Actually this won't work`, + createTaskRunner() { + return { + async run() { + return { + state: {}, + }; + }, + }; + }, }, - }, + }; + + return sanitizeTaskDefinitions(taskDefinitions); }; - return sanitizeTaskDefinitions(taskDefinitions); - }; + expect(runsanitize).toThrowErrorMatchingInlineSnapshot( + `"Invalid timeout \\"1.5h\\". Timeout must be of the form \\"{number}{cadance}\\" where number is an integer. Example: 5m."` + ); + }); + + it('throws a validation exception for invalid priority on task definition', () => { + const runsanitize = () => { + const taskDefinitions: TaskDefinitionRegistry = { + some_kind_of_task: { + title: 'Test XYZ', + priority: 23, + description: `Actually this won't work`, + createTaskRunner() { + return { + async run() { + return { + state: {}, + }; + }, + }; + }, + }, + }; + + return sanitizeTaskDefinitions(taskDefinitions); + }; - expect(runsanitize).toThrowErrorMatchingInlineSnapshot( - `"Invalid timeout \\"1.5h\\". Timeout must be of the form \\"{number}{cadance}\\" where number is an integer. Example: 5m."` - ); + expect(runsanitize).toThrowErrorMatchingInlineSnapshot( + `"Invalid priority \\"23\\". Priority must be one of Low => 1,Normal => 50"` + ); + }); }); describe('registerTaskDefinitions', () => { @@ -182,6 +211,44 @@ describe('taskTypeDictionary', () => { expect(definitions.has('foo')).toBe(true); }); + it('uses task priority if specified', () => { + definitions.registerTaskDefinitions({ + foo: { + title: 'foo', + maxConcurrency: 2, + priority: TaskPriority.Low, + createTaskRunner: jest.fn(), + }, + }); + expect(definitions.get('foo')).toEqual({ + createTaskRunner: expect.any(Function), + maxConcurrency: 2, + priority: 1, + timeout: '5m', + title: 'foo', + type: 'foo', + }); + }); + + it('does not register task with invalid priority schema', () => { + definitions.registerTaskDefinitions({ + foo: { + title: 'foo', + maxConcurrency: 2, + priority: 23, + createTaskRunner: jest.fn(), + }, + }); + expect(logger.error).toHaveBeenCalledWith( + `Could not sanitize task definitions: Invalid priority \"23\". Priority must be one of Low => 1,Normal => 50` + ); + expect(() => { + definitions.get('foo'); + }).toThrowErrorMatchingInlineSnapshot( + `"Unsupported task type \\"foo\\". Supported types are "` + ); + }); + it('throws error when registering duplicate task type', () => { definitions.registerTaskDefinitions({ foo: { diff --git a/x-pack/plugins/task_manager/server/task_type_dictionary.ts b/x-pack/plugins/task_manager/server/task_type_dictionary.ts index 84df658f36179e..a29504f04f3034 100644 --- a/x-pack/plugins/task_manager/server/task_type_dictionary.ts +++ b/x-pack/plugins/task_manager/server/task_type_dictionary.ts @@ -7,7 +7,7 @@ import { ObjectType } from '@kbn/config-schema'; import { Logger } from '@kbn/core/server'; -import { TaskDefinition, taskDefinitionSchema, TaskRunCreatorFunction } from './task'; +import { TaskDefinition, taskDefinitionSchema, TaskRunCreatorFunction, TaskPriority } from './task'; import { CONCURRENCY_ALLOW_LIST_BY_TASK_TYPE } from './constants'; /** @@ -44,6 +44,12 @@ export interface TaskRegisterDefinition { * the task will be re-attempted. */ timeout?: string; + /** + * An optional definition of task priority. Tasks will be sorted by priority prior to claiming + * so high priority tasks will always be claimed before normal priority, which will always be + * claimed before low priority + */ + priority?: TaskPriority; /** * An optional more detailed description of what this task does. */ diff --git a/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/init_routes.ts b/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/init_routes.ts index 274bac5fc5dc04..01f8cd6ba4bc97 100644 --- a/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/init_routes.ts +++ b/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/init_routes.ts @@ -300,6 +300,7 @@ export function initRoutes( const taskManager = await taskManagerStart; return res.ok({ body: await taskManager.fetch({ + size: 20, query: taskManagerQuery, }), }); diff --git a/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/plugin.ts b/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/plugin.ts index d7bb483fcac012..0e3a2bb993fe73 100644 --- a/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/plugin.ts +++ b/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/plugin.ts @@ -18,6 +18,7 @@ import { EphemeralTask, } from '@kbn/task-manager-plugin/server'; import { DEFAULT_MAX_WORKERS } from '@kbn/task-manager-plugin/server/config'; +import { TaskPriority } from '@kbn/task-manager-plugin/server/task'; import { initRoutes } from './init_routes'; // this plugin's dependendencies @@ -242,6 +243,36 @@ export class SampleTaskManagerFixturePlugin async run() {}, }), }, + lowPriorityTask: { + title: 'Task used for testing priority claiming', + priority: TaskPriority.Low, + createTaskRunner: ({ taskInstance }: { taskInstance: ConcreteTaskInstance }) => ({ + async run() { + const { state, schedule } = taskInstance; + const prevState = state || { count: 0 }; + + const count = (prevState.count || 0) + 1; + + const [{ elasticsearch }] = await core.getStartServices(); + await elasticsearch.client.asInternalUser.index({ + index: '.kibana_task_manager_test_result', + body: { + type: 'task', + taskType: 'lowPriorityTask', + taskId: taskInstance.id, + state: JSON.stringify(state), + ranAt: new Date(), + }, + refresh: true, + }); + + return { + state: { count }, + schedule, + }; + }, + }), + }, }); const taskWithTiming = { diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts index 1f52d3ca24f90d..3b71c99df2e5bf 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts @@ -20,6 +20,7 @@ export default function ({ getService }: FtrProviderContext) { } const TEST_TYPES = [ + 'lowPriorityTask', 'sampleOneTimeTaskThrowingError', 'sampleRecurringTaskTimingOut', 'sampleRecurringTaskWhichHangs', diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts index 420dfe795f322f..1480d5f371a77e 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts @@ -9,6 +9,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('task_manager', function taskManagerSuite() { + loadTestFile(require.resolve('./task_priority')); loadTestFile(require.resolve('./background_task_utilization_route')); loadTestFile(require.resolve('./metrics_route')); loadTestFile(require.resolve('./health_route')); diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_priority.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_priority.ts new file mode 100644 index 00000000000000..f8fc3f63987b93 --- /dev/null +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_priority.ts @@ -0,0 +1,216 @@ +/* + * Copyright 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 type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { ConcreteTaskInstance } from '@kbn/task-manager-plugin/server'; +import { taskMappings as TaskManagerMapping } from '@kbn/task-manager-plugin/server/saved_objects/mappings'; +import { asyncForEach } from '@kbn/std'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +const { properties: taskManagerIndexMapping } = TaskManagerMapping; + +export interface RawDoc { + _id: string; + _source: any; + _type?: string; +} +export interface SearchResults { + hits: { + hits: RawDoc[]; + }; +} + +type DeprecatedConcreteTaskInstance = Omit & { + interval: string; +}; + +type SerializedConcreteTaskInstance = Omit< + ConcreteTaskInstance, + 'state' | 'params' | 'scheduledAt' | 'startedAt' | 'retryAt' | 'runAt' +> & { + state: State; + params: Params; + scheduledAt: string; + startedAt: string | null; + retryAt: string | null; + runAt: string; +}; + +export default function ({ getService }: FtrProviderContext) { + const es = getService('es'); + const retry = getService('retry'); + const supertest = getService('supertest'); + + const testHistoryIndex = '.kibana_task_manager_test_result'; + + function scheduleTask( + task: Partial + ): Promise { + return supertest + .post('/api/sample_tasks/schedule') + .set('kbn-xsrf', 'xxx') + .send({ task }) + .expect(200) + .then((response: { body: SerializedConcreteTaskInstance }) => response.body); + } + + function currentTasks(): Promise<{ + docs: Array>; + }> { + return supertest + .get('/api/sample_tasks') + .expect(200) + .then((response) => response.body); + } + + async function historyDocs({ + taskId, + taskType, + }: { + taskId?: string; + taskType?: string; + }): Promise { + const filter: any[] = [{ term: { type: 'task' } }]; + if (taskId) { + filter.push({ term: { taskId } }); + } + if (taskType) { + filter.push({ term: { taskType } }); + } + return es + .search({ + index: testHistoryIndex, + body: { + query: { + bool: { + filter, + }, + }, + }, + }) + .then((result) => (result as unknown as SearchResults).hits.hits); + } + + describe('task priority', () => { + beforeEach(async () => { + const exists = await es.indices.exists({ index: testHistoryIndex }); + if (exists) { + await es.deleteByQuery({ + index: testHistoryIndex, + refresh: true, + body: { query: { term: { type: 'task' } } }, + }); + } else { + await es.indices.create({ + index: testHistoryIndex, + body: { + mappings: { + properties: { + type: { + type: 'keyword', + }, + taskId: { + type: 'keyword', + }, + params: taskManagerIndexMapping.params, + state: taskManagerIndexMapping.state, + runAt: taskManagerIndexMapping.runAt, + } as Record, + }, + }, + }); + } + }); + + afterEach(async () => { + await supertest.delete('/api/sample_tasks').set('kbn-xsrf', 'xxx').expect(200); + }); + + it('should claim low priority tasks if there is capacity', async () => { + // schedule 5 normal tasks and 1 low priority task + // setting the schedule long so they should only run once + const tasksToSchedule = []; + for (let i = 0; i < 5; i++) { + tasksToSchedule.push( + scheduleTask({ + taskType: 'sampleTask', + schedule: { interval: `1d` }, + params: {}, + }) + ); + } + tasksToSchedule.push( + scheduleTask({ + taskType: 'lowPriorityTask', + schedule: { interval: `1d` }, + params: {}, + }) + ); + const scheduledTasks = await Promise.all(tasksToSchedule); + + await retry.try(async () => { + const tasks = (await currentTasks()).docs; + expect(tasks.length).to.eql(6); + + const taskIds = tasks.map((task) => task.id); + const taskDocs: RawDoc[] = []; + await asyncForEach(scheduledTasks, async (scheduledTask) => { + expect(taskIds).to.contain(scheduledTask.id); + const doc: RawDoc[] = await historyDocs({ taskId: scheduledTask.id }); + expect(doc.length).to.eql(1); + taskDocs.push(...doc); + }); + + expect( + taskDocs.findIndex((taskDoc) => taskDoc._source.taskType === 'lowPriorityTask') + ).to.be.greaterThan(-1); + }); + }); + + it('should not claim low priority tasks when there is no capacity', async () => { + // schedule a bunch of normal priority tasks that run frequently + const tasksToSchedule = []; + for (let i = 0; i < 10; i++) { + tasksToSchedule.push( + scheduleTask({ + taskType: 'sampleTask', + schedule: { interval: `1s` }, + params: {}, + }) + ); + } + + // schedule a low priority task + tasksToSchedule.push( + scheduleTask({ + taskType: 'lowPriorityTask', + schedule: { interval: `1s` }, + params: {}, + }) + ); + const scheduledTasks = await Promise.all(tasksToSchedule); + + // make sure all tasks get created + await retry.try(async () => { + const tasks = (await currentTasks()).docs; + expect(tasks.length).to.eql(11); + + const taskIds = tasks.map((task) => task.id); + scheduledTasks.forEach((scheduledTask) => { + expect(taskIds).to.contain(scheduledTask.id); + }); + }); + + // wait for 30 seconds to let the multiple task claiming cycles run + await new Promise((r) => setTimeout(r, 30000)); + + const docs: RawDoc[] = await historyDocs({ taskType: 'lowPriorityTask' }); + expect(docs.length).to.eql(0); + }); + }); +} From 930b0127929009bbe58298983e3018a95fcec8ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Thu, 15 Feb 2024 16:10:16 +0100 Subject: [PATCH 04/40] [Obs AI Assistant] Add time range to conversation (#176925) This adds the time range to the screen context. This way the assistant will respond with visualisations for the selected range, instead of defaulting to the past 24 hours. image _When selecting the past 3 hours the visualisation produced by the assistant adheres to this_ --- .../components/app/service_overview/index.tsx | 19 ++++++++++++++++++- .../observability_ai_assistant/kibana.jsonc | 7 +++---- .../action_menu_item/action_menu_item.tsx | 18 +++++++++++------- .../components/chat/welcome_message.tsx | 4 ++-- .../public/types.ts | 3 +++ .../observability_ai_assistant/tsconfig.json | 3 ++- 6 files changed, 39 insertions(+), 15 deletions(-) diff --git a/x-pack/plugins/apm/public/components/app/service_overview/index.tsx b/x-pack/plugins/apm/public/components/app/service_overview/index.tsx index 743843c825210c..9813adc5d8a3ea 100644 --- a/x-pack/plugins/apm/public/components/app/service_overview/index.tsx +++ b/x-pack/plugins/apm/public/components/app/service_overview/index.tsx @@ -6,7 +6,7 @@ */ import { i18n } from '@kbn/i18n'; -import React from 'react'; +import React, { useEffect } from 'react'; import { EuiFlexGroup, @@ -16,6 +16,7 @@ import { EuiPanel, EuiSpacer, } from '@elastic/eui'; +import { useApmPluginContext } from '../../../context/apm_plugin/use_apm_plugin_context'; import { AgentName } from '../../../../typings/es_schemas/ui/fields/agent'; import { isOpenTelemetryAgentName, @@ -52,6 +53,22 @@ export function ServiceOverview() { const { serviceName, fallbackToTransactions, agentName, serverlessType } = useApmServiceContext(); + const { setScreenContext } = + useApmPluginContext().observabilityAIAssistant.service; + + useEffect(() => { + return setScreenContext({ + screenDescription: `The user is looking at the service overview page for ${serviceName}.`, + data: [ + { + name: 'service_name', + description: 'The name of the service', + value: serviceName, + }, + ], + }); + }, [setScreenContext, serviceName]); + const { query, query: { kuery, environment, rangeFrom, rangeTo, transactionType }, diff --git a/x-pack/plugins/observability_ai_assistant/kibana.jsonc b/x-pack/plugins/observability_ai_assistant/kibana.jsonc index a3eaad0d216a34..2ca4b560393f03 100644 --- a/x-pack/plugins/observability_ai_assistant/kibana.jsonc +++ b/x-pack/plugins/observability_ai_assistant/kibana.jsonc @@ -10,6 +10,7 @@ "requiredPlugins": [ "alerting", "actions", + "data", "dataViews", "features", "lens", @@ -24,10 +25,8 @@ "dataViews", "ml" ], - "requiredBundles": [ "kibanaReact", "kibanaUtils"], - "optionalPlugins": [ - "cloud" - ], + "requiredBundles": ["kibanaReact", "kibanaUtils"], + "optionalPlugins": ["cloud"], "extraPublicDirs": [] } } diff --git a/x-pack/plugins/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx b/x-pack/plugins/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx index c22d32e7a49d77..ca8af6956ff363 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx @@ -5,16 +5,20 @@ * 2.0. */ import React, { useEffect, useMemo, useState } from 'react'; +import datemath from '@elastic/datemath'; import { EuiFlexGroup, EuiFlexItem, EuiHeaderLink, EuiLoadingSpinner } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import moment from 'moment'; import { ObservabilityAIAssistantChatServiceProvider } from '../../context/observability_ai_assistant_chat_service_provider'; import { useAbortableAsync } from '../../hooks/use_abortable_async'; import { useObservabilityAIAssistant } from '../../hooks/use_observability_ai_assistant'; import { AssistantAvatar } from '../assistant_avatar'; import { ChatFlyout } from '../chat/chat_flyout'; +import { useKibana } from '../../hooks/use_kibana'; export function ObservabilityAIAssistantActionMenuItem() { const service = useObservabilityAIAssistant(); + const { plugins } = useKibana().services; const [isOpen, setIsOpen] = useState(false); @@ -44,15 +48,15 @@ export function ObservabilityAIAssistantActionMenuItem() { }; }, []); + const { from, to } = plugins.start.data.query.timefilter.timefilter.getTime(); useEffect(() => { - const unregister = service.setScreenContext({ - screenDescription: 'The user is looking at ' + window.location.href, - }); + const start = datemath.parse(from)?.format() ?? moment().subtract(1, 'day').toISOString(); + const end = datemath.parse(to)?.format() ?? moment().toISOString(); - return () => { - unregister(); - }; - }, [service]); + return service.setScreenContext({ + screenDescription: `The user is looking at ${window.location.href}. The current time range is ${start} - ${end}.`, + }); + }, [service, from, to]); if (!service.isEnabled()) { return null; diff --git a/x-pack/plugins/observability_ai_assistant/public/components/chat/welcome_message.tsx b/x-pack/plugins/observability_ai_assistant/public/components/chat/welcome_message.tsx index 0227ef42e28084..be6fc3fe77efab 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/chat/welcome_message.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/chat/welcome_message.tsx @@ -87,7 +87,7 @@ export function WelcomeMessage({ className={fullHeightClassName} > - + - +

{i18n.translate('xpack.observabilityAiAssistant.disclaimer.title', { defaultMessage: 'Welcome to the AI Assistant for Observability', diff --git a/x-pack/plugins/observability_ai_assistant/public/types.ts b/x-pack/plugins/observability_ai_assistant/public/types.ts index 3a4c4fbc59d7d5..2846a01b049c70 100644 --- a/x-pack/plugins/observability_ai_assistant/public/types.ts +++ b/x-pack/plugins/observability_ai_assistant/public/types.ts @@ -32,6 +32,7 @@ import type { TriggersAndActionsUIPublicPluginSetup, TriggersAndActionsUIPublicPluginStart, } from '@kbn/triggers-actions-ui-plugin/public'; +import { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { StreamingChatResponseEventWithoutError } from '../common/conversation_complete'; import type { ContextDefinition, @@ -112,6 +113,7 @@ export type ChatRegistrationRenderFunction = ({}: { export interface ConfigSchema {} export interface ObservabilityAIAssistantPluginSetupDependencies { + data: DataPublicPluginSetup; dataViews: DataViewsPublicPluginSetup; features: FeaturesPluginSetup; lens: LensPublicSetup; @@ -122,6 +124,7 @@ export interface ObservabilityAIAssistantPluginSetupDependencies { } export interface ObservabilityAIAssistantPluginStartDependencies { + data: DataPublicPluginStart; dataViews: DataViewsPublicPluginStart; features: FeaturesPluginStart; lens: LensPublicStart; diff --git a/x-pack/plugins/observability_ai_assistant/tsconfig.json b/x-pack/plugins/observability_ai_assistant/tsconfig.json index 13af731fd49dbc..177e87be3de664 100644 --- a/x-pack/plugins/observability_ai_assistant/tsconfig.json +++ b/x-pack/plugins/observability_ai_assistant/tsconfig.json @@ -68,7 +68,8 @@ "@kbn/visualization-utils", "@kbn/field-types", "@kbn/es-types", - "@kbn/esql-utils" + "@kbn/esql-utils", + "@kbn/data-plugin" ], "exclude": ["target/**/*"] } From f76e7ecef529710c0fd3d4e5dbf21792d2e3bd6c Mon Sep 17 00:00:00 2001 From: Miriam <31922082+MiriamAparicio@users.noreply.github.com> Date: Thu, 15 Feb 2024 15:20:20 +0000 Subject: [PATCH 05/40] [INFRA] Add alerts count to hosts data (#176034) Closes https://github.com/elastic/kibana/issues/175567 #### What has been done - create alerts infra client to retrieve alerts data - add endpoint to get the alerts count for hosts - merged alerts count with hosts data - add alertsCount badge to hosts table - sort by alert count by clicking on the column title - If no hosts have active alerts, the column should be hidden. - Default hosts sorting is alerts count and cpu desc https://github.com/elastic/kibana/assets/31922082/96794041-d129-49e2-920c-80b45c624144 --- x-pack/plugins/infra/common/constants.ts | 1 + .../http_api/infra/get_infra_metrics.ts | 15 ++-- .../metrics/hosts/components/tabs/config.ts | 1 - .../hosts/hooks/use_hosts_table.test.ts | 4 + .../metrics/hosts/hooks/use_hosts_table.tsx | 49 ++++++++-- .../hosts/hooks/use_hosts_table_url_state.ts | 4 +- .../pages/metrics/hosts/translations.ts | 4 + .../lib/adapters/framework/adapter_types.ts | 6 +- .../infra/server/routes/infra/index.ts | 13 ++- .../lib/helpers/get_infra_alerts_client.ts | 45 ++++++++++ .../server/routes/infra/lib/host/get_hosts.ts | 20 ++++- .../infra/lib/host/get_hosts_alerts_count.ts | 89 +++++++++++++++++++ .../infra/server/routes/infra/lib/mapper.ts | 22 +++-- .../infra/server/routes/infra/lib/types.ts | 2 + .../api_integration/apis/metrics_ui/infra.ts | 38 +++++++- .../test/functional/apps/infra/hosts_view.ts | 70 ++++++++------- .../page_objects/infra_hosts_view.ts | 31 +++++-- 17 files changed, 351 insertions(+), 63 deletions(-) create mode 100644 x-pack/plugins/infra/server/routes/infra/lib/helpers/get_infra_alerts_client.ts create mode 100644 x-pack/plugins/infra/server/routes/infra/lib/host/get_hosts_alerts_count.ts diff --git a/x-pack/plugins/infra/common/constants.ts b/x-pack/plugins/infra/common/constants.ts index 2a4e9b5e21eae7..e4621f63793c2d 100644 --- a/x-pack/plugins/infra/common/constants.ts +++ b/x-pack/plugins/infra/common/constants.ts @@ -11,6 +11,7 @@ export const METRICS_APP = 'metrics'; export const LOGS_APP = 'logs'; export const METRICS_FEATURE_ID = 'infrastructure'; +export const INFRA_ALERT_FEATURE_ID = 'infrastructure'; export const LOGS_FEATURE_ID = 'logs'; export type InfraFeatureId = typeof METRICS_FEATURE_ID | typeof LOGS_FEATURE_ID; diff --git a/x-pack/plugins/infra/common/http_api/infra/get_infra_metrics.ts b/x-pack/plugins/infra/common/http_api/infra/get_infra_metrics.ts index f0b0f4eb7f0ab9..1c6076b277a553 100644 --- a/x-pack/plugins/infra/common/http_api/infra/get_infra_metrics.ts +++ b/x-pack/plugins/infra/common/http_api/infra/get_infra_metrics.ts @@ -53,11 +53,16 @@ export const GetInfraMetricsRequestBodyPayloadRT = rt.intersection([ }), ]); -export const InfraAssetMetricsItemRT = rt.type({ - name: rt.string, - metrics: rt.array(InfraAssetMetricsRT), - metadata: rt.array(InfraAssetMetadataRT), -}); +export const InfraAssetMetricsItemRT = rt.intersection([ + rt.type({ + name: rt.string, + metrics: rt.array(InfraAssetMetricsRT), + metadata: rt.array(InfraAssetMetadataRT), + }), + rt.partial({ + alertsCount: rt.number, + }), +]); export const GetInfraMetricsResponsePayloadRT = rt.type({ type: rt.literal('host'), diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/config.ts b/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/config.ts index cf4374cae94fab..253bb59f79d667 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/config.ts +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/config.ts @@ -11,5 +11,4 @@ import type { ValidFeatureId } from '@kbn/rule-data-utils'; export const ALERTS_PER_PAGE = 10; export const ALERTS_TABLE_ID = 'xpack.infra.hosts.alerts.table'; -export const INFRA_ALERT_FEATURE_ID = 'infrastructure'; export const infraAlertFeatureIds: ValidFeatureId[] = [AlertConsumers.INFRASTRUCTURE]; diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts b/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts index 1d7ea3bd825389..9534406d5dcfa4 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts @@ -72,6 +72,7 @@ const mockHostNode: InfraAssetMetricsItem[] = [ { name: 'cloud.provider', value: 'aws' }, ], name: 'host-0', + alertsCount: 0, }, { metrics: [ @@ -109,6 +110,7 @@ const mockHostNode: InfraAssetMetricsItem[] = [ { name: 'host.ip', value: '243.86.94.22' }, ], name: 'host-1', + alertsCount: 0, }, ]; @@ -161,6 +163,7 @@ describe('useHostTable hook', () => { diskSpaceUsage: 0.2040001, memoryFree: 34359.738368, normalizedLoad1m: 239.2040001, + alertsCount: 0, }, { name: 'host-1', @@ -178,6 +181,7 @@ describe('useHostTable hook', () => { diskSpaceUsage: 0.5400000214576721, memoryFree: 9.194304, normalizedLoad1m: 100, + alertsCount: 0, }, ]; diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx index 446a0c577bca9c..c54877bd11a20d 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx @@ -13,6 +13,8 @@ import { isEqual } from 'lodash'; import { isNumber } from 'lodash/fp'; import { CloudProvider } from '@kbn/custom-icons'; import { findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; +import { EuiToolTip } from '@elastic/eui'; +import { EuiBadge } from '@elastic/eui'; import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; import { createInventoryMetricFormatter } from '../../inventory_view/lib/create_inventory_metric_formatter'; import { EntryTitle } from '../components/table/entry_title'; @@ -44,6 +46,7 @@ interface HostMetadata { export type HostNodeRow = HostMetadata & HostMetrics & { name: string; + alertsCount?: number; }; /** @@ -54,7 +57,7 @@ const formatMetric = (type: InfraAssetMetricType, value: number | undefined | nu }; const buildItemsList = (nodes: InfraAssetMetricsItem[]): HostNodeRow[] => { - return nodes.map(({ metrics, metadata, name }) => { + return nodes.map(({ metrics, metadata, name, alertsCount }) => { const metadataKeyValue = metadata.reduce( (acc, curr) => ({ ...acc, @@ -79,12 +82,14 @@ const buildItemsList = (nodes: InfraAssetMetricsItem[]): HostNodeRow[] => { }), {} as HostMetrics ), + + alertsCount: alertsCount ?? 0, }; }); }; -const isTitleColumn = (cell: any): cell is HostNodeRow['title'] => { - return typeof cell === 'object' && cell && 'name' in cell; +const isTitleColumn = (cell: HostNodeRow[keyof HostNodeRow]): cell is HostNodeRow['title'] => { + return cell !== null && typeof cell === 'object' && cell && 'name' in cell; }; const sortValues = (aValue: any, bValue: any, { direction }: Sorting) => { @@ -124,6 +129,8 @@ export const useHostsTable = () => { const [selectedItems, setSelectedItems] = useState([]); const { hostNodes } = useHostsViewContext(); + const displayAlerts = hostNodes.some((item) => 'alertsCount' in item); + const { value: formulas } = useAsync(() => inventoryModel.metrics.getFormulas()); const [{ detailsItemId, pagination, sorting }, setProperties] = useHostsTableUrlState(); @@ -221,6 +228,39 @@ export const useHostsTable = () => { }, ], }, + ...(displayAlerts + ? [ + { + name: TABLE_COLUMN_LABEL.alertsCount, + field: 'alertsCount', + sortable: true, + 'data-test-subj': 'hostsView-tableRow-alertsCount', + render: (alertsCount: HostNodeRow['alertsCount'], row: HostNodeRow) => { + if (!alertsCount) { + return null; + } + return ( + + { + setProperties({ detailsItemId: row.id === detailsItemId ? null : row.id }); + }} + onClickAriaLabel={TABLE_COLUMN_LABEL.alertsCount} + iconOnClick={() => { + setProperties({ detailsItemId: row.id === detailsItemId ? null : row.id }); + }} + iconOnClickAriaLabel={TABLE_COLUMN_LABEL.alertsCount} + > + {alertsCount} + + + ); + }, + }, + ] + : []), { name: TABLE_COLUMN_LABEL.title, field: 'title', @@ -315,7 +355,6 @@ export const useHostsTable = () => { 'data-test-subj': 'hostsView-tableRow-rx', render: (avg: number) => formatMetric('rx', avg), align: 'right', - width: '120px', }, { name: ( @@ -330,7 +369,6 @@ export const useHostsTable = () => { 'data-test-subj': 'hostsView-tableRow-tx', render: (avg: number) => formatMetric('tx', avg), align: 'right', - width: '120px', }, ], [ @@ -344,6 +382,7 @@ export const useHostsTable = () => { formulas?.tx.value, reportHostEntryClick, setProperties, + displayAlerts, ] ); diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table_url_state.ts b/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table_url_state.ts index c1dcafefaccc3c..dd53bd96dc1854 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table_url_state.ts +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table_url_state.ts @@ -18,8 +18,8 @@ import { DEFAULT_PAGE_SIZE, LOCAL_STORAGE_PAGE_SIZE_KEY } from '../constants'; export const GET_DEFAULT_TABLE_PROPERTIES: TableProperties = { detailsItemId: null, sorting: { - direction: 'asc', - field: 'name', + direction: 'desc', + field: 'alertsCount', }, pagination: { pageIndex: 0, diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/translations.ts b/x-pack/plugins/infra/public/pages/metrics/hosts/translations.ts index 304b1980d965c6..9be99e1d70a8b3 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/translations.ts +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/translations.ts @@ -8,6 +8,10 @@ import { i18n } from '@kbn/i18n'; export const TABLE_COLUMN_LABEL = { + alertsCount: i18n.translate('xpack.infra.hostsViewPage.table.alertsColumnHeader', { + defaultMessage: 'Active alerts', + }), + title: i18n.translate('xpack.infra.hostsViewPage.table.nameColumnHeader', { defaultMessage: 'Name', }), diff --git a/x-pack/plugins/infra/server/lib/adapters/framework/adapter_types.ts b/x-pack/plugins/infra/server/lib/adapters/framework/adapter_types.ts index 56b8fe29c85d66..398eaa0ccf3b8d 100644 --- a/x-pack/plugins/infra/server/lib/adapters/framework/adapter_types.ts +++ b/x-pack/plugins/infra/server/lib/adapters/framework/adapter_types.ts @@ -22,7 +22,10 @@ import { PluginSetupContract as FeaturesPluginSetup } from '@kbn/features-plugin import { SpacesPluginSetup } from '@kbn/spaces-plugin/server'; import { PluginSetupContract as AlertingPluginContract } from '@kbn/alerting-plugin/server'; import { MlPluginSetup } from '@kbn/ml-plugin/server'; -import { RuleRegistryPluginSetupContract } from '@kbn/rule-registry-plugin/server'; +import { + RuleRegistryPluginSetupContract, + RuleRegistryPluginStartContract, +} from '@kbn/rule-registry-plugin/server'; import { ObservabilityPluginSetup } from '@kbn/observability-plugin/server'; import { LogsSharedPluginSetup, LogsSharedPluginStart } from '@kbn/logs-shared-plugin/server'; import { VersionedRouteConfig } from '@kbn/core-http-server'; @@ -59,6 +62,7 @@ export interface InfraServerPluginStartDeps { dataViews: DataViewsPluginStart; logsShared: LogsSharedPluginStart; profilingDataAccess?: ProfilingDataAccessPluginStart; + ruleRegistry: RuleRegistryPluginStartContract; apmDataAccess: ApmDataAccessPluginStart; } diff --git a/x-pack/plugins/infra/server/routes/infra/index.ts b/x-pack/plugins/infra/server/routes/infra/index.ts index d98e8034e6207b..4d8fd931082c13 100644 --- a/x-pack/plugins/infra/server/routes/infra/index.ts +++ b/x-pack/plugins/infra/server/routes/infra/index.ts @@ -14,6 +14,7 @@ import { GetInfraMetricsResponsePayloadRT, } from '../../../common/http_api/infra'; import { InfraBackendLibs } from '../../lib/infra_types'; +import { getInfraAlertsClient } from './lib/helpers/get_infra_alerts_client'; import { getHosts } from './lib/host/get_hosts'; export const initInfraMetricsRoute = (libs: InfraBackendLibs) => { @@ -35,10 +36,20 @@ export const initInfraMetricsRoute = (libs: InfraBackendLibs) => { try { const searchClient = data.search.asScoped(request); + const alertsClient = await getInfraAlertsClient({ + getStartServices: libs.getStartServices, + request, + }); const soClient = savedObjects.getScopedClient(request); const source = await libs.sources.getSourceConfiguration(soClient, params.sourceId); - const hosts = await getHosts({ searchClient, sourceConfig: source.configuration, params }); + const hosts = await getHosts({ + searchClient, + alertsClient, + sourceConfig: source.configuration, + params, + }); + return response.ok({ body: GetInfraMetricsResponsePayloadRT.encode(hosts), }); diff --git a/x-pack/plugins/infra/server/routes/infra/lib/helpers/get_infra_alerts_client.ts b/x-pack/plugins/infra/server/routes/infra/lib/helpers/get_infra_alerts_client.ts new file mode 100644 index 00000000000000..7110a822fb8a45 --- /dev/null +++ b/x-pack/plugins/infra/server/routes/infra/lib/helpers/get_infra_alerts_client.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { isEmpty } from 'lodash'; +import { ESSearchRequest, InferSearchResponseOf } from '@kbn/es-types'; +import { ParsedTechnicalFields } from '@kbn/rule-registry-plugin/common'; +import { KibanaRequest } from '@kbn/core/server'; +import type { InfraPluginStartServicesAccessor } from '../../../../types'; + +type RequiredParams = ESSearchRequest & { + size: number; + track_total_hits: boolean | number; +}; + +export type InfraAlertsClient = Awaited>; + +export async function getInfraAlertsClient({ + getStartServices, + request, +}: { + getStartServices: InfraPluginStartServicesAccessor; + request: KibanaRequest; +}) { + const [, { ruleRegistry }] = await getStartServices(); + const alertsClient = await ruleRegistry.getRacClientWithRequest(request); + const infraAlertsIndices = await alertsClient.getAuthorizedAlertsIndices(['infrastructure']); + + if (!infraAlertsIndices || isEmpty(infraAlertsIndices)) { + throw Error('No alert indices exist for "infrastrucuture"'); + } + + return { + search( + searchParams: TParams + ): Promise> { + return alertsClient.find({ + ...searchParams, + index: infraAlertsIndices.join(','), + }) as Promise; + }, + }; +} diff --git a/x-pack/plugins/infra/server/routes/infra/lib/host/get_hosts.ts b/x-pack/plugins/infra/server/routes/infra/lib/host/get_hosts.ts index 6d442246617506..6eab207f7fbae2 100644 --- a/x-pack/plugins/infra/server/routes/infra/lib/host/get_hosts.ts +++ b/x-pack/plugins/infra/server/routes/infra/lib/host/get_hosts.ts @@ -11,6 +11,7 @@ import { mapToApiResponse } from '../mapper'; import { hasFilters } from '../utils'; import { GetHostsArgs } from '../types'; import { getAllHosts } from './get_all_hosts'; +import { getHostsAlertsCount } from './get_hosts_alerts_count'; export const getHosts = async (args: GetHostsArgs): Promise => { const runFilterQuery = hasFilters(args.params.query); @@ -23,8 +24,23 @@ export const getHosts = async (args: GetHostsArgs): Promise { diff --git a/x-pack/plugins/infra/server/routes/infra/lib/host/get_hosts_alerts_count.ts b/x-pack/plugins/infra/server/routes/infra/lib/host/get_hosts_alerts_count.ts new file mode 100644 index 00000000000000..d1e17e8d133ee0 --- /dev/null +++ b/x-pack/plugins/infra/server/routes/infra/lib/host/get_hosts_alerts_count.ts @@ -0,0 +1,89 @@ +/* + * Copyright 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 { kqlQuery, termQuery, termsQuery } from '@kbn/observability-plugin/server'; +import { + ALERT_RULE_PRODUCER, + ALERT_STATUS, + ALERT_STATUS_ACTIVE, + ALERT_UUID, +} from '@kbn/rule-data-utils'; +import { INFRA_ALERT_FEATURE_ID } from '../../../../../common/constants'; +import { BUCKET_KEY, MAX_SIZE } from '../constants'; +import { InfraAlertsClient } from '../helpers/get_infra_alerts_client'; + +export type HostAlertsResponse = Array<{ + name: string; + alertsCount: number; +}>; + +export async function getHostsAlertsCount({ + alertsClient, + hostNamesShortList, + kuery, + from, + to, + maxNumHosts = MAX_SIZE, +}: { + alertsClient: InfraAlertsClient; + hostNamesShortList: string[]; + kuery?: string; + from: string; + to: string; + maxNumHosts?: number; +}): Promise { + const rangeQuery = [ + { + range: { + 'kibana.alert.time_range': { + gte: from, + lte: to, + format: 'strict_date_optional_time', + }, + }, + }, + ]; + const params = { + size: 0, + track_total_hits: false, + query: { + bool: { + filter: [ + ...termQuery(ALERT_RULE_PRODUCER, INFRA_ALERT_FEATURE_ID), + ...termQuery(ALERT_STATUS, ALERT_STATUS_ACTIVE), + ...termsQuery(BUCKET_KEY, ...hostNamesShortList), + ...rangeQuery, + ...kqlQuery(kuery), + ], + }, + }, + aggs: { + hosts: { + terms: { + field: BUCKET_KEY, + size: maxNumHosts, + }, + aggs: { + alerts_count: { + cardinality: { + field: ALERT_UUID, + }, + }, + }, + }, + }, + }; + + const result = await alertsClient.search(params); + + const filterAggBuckets = result.aggregations?.hosts.buckets ?? []; + + return filterAggBuckets.map((bucket) => ({ + name: bucket.key as string, + alertsCount: bucket.alerts_count.value, + })); +} diff --git a/x-pack/plugins/infra/server/routes/infra/lib/mapper.ts b/x-pack/plugins/infra/server/routes/infra/lib/mapper.ts index 89d2e71b364f9e..cc922d42c89911 100644 --- a/x-pack/plugins/infra/server/routes/infra/lib/mapper.ts +++ b/x-pack/plugins/infra/server/routes/infra/lib/mapper.ts @@ -20,10 +20,12 @@ import { HostsMetricsSearchValueRT, } from './types'; import { METADATA_AGGREGATION_NAME } from './constants'; +import { HostAlertsResponse } from './host/get_hosts_alerts_count'; export const mapToApiResponse = ( params: GetInfraMetricsRequestBodyPayload, - buckets?: HostsMetricsSearchBucket[] | undefined + buckets?: HostsMetricsSearchBucket[] | undefined, + alertsCountResponse?: HostAlertsResponse ): GetInfraMetricsResponsePayload => { if (!buckets) { return { @@ -32,12 +34,20 @@ export const mapToApiResponse = ( }; } - const hosts = buckets.map((bucket) => { - const metrics = convertMetricBucket(params, bucket); - const metadata = convertMetadataBucket(bucket); + const hosts = buckets + .map((bucket) => { + const metrics = convertMetricBucket(params, bucket); + const metadata = convertMetadataBucket(bucket); - return { name: bucket.key as string, metrics, metadata }; - }); + const cpuValue = metrics.find((metric) => metric.name === 'cpu')?.value ?? 0; + const alerts = alertsCountResponse?.find((item) => item.name === bucket.key); + + return { name: bucket.key as string, metrics, metadata, cpuValue, ...alerts }; + }) + .sort((a, b) => { + return b.cpuValue - a.cpuValue; + }) + .map(({ cpuValue, ...rest }) => rest); return { type: params.type, diff --git a/x-pack/plugins/infra/server/routes/infra/lib/types.ts b/x-pack/plugins/infra/server/routes/infra/lib/types.ts index d9800112e7dfe5..ab097e91b2b095 100644 --- a/x-pack/plugins/infra/server/routes/infra/lib/types.ts +++ b/x-pack/plugins/infra/server/routes/infra/lib/types.ts @@ -12,6 +12,7 @@ import { InfraStaticSourceConfiguration } from '../../../../common/source_config import { GetInfraMetricsRequestBodyPayload } from '../../../../common/http_api/infra'; import { BasicMetricValueRT, TopMetricsTypeRT } from '../../../lib/metrics/types'; +import { InfraAlertsClient } from './helpers/get_infra_alerts_client'; export const FilteredMetricsTypeRT = rt.type({ doc_count: rt.number, @@ -76,6 +77,7 @@ export interface HostsMetricsAggregationQueryConfig { export interface GetHostsArgs { searchClient: ISearchClient; + alertsClient: InfraAlertsClient; sourceConfig: InfraStaticSourceConfiguration; params: GetInfraMetricsRequestBodyPayload; } diff --git a/x-pack/test/api_integration/apis/metrics_ui/infra.ts b/x-pack/test/api_integration/apis/metrics_ui/infra.ts index baa907c25575f4..c3465c68ae7fef 100644 --- a/x-pack/test/api_integration/apis/metrics_ui/infra.ts +++ b/x-pack/test/api_integration/apis/metrics_ui/infra.ts @@ -165,8 +165,8 @@ export default function ({ getService }: FtrProviderContext) { const names = (response.body as GetInfraMetricsResponsePayload).nodes.map((p) => p.name); expect(names).eql([ - 'gke-observability-8--observability-8--bc1afd95-f0zc', 'gke-observability-8--observability-8--bc1afd95-ngmh', + 'gke-observability-8--observability-8--bc1afd95-f0zc', 'gke-observability-8--observability-8--bc1afd95-nhhw', ]); }); @@ -208,8 +208,9 @@ export default function ({ getService }: FtrProviderContext) { const names = (response.body as GetInfraMetricsResponsePayload).nodes.map((p) => p.name); expect(names).eql([ - 'gke-observability-8--observability-8--bc1afd95-f0zc', 'gke-observability-8--observability-8--bc1afd95-ngmh', + 'gke-observability-8--observability-8--bc1afd95-f0zc', + , ]); }); @@ -269,5 +270,38 @@ export default function ({ getService }: FtrProviderContext) { ); }); }); + + describe('Host with active alerts', () => { + before(async () => { + await Promise.all([ + esArchiver.load('x-pack/test/functional/es_archives/infra/alerts'), + esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs'), + ]); + }); + + after(async () => { + await Promise.all([ + esArchiver.unload('x-pack/test/functional/es_archives/infra/alerts'), + esArchiver.unload('x-pack/test/functional/es_archives/infra/metrics_and_logs'), + ]); + }); + + describe('fetch hosts', () => { + it('should return metrics for a host with alert count', async () => { + const body: GetInfraMetricsRequestBodyPayload = { + ...basePayload, + range: { + from: '2018-10-17T19:42:21.208Z', + to: '2018-10-17T19:58:03.952Z', + }, + limit: 1, + }; + const response = await makeRequest({ body, expectedHTTPCode: 200 }); + + expect(response.body.nodes).length(1); + expect(response.body.nodes[0].alertsCount).eql(2); + }); + }); + }); }); } diff --git a/x-pack/test/functional/apps/infra/hosts_view.ts b/x-pack/test/functional/apps/infra/hosts_view.ts index 260b48c26f0fc8..a185023c9b33d7 100644 --- a/x-pack/test/functional/apps/infra/hosts_view.ts +++ b/x-pack/test/functional/apps/infra/hosts_view.ts @@ -34,6 +34,7 @@ const END_HOST_PROCESSES_DATE = moment.utc(DATES.metricsAndLogs.hosts.processesD const tableEntries = [ { + alertsCount: 2, title: 'demo-stack-apache-01', cpuUsage: '1.2%', normalizedLoad: '0.5%', @@ -44,36 +45,29 @@ const tableEntries = [ tx: '0 bit/s', }, { - title: 'demo-stack-client-01', - cpuUsage: '0.5%', - normalizedLoad: '0.1%', - memoryUsage: '13.8%', - memoryFree: '3.3 GB', - diskSpaceUsage: '16.9%', - rx: '0 bit/s', - tx: '0 bit/s', - }, - { - title: 'demo-stack-haproxy-01', - cpuUsage: '0.8%', + alertsCount: 2, + title: 'demo-stack-mysql-01', + cpuUsage: '0.9%', normalizedLoad: '0%', - memoryUsage: '16.5%', + memoryUsage: '18.2%', memoryFree: '3.2 GB', - diskSpaceUsage: '16.3%', + diskSpaceUsage: '17.8%', rx: '0 bit/s', tx: '0 bit/s', }, { - title: 'demo-stack-mysql-01', - cpuUsage: '0.9%', + alertsCount: 2, + title: 'demo-stack-redis-01', + cpuUsage: '0.8%', normalizedLoad: '0%', - memoryUsage: '18.2%', - memoryFree: '3.2 GB', - diskSpaceUsage: '17.8%', + memoryUsage: '15.9%', + memoryFree: '3.3 GB', + diskSpaceUsage: '16.3%', rx: '0 bit/s', tx: '0 bit/s', }, { + alertsCount: 0, title: 'demo-stack-nginx-01', cpuUsage: '0.8%', normalizedLoad: '1.4%', @@ -84,15 +78,27 @@ const tableEntries = [ tx: '0 bit/s', }, { - title: 'demo-stack-redis-01', + alertsCount: 0, + title: 'demo-stack-haproxy-01', cpuUsage: '0.8%', normalizedLoad: '0%', - memoryUsage: '15.9%', - memoryFree: '3.3 GB', + memoryUsage: '16.5%', + memoryFree: '3.2 GB', diskSpaceUsage: '16.3%', rx: '0 bit/s', tx: '0 bit/s', }, + { + alertsCount: 0, + title: 'demo-stack-client-01', + cpuUsage: '0.5%', + normalizedLoad: '0.1%', + memoryUsage: '13.8%', + memoryFree: '3.3 GB', + diskSpaceUsage: '16.9%', + rx: '0 bit/s', + tx: '0 bit/s', + }, ]; export default ({ getPageObjects, getService }: FtrProviderContext) => { @@ -610,10 +616,10 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await Promise.all( [ { metric: 'hostsCount', value: '3' }, - { metric: 'cpuUsage', value: '0.8%' }, + { metric: 'cpuUsage', value: '0.9%' }, { metric: 'normalizedLoad1m', value: '0.2%' }, - { metric: 'memoryUsage', value: '16.3%' }, - { metric: 'diskUsage', value: '16.9%' }, + { metric: 'memoryUsage', value: '17.5%' }, + { metric: 'diskUsage', value: '17.2%' }, ].map(async ({ metric, value }) => { await retry.try(async () => { const tileValue = await pageObjects.infraHostsView.getKPITileValue(metric); @@ -626,12 +632,12 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { it('should update the alerts count on a search submit', async () => { const alertsCount = await pageObjects.infraHostsView.getAlertsCount(); - expect(alertsCount).to.be('2'); + expect(alertsCount).to.be('6'); }); it('should update the alerts table content on a search submit', async () => { - const ACTIVE_ALERTS = 2; - const RECOVERED_ALERTS = 2; + const ACTIVE_ALERTS = 6; + const RECOVERED_ALERTS = 4; const ALL_ALERTS = ACTIVE_ALERTS + RECOVERED_ALERTS; const COLUMNS = 11; @@ -708,7 +714,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await pageObjects.infraHostsView.sortByCpuUsage(); let hostRows = await pageObjects.infraHostsView.getHostsTableData(); const hostDataFirtPage = await pageObjects.infraHostsView.getHostsRowData(hostRows[0]); - expect(hostDataFirtPage).to.eql(tableEntries[1]); + expect(hostDataFirtPage).to.eql(tableEntries[5]); await pageObjects.infraHostsView.paginateTo(2); hostRows = await pageObjects.infraHostsView.getHostsTableData(); @@ -725,7 +731,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await pageObjects.infraHostsView.paginateTo(2); hostRows = await pageObjects.infraHostsView.getHostsTableData(); const hostDataLastPage = await pageObjects.infraHostsView.getHostsRowData(hostRows[0]); - expect(hostDataLastPage).to.eql(tableEntries[1]); + expect(hostDataLastPage).to.eql(tableEntries[5]); }); it('should sort by text field asc', async () => { @@ -737,14 +743,14 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await pageObjects.infraHostsView.paginateTo(2); hostRows = await pageObjects.infraHostsView.getHostsTableData(); const hostDataLastPage = await pageObjects.infraHostsView.getHostsRowData(hostRows[0]); - expect(hostDataLastPage).to.eql(tableEntries[5]); + expect(hostDataLastPage).to.eql(tableEntries[2]); }); it('should sort by text field desc', async () => { await pageObjects.infraHostsView.sortByTitle(); let hostRows = await pageObjects.infraHostsView.getHostsTableData(); const hostDataFirtPage = await pageObjects.infraHostsView.getHostsRowData(hostRows[0]); - expect(hostDataFirtPage).to.eql(tableEntries[5]); + expect(hostDataFirtPage).to.eql(tableEntries[2]); await pageObjects.infraHostsView.paginateTo(2); hostRows = await pageObjects.infraHostsView.getHostsTableData(); diff --git a/x-pack/test/functional/page_objects/infra_hosts_view.ts b/x-pack/test/functional/page_objects/infra_hosts_view.ts index 60c4f0727e7c03..31ae75c4000d69 100644 --- a/x-pack/test/functional/page_objects/infra_hosts_view.ts +++ b/x-pack/test/functional/page_objects/infra_hosts_view.ts @@ -66,10 +66,29 @@ export function InfraHostsViewProvider({ getService }: FtrProviderContext) { const cells = await row.findAllByCssSelector('[data-test-subj*="hostsView-tableRow-"]'); // Retrieve content for each cell - const [title, cpuUsage, normalizedLoad, memoryUsage, memoryFree, diskSpaceUsage, rx, tx] = - await Promise.all(cells.map((cell) => this.getHostsCellContent(cell))); - - return { title, cpuUsage, normalizedLoad, memoryUsage, memoryFree, diskSpaceUsage, rx, tx }; + const [ + alertsCount, + title, + cpuUsage, + normalizedLoad, + memoryUsage, + memoryFree, + diskSpaceUsage, + rx, + tx, + ] = await Promise.all(cells.map((cell) => this.getHostsCellContent(cell))); + + return { + alertsCount, + title, + cpuUsage, + normalizedLoad, + memoryUsage, + memoryFree, + diskSpaceUsage, + rx, + tx, + }; }, async getHostsCellContent(cell: WebElementWrapper) { @@ -235,11 +254,11 @@ export function InfraHostsViewProvider({ getService }: FtrProviderContext) { // Sorting getCpuUsageHeader() { - return testSubjects.find('tableHeaderCell_cpu_2'); + return testSubjects.find('tableHeaderCell_cpu_3'); }, getTitleHeader() { - return testSubjects.find('tableHeaderCell_title_1'); + return testSubjects.find('tableHeaderCell_title_2'); }, async sortByCpuUsage() { From 07b910f02c3d34174ee15bb745fbc897975cd464 Mon Sep 17 00:00:00 2001 From: Kevin Qualters <56408403+kqualters-elastic@users.noreply.github.com> Date: Thu, 15 Feb 2024 11:01:44 -0500 Subject: [PATCH 06/40] [Security Solution] Update mappings script to be able to be run directly and from yarn again (#176880) ## Summary This pr https://github.com/elastic/kibana/pull/168047 broke the mappings script so that it can only be run directly, and not from package.json. This pr changes it so that the script works in both scenarios. --- .../scripts/mappings/mappings_loader_script.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/security_solution/scripts/mappings/mappings_loader_script.ts b/x-pack/plugins/security_solution/scripts/mappings/mappings_loader_script.ts index 7997401f35e704..d8767d21a677c8 100644 --- a/x-pack/plugins/security_solution/scripts/mappings/mappings_loader_script.ts +++ b/x-pack/plugins/security_solution/scripts/mappings/mappings_loader_script.ts @@ -11,7 +11,14 @@ import path from 'path'; import yargs from 'yargs'; import { execSync } from 'child_process'; -const CONFIG_PATH = '../../../../../test/functional/config.base.js'; +const requireMain = require.main; +let appDir = process.cwd(); +if (requireMain) { + appDir = path.dirname(requireMain.filename); +} + +const CONFIG_PATH = path.resolve(appDir, '../../../../../test/functional/config.base.js'); +const ES_ARCHIVER_PATH = path.resolve(appDir, '../../../../../scripts/es_archiver'); const loadAllIndices = (esUrl: string, kibanaUrl: string, mappingsDir: string) => { const exec = (cmd: string) => execSync(cmd, { stdio: 'inherit' }); @@ -40,7 +47,7 @@ const loadAllIndices = (esUrl: string, kibanaUrl: string, mappingsDir: string) = return; } exec( - `node ../../../../../scripts/es_archiver load ${fullPath} --config "${CONFIG_PATH}" --es-url=${esUrl} --kibana-url=${kibanaUrl}` + `node ${ES_ARCHIVER_PATH} load ${fullPath} --config "${CONFIG_PATH}" --es-url=${esUrl} --kibana-url=${kibanaUrl}` ); }); }); From 2ebd8dd83ef8a6863bd84ce2435cfc42105b8de6 Mon Sep 17 00:00:00 2001 From: Coen Warmer Date: Thu, 15 Feb 2024 17:03:40 +0100 Subject: [PATCH 07/40] Make sure container doesn't overflow (#177024) ## Summary Fixes an issue where due to flexbox'es fantastic API every container needs a `min-width` set, otherwise it won't honor `width: 100%` when a child element overflows. Also cleans up some stuff. --- .../public/components/chat/chat_body.tsx | 1 + .../public/components/page_template.tsx | 1 + .../conversations/conversation_view.tsx | 126 +++++++++--------- 3 files changed, 64 insertions(+), 64 deletions(-) diff --git a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_body.tsx b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_body.tsx index a89419c366a2dd..83eae35e59f97e 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_body.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_body.tsx @@ -154,6 +154,7 @@ export function ChatBody({ } const containerClassName = css` + min-width: 0; max-height: 100%; max-width: ${startedFrom === 'conversationView' ? 1200 - 250 + 'px' // page template max width - conversation list width. diff --git a/x-pack/plugins/observability_ai_assistant/public/components/page_template.tsx b/x-pack/plugins/observability_ai_assistant/public/components/page_template.tsx index 94c36f463aaf41..7cab8d586c83ee 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/page_template.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/page_template.tsx @@ -36,6 +36,7 @@ export function ObservabilityAIAssistantPageTemplate({ children }: { children: R contentProps: { className: pageSectionContentClassName, }, + paddingSize: 'none', }} > {children} diff --git a/x-pack/plugins/observability_ai_assistant/public/routes/conversations/conversation_view.tsx b/x-pack/plugins/observability_ai_assistant/public/routes/conversations/conversation_view.tsx index 0f49389c1c60db..91f884dbd84c9e 100644 --- a/x-pack/plugins/observability_ai_assistant/public/routes/conversations/conversation_view.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/routes/conversations/conversation_view.tsx @@ -24,10 +24,6 @@ import { useObservabilityAIAssistantParams } from '../../hooks/use_observability import { useObservabilityAIAssistantRouter } from '../../hooks/use_observability_ai_assistant_router'; import { ChatInlineEditingContent } from '../../components/chat/chat_inline_edit'; -const containerClassName = css` - max-width: 100%; -`; - const SECOND_SLOT_CONTAINER_WIDTH = 400; export function ConversationView() { @@ -120,6 +116,10 @@ export function ConversationView() { // eslint-disable-next-line react-hooks/exhaustive-deps }, []); + const containerClassName = css` + max-width: 100%; + `; + const conversationListContainerName = css` min-width: 250px; width: 250px; @@ -150,67 +150,65 @@ export function ConversationView() { `; return ( - <> - - - { - if (conversationId) { - observabilityAIAssistantRouter.push('/conversations/new', { - path: {}, - query: {}, - }); - } else { - // clear the chat - chatBodyKeyRef.current = v4(); - forceUpdate(); - } - }} - onClickChat={(id) => { - navigateToConversation(id, false); - }} - onClickDeleteConversation={(id) => { - if (conversationId === id) { - navigateToConversation(undefined, false); - } - }} + + + { + if (conversationId) { + observabilityAIAssistantRouter.push('/conversations/new', { + path: {}, + query: {}, + }); + } else { + // clear the chat + chatBodyKeyRef.current = v4(); + forceUpdate(); + } + }} + onClickChat={(id) => { + navigateToConversation(id, false); + }} + onClickDeleteConversation={(id) => { + if (conversationId === id) { + navigateToConversation(undefined, false); + } + }} + /> + + + + {!chatService.value ? ( + + + + + + + ) : null} + + {chatService.value && ( + + - - - - {!chatService.value ? ( - - - - - - - ) : null} - - {chatService.value && ( - - -
- -
-
- )} -
- +
+ +
+ + )} + ); } From 1c2321e1018f259a2eeb811a8f5a7141115f339f Mon Sep 17 00:00:00 2001 From: Marco Antonio Ghiani Date: Thu, 15 Feb 2024 17:06:15 +0100 Subject: [PATCH 08/40] [Logs Explorer] Expose customization events (#176825) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 📓 Summary This work is a follow-up of the newly introduced [support to logs backed data views](https://github.com/elastic/kibana/pull/176078) in Logs Explorer. In [a comment](https://github.com/elastic/kibana/pull/176078#discussion_r1486811951) from the PR mentioned above, we discussed delegating to the consumers the responsibility to redirect to discover when selecting a non-logs data view, to prevent hard-coding a page-wide side-effect of navigating to a different URL. This introduces a new customization interface for the LogsExplorer that controls specific actions, starting from the first added event `onUknownDataViewSelection`. In case the consumers of this component do not provide the event handler, the data view entry in the data source selector will appear disabled and will not be clickable. Screenshot 2024-02-13 at 15 45 30 ## Example When creating the controller to pass into the LogsExplorer component, we can specify the event for handling the discover navigation as follow: ```ts createLogsExplorerController({ customizations: { events: { onUknownDataViewSelection: (context) => { /* ... */ }, }, }, }); ``` A use case for such usage is, for instance, that some consumers might want to prompt the user somehow before performing the navigation, or simply they don't want to do any navigation. --------- Co-authored-by: Marco Antonio Ghiani --- .../logs_explorer/common/index.ts | 3 ++ .../dataset_selector/dataset_selector.tsx | 11 ++++++- .../sub_components/data_view_menu_item.tsx | 2 +- .../components/dataset_selector/types.ts | 9 ++++- .../public/controller/create_controller.ts | 5 +-- .../custom_dataset_selector.tsx | 10 +++++- .../customizations/logs_explorer_profile.tsx | 1 + .../public/customizations/types.ts | 8 +++++ .../public/hooks/use_data_views.tsx | 17 ++++++++-- .../logs_explorer/public/index.ts | 1 + .../src/services/discover_service.ts | 33 ++++--------------- .../src/services/selection_service.ts | 12 +++---- .../src/state_machine.ts | 15 +++++---- .../discover_navigation_handler.ts | 30 +++++++++++++++++ .../logs_explorer_customizations/index.ts | 10 +++++- .../public/routes/main/main_route.tsx | 8 +++-- 16 files changed, 125 insertions(+), 50 deletions(-) create mode 100644 x-pack/plugins/observability_solution/observability_logs_explorer/public/logs_explorer_customizations/discover_navigation_handler.ts diff --git a/x-pack/plugins/observability_solution/logs_explorer/common/index.ts b/x-pack/plugins/observability_solution/logs_explorer/common/index.ts index 0f593cb8ad0722..9eb381441cc557 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/common/index.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/common/index.ts @@ -16,6 +16,9 @@ export { AllDatasetSelection, datasetSelectionPlainRT, hydrateDatasetSelection, + isDatasetSelection, + isDataViewSelection, + isUnresolvedDatasetSelection, UnresolvedDatasetSelection, } from './dataset_selection'; export type { DatasetSelectionPlain } from './dataset_selection'; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/dataset_selector/dataset_selector.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/components/dataset_selector/dataset_selector.tsx index 507f4d83f8957a..36b9e337a5a90e 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/dataset_selector/dataset_selector.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/components/dataset_selector/dataset_selector.tsx @@ -44,6 +44,7 @@ export function DatasetSelector({ discoverEsqlUrlProps, integrations, integrationsError, + isDataViewAvailable, isEsqlEnabled, isLoadingDataViews, isLoadingIntegrations, @@ -164,8 +165,16 @@ export function DatasetSelector({ 'data-test-subj': getDataViewTestSubj(dataView.title), name: , onClick: () => selectDataView(dataView), + disabled: !isDataViewAvailable(dataView), })); - }, [dataViews, dataViewsError, isLoadingDataViews, selectDataView, onDataViewsReload]); + }, [ + dataViews, + dataViewsError, + isDataViewAvailable, + isLoadingDataViews, + onDataViewsReload, + selectDataView, + ]); const tabs = [ { diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/dataset_selector/sub_components/data_view_menu_item.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/components/dataset_selector/sub_components/data_view_menu_item.tsx index 04388f4f479ec0..a260574a28e03f 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/dataset_selector/sub_components/data_view_menu_item.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/components/dataset_selector/sub_components/data_view_menu_item.tsx @@ -21,7 +21,7 @@ const rightSpacing = css` `; export const DataViewMenuItem = ({ dataView }: DataViewMenuItemProps) => { - if (dataView.dataType === 'logs') { + if (dataView.isLogsDataType()) { return {dataView.name}; } diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/dataset_selector/types.ts b/x-pack/plugins/observability_solution/logs_explorer/public/components/dataset_selector/types.ts index 5076f382f2fcb2..e2572f45435331 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/dataset_selector/types.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/components/dataset_selector/types.ts @@ -26,7 +26,12 @@ import { INTEGRATIONS_TAB_ID, UNCATEGORIZED_TAB_ID, } from './constants'; -import { LoadDataViews, ReloadDataViews, SearchDataViews } from '../../hooks/use_data_views'; +import { + IsDataViewAvailable, + LoadDataViews, + ReloadDataViews, + SearchDataViews, +} from '../../hooks/use_data_views'; import { DiscoverEsqlUrlProps } from '../../hooks/use_esql'; export interface DatasetSelectorProps { @@ -53,6 +58,8 @@ export interface DatasetSelectorProps { isSearchingIntegrations: boolean; /* Flag for determining whether ESQL is enabled or not */ isEsqlEnabled: boolean; + /* Used against a data view to assert its availability */ + isDataViewAvailable: IsDataViewAvailable; /* Triggered when retrying to load the data views */ onDataViewsReload: ReloadDataViews; /* Triggered when the data views tab is selected */ diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts b/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts index 59aad01a0b3884..daaa5b27029c6c 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts @@ -43,7 +43,7 @@ export const createLogsExplorerControllerFactory = customizations?: LogsExplorerCustomizations; initialState?: InitialState; }): Promise => { - const { data, dataViews, discover } = plugins; + const { data, dataViews } = plugins; const datasetsClient = new DatasetsService().start({ http: core.http, @@ -70,7 +70,8 @@ export const createLogsExplorerControllerFactory = const machine = createLogsExplorerControllerStateMachine({ datasetsClient, - plugins: { dataViews, discover }, + dataViews, + events: customizations.events, initialContext, query: discoverServices.data.query, toasts: core.notifications.toasts, diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_dataset_selector.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_dataset_selector.tsx index b298a2363a9833..4623d73852240f 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_dataset_selector.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_dataset_selector.tsx @@ -8,6 +8,7 @@ import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import React from 'react'; import { DatasetSelector } from '../components/dataset_selector'; +import { LogsExplorerController } from '../controller'; import { DatasetsProvider, useDatasetsContext } from '../hooks/use_datasets'; import { useDatasetSelection } from '../hooks/use_dataset_selection'; import { DataViewsProvider, useDataViewsContext } from '../hooks/use_data_views'; @@ -52,6 +53,7 @@ export const CustomDatasetSelector = withProviders(({ logsExplorerControllerStat dataViews, error: dataViewsError, isLoading: isLoadingDataViews, + isDataViewAvailable, loadDataViews, reloadDataViews, searchDataViews, @@ -68,6 +70,7 @@ export const CustomDatasetSelector = withProviders(({ logsExplorerControllerStat dataViews={dataViews} dataViewsError={dataViewsError} discoverEsqlUrlProps={discoverEsqlUrlProps} + isDataViewAvailable={isDataViewAvailable} integrations={integrations} integrationsError={integrationsError} isEsqlEnabled={isEsqlEnabled} @@ -98,12 +101,14 @@ export const CustomDatasetSelector = withProviders(({ logsExplorerControllerStat export default CustomDatasetSelector; export type CustomDatasetSelectorBuilderProps = CustomDatasetSelectorProps & { + controller: LogsExplorerController; datasetsClient: IDatasetsClient; dataViews: DataViewsPublicPluginStart; }; function withProviders(Component: React.FunctionComponent) { return function ComponentWithProviders({ + controller, datasetsClient, dataViews, logsExplorerControllerStateService, @@ -111,7 +116,10 @@ function withProviders(Component: React.FunctionComponent - + 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 ac5eb2d6d81c6a..e00bbfa03b7d52 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 @@ -64,6 +64,7 @@ export const createLogsExplorerProfileCustomizations = return ( = (props: Props) => React.ReactNode; @@ -25,8 +26,15 @@ export interface LogsExplorerFlyoutContentProps { doc: LogDocument; } +export type OnUknownDataViewSelectionHandler = (context: LogsExplorerControllerContext) => void; + +export interface LogsExplorerCustomizationEvents { + onUknownDataViewSelection?: OnUknownDataViewSelectionHandler; +} + export interface LogsExplorerCustomizations { flyout?: { renderContent?: RenderContentCustomization; }; + events?: LogsExplorerCustomizationEvents; } diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/hooks/use_data_views.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/hooks/use_data_views.tsx index a71375ff2ea25c..60af9d3591adf8 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/hooks/use_data_views.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/hooks/use_data_views.tsx @@ -8,12 +8,15 @@ import { useCallback } from 'react'; import createContainer from 'constate'; import { useInterpret, useSelector } from '@xstate/react'; -import { DataViewListItem, DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; +import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; +import { DataViewDescriptor } from '../../common/data_views/models/data_view_descriptor'; import { SortOrder } from '../../common/latest'; import { createDataViewsStateMachine } from '../state_machines/data_views'; +import { LogsExplorerCustomizations } from '../controller'; interface DataViewsContextDeps { dataViewsService: DataViewsPublicPluginStart; + events: LogsExplorerCustomizations['events']; } export interface SearchDataViewsParams { @@ -21,12 +24,12 @@ export interface SearchDataViewsParams { sortOrder: SortOrder; } -export type DataViewSelectionHandler = (dataView: DataViewListItem) => void; export type SearchDataViews = (params: SearchDataViewsParams) => void; export type LoadDataViews = () => void; export type ReloadDataViews = () => void; +export type IsDataViewAvailable = (dataView: DataViewDescriptor) => boolean; -const useDataViews = ({ dataViewsService }: DataViewsContextDeps) => { +const useDataViews = ({ dataViewsService, events }: DataViewsContextDeps) => { const dataViewsStateService = useInterpret(() => createDataViewsStateMachine({ dataViews: dataViewsService, @@ -39,6 +42,13 @@ const useDataViews = ({ dataViewsService }: DataViewsContextDeps) => { const isLoading = useSelector(dataViewsStateService, (state) => state.matches('loading')); + const isDataViewAvailable: IsDataViewAvailable = useCallback( + (dataView) => + dataView.isLogsDataType() || + (dataView.isUnknownDataType() && Boolean(events?.onUknownDataViewSelection)), + [events?.onUknownDataViewSelection] + ); + const loadDataViews = useCallback( () => dataViewsStateService.send({ type: 'LOAD_DATA_VIEWS' }), [dataViewsStateService] @@ -81,6 +91,7 @@ const useDataViews = ({ dataViewsService }: DataViewsContextDeps) => { dataViews, // Actions + isDataViewAvailable, loadDataViews, reloadDataViews, searchDataViews, diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/index.ts b/x-pack/plugins/observability_solution/logs_explorer/public/index.ts index 6e452f8904828b..c768b3a7cb3f31 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/index.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/index.ts @@ -17,6 +17,7 @@ export type { } from './controller'; export type { LogsExplorerCustomizations, + LogsExplorerCustomizationEvents, LogsExplorerFlyoutContentProps, } from './customizations/types'; export type { LogsExplorerControllerContext } from './state_machines/logs_explorer_controller'; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/services/discover_service.ts b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/services/discover_service.ts index d67c74097d701b..96fbe4ff34440b 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/services/discover_service.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/services/discover_service.ts @@ -5,11 +5,10 @@ * 2.0. */ -import { DiscoverStart } from '@kbn/discover-plugin/public'; import { isEmpty } from 'lodash'; import { ActionFunction, actions, InvokeCallback } from 'xstate'; -import { getDiscoverColumnsWithFallbackFieldsFromDisplayOptions } from '../../../../utils/convert_discover_app_state'; -import { DataViewSelection, isDataViewSelection } from '../../../../../common/dataset_selection'; +import { LogsExplorerCustomizations } from '../../../../controller'; +import { isDataViewSelection } from '../../../../../common/dataset_selection'; import { getChartDisplayOptionsFromDiscoverAppState, getDiscoverAppStateFromContext, @@ -110,32 +109,14 @@ export const updateDiscoverAppStateFromContext: ActionFunction< context.discoverStateContainer.appState.update(getDiscoverAppStateFromContext(context)); }; -export const redirectToDiscoverAction = +export const redirectToDiscover = ( - discover: DiscoverStart + events?: LogsExplorerCustomizations['events'] ): ActionFunction => (context, event) => { if (event.type === 'UPDATE_DATASET_SELECTION' && isDataViewSelection(event.data)) { - return redirectToDiscover({ context, datasetSelection: event.data, discover }); + if (events?.onUknownDataViewSelection) { + return events.onUknownDataViewSelection({ ...context, datasetSelection: event.data }); + } } }; - -export const redirectToDiscover = ({ - context, - datasetSelection, - discover, -}: { - discover: DiscoverStart; - context: LogsExplorerControllerContext; - datasetSelection: DataViewSelection; -}) => { - return discover.locator?.navigate({ - breakdownField: context.chart.breakdownField ?? undefined, - columns: getDiscoverColumnsWithFallbackFieldsFromDisplayOptions(context), - dataViewSpec: datasetSelection.selection.dataView.toDataviewSpec(), - filters: context.filters, - query: context.query, - refreshInterval: context.refreshInterval, - timeRange: context.time, - }); -}; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/services/selection_service.ts b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/services/selection_service.ts index 281b4468692766..bcf6bfce7730b8 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/services/selection_service.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/services/selection_service.ts @@ -5,8 +5,8 @@ * 2.0. */ -import { DiscoverStart } from '@kbn/discover-plugin/public'; import { InvokeCreator } from 'xstate'; +import { LogsExplorerCustomizations } from '../../../../controller'; import { Dataset } from '../../../../../common/datasets'; import { isDataViewSelection, @@ -16,17 +16,16 @@ import { } from '../../../../../common/dataset_selection'; import { IDatasetsClient } from '../../../../services/datasets'; import { LogsExplorerControllerContext, LogsExplorerControllerEvent } from '../types'; -import { redirectToDiscover } from './discover_service'; interface LogsExplorerControllerSelectionServiceDeps { datasetsClient: IDatasetsClient; - discover: DiscoverStart; + events?: LogsExplorerCustomizations['events']; } export const initializeSelection = ({ datasetsClient, - discover, + events, }: LogsExplorerControllerSelectionServiceDeps): InvokeCreator< LogsExplorerControllerContext, LogsExplorerControllerEvent @@ -39,9 +38,10 @@ export const initializeSelection = */ if ( isDataViewSelection(context.datasetSelection) && - context.datasetSelection.selection.dataView.isUnknownDataType() + context.datasetSelection.selection.dataView.isUnknownDataType() && + events?.onUknownDataViewSelection ) { - return redirectToDiscover({ context, datasetSelection: context.datasetSelection, discover }); + return events?.onUknownDataViewSelection(context); } /** diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/state_machine.ts b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/state_machine.ts index 3354fbbcd7a025..da393ef99213c2 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/state_machine.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/state_machine.ts @@ -8,7 +8,8 @@ import { IToasts } from '@kbn/core/public'; import { QueryStart } from '@kbn/data-plugin/public'; import { actions, createMachine, interpret, InterpreterFrom, raise } from 'xstate'; -import { LogsExplorerStartDeps } from '../../../types'; +import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; +import { LogsExplorerCustomizations } from '../../../controller'; import { ControlPanelRT } from '../../../../common/control_panels'; import { AllDatasetSelection, @@ -28,7 +29,7 @@ import { } from './services/control_panels'; import { changeDataView, createAdHocDataView } from './services/data_view_service'; import { - redirectToDiscoverAction, + redirectToDiscover, subscribeToDiscoverState, updateContextFromDiscoverAppState, updateContextFromDiscoverDataState, @@ -319,7 +320,8 @@ export const createPureLogsExplorerControllerStateMachine = ( export interface LogsExplorerControllerStateMachineDependencies { datasetsClient: IDatasetsClient; - plugins: Pick; + dataViews: DataViewsPublicPluginStart; + events?: LogsExplorerCustomizations['events']; initialContext?: LogsExplorerControllerContext; query: QueryStart; toasts: IToasts; @@ -327,7 +329,8 @@ export interface LogsExplorerControllerStateMachineDependencies { export const createLogsExplorerControllerStateMachine = ({ datasetsClient, - plugins: { dataViews, discover }, + dataViews, + events, initialContext = DEFAULT_CONTEXT, query, toasts, @@ -336,14 +339,14 @@ export const createLogsExplorerControllerStateMachine = ({ actions: { notifyCreateDataViewFailed: createCreateDataViewFailedNotifier(toasts), notifyDatasetSelectionRestoreFailed: createDatasetSelectionRestoreFailedNotifier(toasts), - redirectToDiscover: redirectToDiscoverAction(discover), + redirectToDiscover: redirectToDiscover(events), updateTimefilterFromContext: updateTimefilterFromContext(query), }, services: { changeDataView: changeDataView({ dataViews }), createAdHocDataView: createAdHocDataView(), initializeControlPanels: initializeControlPanels(), - initializeSelection: initializeSelection({ datasetsClient, discover }), + initializeSelection: initializeSelection({ datasetsClient, events }), subscribeControlGroup: subscribeControlGroup(), updateControlPanels: updateControlPanels(), discoverStateService: subscribeToDiscoverState(), diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/logs_explorer_customizations/discover_navigation_handler.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/public/logs_explorer_customizations/discover_navigation_handler.ts new file mode 100644 index 00000000000000..8ffd223201c998 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/logs_explorer_customizations/discover_navigation_handler.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DiscoverStart } from '@kbn/discover-plugin/public'; +import { isDataViewSelection } from '@kbn/logs-explorer-plugin/common'; +import { + getDiscoverColumnsWithFallbackFieldsFromDisplayOptions, + LogsExplorerCustomizationEvents, +} from '@kbn/logs-explorer-plugin/public'; + +export const createOnUknownDataViewSelectionHandler = ( + discover: DiscoverStart +): LogsExplorerCustomizationEvents['onUknownDataViewSelection'] => { + return (context) => { + if (isDataViewSelection(context.datasetSelection)) + discover.locator?.navigate({ + breakdownField: context.chart.breakdownField ?? undefined, + columns: getDiscoverColumnsWithFallbackFieldsFromDisplayOptions(context), + dataViewSpec: context.datasetSelection.selection.dataView.toDataviewSpec(), + filters: context.filters, + query: context.query, + refreshInterval: context.refreshInterval, + timeRange: context.time, + }); + }; +}; diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/logs_explorer_customizations/index.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/public/logs_explorer_customizations/index.ts index 1a104373403440..9e8c3061d6f559 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/logs_explorer_customizations/index.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/logs_explorer_customizations/index.ts @@ -6,15 +6,23 @@ */ import { CreateLogsExplorerController } from '@kbn/logs-explorer-plugin/public'; +import { PluginKibanaContextValue } from '../utils/use_kibana'; +import { createOnUknownDataViewSelectionHandler } from './discover_navigation_handler'; import { renderFlyoutContent } from './flyout_content'; export const createLogsExplorerControllerWithCustomizations = - (createLogsExplorerController: CreateLogsExplorerController): CreateLogsExplorerController => + ( + createLogsExplorerController: CreateLogsExplorerController, + services: PluginKibanaContextValue + ): CreateLogsExplorerController => (args) => createLogsExplorerController({ ...args, customizations: { ...args.customizations, + events: { + onUknownDataViewSelection: createOnUknownDataViewSelectionHandler(services.discover), + }, flyout: { renderContent: renderFlyoutContent, }, diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/routes/main/main_route.tsx b/x-pack/plugins/observability_solution/observability_logs_explorer/public/routes/main/main_route.tsx index b9468354955e22..be071eb1dfcc33 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/routes/main/main_route.tsx +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/routes/main/main_route.tsx @@ -35,8 +35,12 @@ export const ObservabilityLogsExplorerMainRoute = () => { const urlStateStorageContainer = useKbnUrlStateStorageFromRouterContext(); const createLogsExplorerController = useMemo( - () => createLogsExplorerControllerWithCustomizations(logsExplorer.createLogsExplorerController), - [logsExplorer.createLogsExplorerController] + () => + createLogsExplorerControllerWithCustomizations( + logsExplorer.createLogsExplorerController, + services + ), + [logsExplorer.createLogsExplorerController, services] ); return ( From 591d2512e2ef4ba0c7756af6426e6ad17260a2be Mon Sep 17 00:00:00 2001 From: Melissa Alvarez Date: Thu, 15 Feb 2024 09:10:44 -0700 Subject: [PATCH 09/40] [ML] Data Frame Analytics Creation functional tests: ensure test consistency (#176939) ## Summary Fixes https://github.com/elastic/kibana/issues/147020 As discussed, in this PR, the chart color assertions are temporarily disabled as the colors can vary quite a bit on each run and cause flakiness. Created an [issue](https://github.com/elastic/kibana/issues/176938) for creating a better solution. ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: --- .../classification_creation_saved_search.ts | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts index 307678384d4704..eb81e2d8de15ab 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts @@ -14,8 +14,7 @@ export default function ({ getService }: FtrProviderContext) { const ml = getService('ml'); const editedDescription = 'Edited description'; - // FLAKY: https://github.com/elastic/kibana/issues/147020 - describe.skip('classification saved search creation', function () { + describe('classification saved search creation', function () { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/farequote_small'); await ml.testResources.createDataViewIfNeeded('ft_farequote_small', '@timestamp'); @@ -684,16 +683,20 @@ export default function ({ getService }: FtrProviderContext) { await ml.dataFrameAnalyticsResults.assertResultsTableNotEmpty(); await ml.testExecution.logTestStep('displays the ROC curve chart'); - await ml.commonUI.assertColorsInCanvasElement( - 'mlDFAnalyticsClassificationExplorationRocCurveChart', - testData.expected.rocCurveColorState, - ['#000000'], - undefined, - undefined, - // increased tolerance for ROC curve chart up from 10 to 20 - // since the returned colors vary quite a bit on each run. - 20 - ); + + // NOTE: Temporarily disabling these assertions since the colors can vary quite a bit on each run and cause flakiness + // Tracking in https://github.com/elastic/kibana/issues/176938 + + // await ml.commonUI.assertColorsInCanvasElement( + // 'mlDFAnalyticsClassificationExplorationRocCurveChart', + // testData.expected.rocCurveColorState, + // ['#000000'], + // undefined, + // undefined, + // // increased tolerance for ROC curve chart up from 10 to 20 + // // since the returned colors vary quite a bit on each run. + // 20 + // ); await ml.commonUI.resetAntiAliasing(); }); From 0d787a01f3fb9f16fca811be8dbc1d7a08241b96 Mon Sep 17 00:00:00 2001 From: Ash <1849116+ashokaditya@users.noreply.github.com> Date: Thu, 15 Feb 2024 17:48:06 +0100 Subject: [PATCH 10/40] [8.13][Security Solution][Endpoint] Add missing tests for bidirectional connector response actions (#176824) ## Summary Tests for responder action item on alert action menu. for changes in elastic/kibana/pull/176405 ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../use_responder_action_data.test.ts | 140 ++++++++++++++++++ .../edit_connector_flyout/index.test.tsx | 34 ++++- 2 files changed, 171 insertions(+), 3 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.test.ts diff --git a/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.test.ts b/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.test.ts new file mode 100644 index 00000000000000..5613cf551b4646 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.test.ts @@ -0,0 +1,140 @@ +/* + * Copyright 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 { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; +import { useResponderActionData } from './use_responder_action_data'; +import { renderHook } from '@testing-library/react-hooks'; +import { useGetEndpointDetails } from '../../../management/hooks'; +import { HostStatus } from '../../../../common/endpoint/types'; + +jest.mock('../../../common/hooks/use_experimental_features'); +jest.mock('../../../management/hooks', () => ({ + useGetEndpointDetails: (jest.fn() as jest.Mock).mockImplementation(() => ({ enabled: false })), + useWithShowResponder: jest.fn(), +})); + +const useGetEndpointDetailsMock = useGetEndpointDetails as jest.Mock; +const useIsExperimentalFeatureEnabledMock = useIsExperimentalFeatureEnabled as jest.Mock; + +describe('#useResponderActionData', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should return `responder` menu item as `disabled` if agentType is not `endpoint` and feature flag is enabled', () => { + useIsExperimentalFeatureEnabledMock.mockReturnValue(false); + + const { result } = renderHook(() => + useResponderActionData({ + endpointId: 'some-agent-type-id', + // @ts-expect-error this is for testing purpose + agentType: 'some_agent_type', + eventData: [], + }) + ); + expect(result.current.isDisabled).toEqual(true); + }); + + describe('when agentType is `endpoint`', () => { + it.each(Object.values(HostStatus).filter((status) => status !== 'unenrolled'))( + 'should return `responder` menu item as `enabled `if agentType is `endpoint` when endpoint is %s', + (hostStatus) => { + useGetEndpointDetailsMock.mockReturnValue({ + data: { + host_status: hostStatus, + }, + isFetching: false, + error: undefined, + }); + const { result } = renderHook(() => + useResponderActionData({ + endpointId: 'endpoint-id', + agentType: 'endpoint', + }) + ); + expect(result.current.isDisabled).toEqual(false); + } + ); + + it('should return responder menu item `disabled` if agentType is `endpoint` when endpoint is `unenrolled`', () => { + useGetEndpointDetailsMock.mockReturnValue({ + data: { + host_status: 'unenrolled', + }, + isFetching: false, + error: undefined, + }); + const { result } = renderHook(() => + useResponderActionData({ + endpointId: 'endpoint-id', + agentType: 'endpoint', + }) + ); + expect(result.current.isDisabled).toEqual(true); + }); + + it('should return responder menu item `disabled` if agentType is `endpoint` when endpoint data has error', () => { + useGetEndpointDetailsMock.mockReturnValue({ + data: { + host_status: 'online', + }, + isFetching: false, + error: new Error('uh oh!'), + }); + const { result } = renderHook(() => + useResponderActionData({ + endpointId: 'endpoint-id', + agentType: 'endpoint', + }) + ); + expect(result.current.isDisabled).toEqual(true); + }); + + it('should return responder menu item `disabled` if agentType is `endpoint` and endpoint data is fetching', () => { + useGetEndpointDetailsMock.mockReturnValue({ + data: undefined, + isFetching: true, + error: undefined, + }); + + const { result } = renderHook(() => + useResponderActionData({ + endpointId: 'endpoint-id', + agentType: 'endpoint', + }) + ); + expect(result.current.isDisabled).toEqual(true); + }); + }); + + describe('when agentType is `sentinel_one`', () => { + it('should return `responder` menu item as `disabled` if agentType is `sentinel_one` and feature flag is disabled', () => { + useIsExperimentalFeatureEnabledMock.mockReturnValue(false); + + const { result } = renderHook(() => + useResponderActionData({ + endpointId: 'sentinel-one-id', + agentType: 'sentinel_one', + eventData: [], + }) + ); + expect(result.current.isDisabled).toEqual(true); + }); + + it('should return `responder` menu item as `enabled `if agentType is `sentinel_one` and feature flag is enabled', () => { + useIsExperimentalFeatureEnabledMock.mockReturnValue(true); + const { result } = renderHook(() => + useResponderActionData({ + endpointId: 'sentinel-one-id', + agentType: 'sentinel_one', + eventData: [], + }) + ); + expect(result.current.isDisabled).toEqual(false); + }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx index 001cab3fc07200..3bdeb84e4bc192 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx @@ -12,7 +12,7 @@ import userEvent from '@testing-library/user-event'; import { act, waitFor } from '@testing-library/react'; import EditConnectorFlyout from '.'; import { ActionConnector, EditConnectorTabs, GenericValidationResult } from '../../../../types'; -import { technicalPreviewBadgeProps } from '../beta_badge_props'; +import { betaBadgeProps, technicalPreviewBadgeProps } from '../beta_badge_props'; import { AppMockRenderer, createAppMockRenderer } from '../../test_utils'; const updateConnectorResponse = { @@ -311,7 +311,7 @@ describe('EditConnectorFlyout', () => { expect(getByTestId('preconfiguredBadge')).toBeInTheDocument(); }); - it('does not show tech preview badge when isExperimental is false', async () => { + it('does not show `tech preview` badge when isExperimental is false', async () => { const { queryByText } = appMockRenderer.render( { expect(queryByText(technicalPreviewBadgeProps.label)).not.toBeInTheDocument(); }); - it('shows tech preview badge when isExperimental is true', async () => { + it('shows `tech preview` badge when isExperimental is true', async () => { actionTypeRegistry.get.mockReturnValue({ ...actionTypeModel, isExperimental: true }); const { getByText } = appMockRenderer.render( { await act(() => Promise.resolve()); expect(getByText(technicalPreviewBadgeProps.label)).toBeInTheDocument(); }); + + it('does not show `beta` badge when `isBeta` is `false`', async () => { + actionTypeRegistry.get.mockReturnValue({ ...actionTypeModel, isBeta: false }); + const { queryByText } = appMockRenderer.render( + + ); + await act(() => Promise.resolve()); + expect(queryByText(betaBadgeProps.label)).not.toBeInTheDocument(); + }); + + it('shows `beta` badge when `isBeta` is `true`', async () => { + actionTypeRegistry.get.mockReturnValue({ ...actionTypeModel, isBeta: true }); + const { getByText } = appMockRenderer.render( + + ); + await act(() => Promise.resolve()); + expect(getByText(betaBadgeProps.label)).toBeInTheDocument(); + }); }); describe('Tabs', () => { From 68d6ab21354bcf0504dc3664b818ab07f94340bc Mon Sep 17 00:00:00 2001 From: Alexi Doak <109488926+doakalexi@users.noreply.github.com> Date: Thu, 15 Feb 2024 09:13:06 -0800 Subject: [PATCH 11/40] [ResponseOps][FE] Alert creation delay based on user definition (#176346) Resolves https://github.com/elastic/kibana/issues/173009 ## Summary Adds a new input for the user to define the `alertDelay`. This input is available for life-cycled alerts (stack and o11y) rule types. ### Checklist Delete any items that are not applicable to this PR. - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios ### To verify - Using the UI create a rule with the `alertDelay` field set. - Verify that the field is saved properly and that you can edit the `alertDelay` - Verify that you can add the alert delay to existing rules. Create a rule in a different branch and switch to this one. Edit the rule and set the `alertDelay`. Verify that the rule saves and works as expected. --------- Co-authored-by: Lisa Cawley --- .../server/routes/lib/rewrite_rule.test.ts | 3 + .../server/routes/lib/rewrite_rule.ts | 2 + .../server/routes/update_rule.test.ts | 10 ++ .../alerting/server/routes/update_rule.ts | 10 +- .../server/rules_client/methods/update.ts | 3 +- .../server/rules_client/tests/update.test.ts | 12 ++ .../lib/rule_api/common_transformations.ts | 2 + .../application/lib/rule_api/create.test.ts | 9 ++ .../public/application/lib/rule_api/create.ts | 2 + .../application/lib/rule_api/update.test.ts | 5 +- .../public/application/lib/rule_api/update.ts | 15 +- .../sections/rule_form/rule_form.test.tsx | 21 +++ .../sections/rule_form/rule_form.tsx | 143 ++++++++++++------ .../sections/rule_form/rule_reducer.test.ts | 17 +++ .../sections/rule_form/rule_reducer.ts | 29 ++++ 15 files changed, 232 insertions(+), 51 deletions(-) diff --git a/x-pack/plugins/alerting/server/routes/lib/rewrite_rule.test.ts b/x-pack/plugins/alerting/server/routes/lib/rewrite_rule.test.ts index 7a348e583ac6c4..826ee952a6bb65 100644 --- a/x-pack/plugins/alerting/server/routes/lib/rewrite_rule.test.ts +++ b/x-pack/plugins/alerting/server/routes/lib/rewrite_rule.test.ts @@ -62,6 +62,9 @@ const sampleRule: SanitizedRule & { activeSnoozes?: string[] } = }, nextRun: DATE_2020, revision: 0, + alertDelay: { + active: 10, + }, }; describe('rewriteRule', () => { diff --git a/x-pack/plugins/alerting/server/routes/lib/rewrite_rule.ts b/x-pack/plugins/alerting/server/routes/lib/rewrite_rule.ts index 953211a5ef4f77..d0e59278b13c5b 100644 --- a/x-pack/plugins/alerting/server/routes/lib/rewrite_rule.ts +++ b/x-pack/plugins/alerting/server/routes/lib/rewrite_rule.ts @@ -37,6 +37,7 @@ export const rewriteRule = ({ activeSnoozes, lastRun, nextRun, + alertDelay, ...rest }: SanitizedRule & { activeSnoozes?: string[] }) => ({ ...rest, @@ -78,4 +79,5 @@ export const rewriteRule = ({ ...(lastRun ? { last_run: rewriteRuleLastRun(lastRun) } : {}), ...(nextRun ? { next_run: nextRun } : {}), ...(apiKeyCreatedByUser !== undefined ? { api_key_created_by_user: apiKeyCreatedByUser } : {}), + ...(alertDelay !== undefined ? { alert_delay: alertDelay } : {}), }); diff --git a/x-pack/plugins/alerting/server/routes/update_rule.test.ts b/x-pack/plugins/alerting/server/routes/update_rule.test.ts index 5a4b3a19c0d7ce..b48e6d72bef3f6 100644 --- a/x-pack/plugins/alerting/server/routes/update_rule.test.ts +++ b/x-pack/plugins/alerting/server/routes/update_rule.test.ts @@ -59,6 +59,9 @@ describe('updateRuleRoute', () => { }, ], notifyWhen: RuleNotifyWhen.CHANGE, + alertDelay: { + active: 10, + }, }; const updateRequest: AsApiContract['data']> = { @@ -73,6 +76,9 @@ describe('updateRuleRoute', () => { alerts_filter: mockedAlert.actions[0].alertsFilter, }, ], + alert_delay: { + active: 10, + }, }; const updateResult: AsApiContract> = { @@ -86,6 +92,7 @@ describe('updateRuleRoute', () => { connector_type_id: actionTypeId, alerts_filter: alertsFilter, })), + alert_delay: mockedAlert.alertDelay, }; it('updates a rule with proper parameters', async () => { @@ -135,6 +142,9 @@ describe('updateRuleRoute', () => { "uuid": "1234-5678", }, ], + "alertDelay": Object { + "active": 10, + }, "name": "abc", "notifyWhen": "onActionGroupChange", "params": Object { diff --git a/x-pack/plugins/alerting/server/routes/update_rule.ts b/x-pack/plugins/alerting/server/routes/update_rule.ts index d24af256de6139..9419d84d063413 100644 --- a/x-pack/plugins/alerting/server/routes/update_rule.ts +++ b/x-pack/plugins/alerting/server/routes/update_rule.ts @@ -52,16 +52,22 @@ const bodySchema = schema.object({ ) ) ), + alert_delay: schema.maybe( + schema.object({ + active: schema.number(), + }) + ), }); const rewriteBodyReq: RewriteRequestCase> = (result) => { - const { notify_when: notifyWhen, actions, ...rest } = result.data; + const { notify_when: notifyWhen, alert_delay: alertDelay, actions, ...rest } = result.data; return { ...result, data: { ...rest, notifyWhen, actions: rewriteActionsReq(actions), + alertDelay, }, }; }; @@ -83,6 +89,7 @@ const rewriteBodyRes: RewriteResponseCase> = ({ isSnoozedUntil, lastRun, nextRun, + alertDelay, ...rest }) => ({ ...rest, @@ -115,6 +122,7 @@ const rewriteBodyRes: RewriteResponseCase> = ({ ...(lastRun ? { last_run: rewriteRuleLastRun(lastRun) } : {}), ...(nextRun ? { next_run: nextRun } : {}), ...(apiKeyCreatedByUser !== undefined ? { api_key_created_by_user: apiKeyCreatedByUser } : {}), + ...(alertDelay ? { alert_delay: alertDelay } : {}), }); export const updateRuleRoute = ( diff --git a/x-pack/plugins/alerting/server/rules_client/methods/update.ts b/x-pack/plugins/alerting/server/rules_client/methods/update.ts index 33afee4c20d26f..1255173beefe49 100644 --- a/x-pack/plugins/alerting/server/rules_client/methods/update.ts +++ b/x-pack/plugins/alerting/server/rules_client/methods/update.ts @@ -17,7 +17,7 @@ import { } from '../../types'; import { validateRuleTypeParams, getRuleNotifyWhenType } from '../../lib'; import { WriteOperations, AlertingAuthorizationEntity } from '../../authorization'; -import { parseDuration, getRuleCircuitBreakerErrorMessage } from '../../../common'; +import { parseDuration, getRuleCircuitBreakerErrorMessage, AlertDelay } from '../../../common'; import { retryIfConflicts } from '../../lib/retry_if_conflicts'; import { bulkMarkApiKeysForInvalidation } from '../../invalidate_pending_api_keys/bulk_mark_api_keys_for_invalidation'; import { ruleAuditEvent, RuleAuditAction } from '../common/audit_events'; @@ -51,6 +51,7 @@ export interface UpdateOptions { params: Params; throttle?: string | null; notifyWhen?: RuleNotifyWhenType | null; + alertDelay?: AlertDelay; }; allowMissingConnectorSecrets?: boolean; shouldIncrementRevision?: ShouldIncrementRevision; diff --git a/x-pack/plugins/alerting/server/rules_client/tests/update.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/update.test.ts index be3221c8ed2f17..7384ab467a8e97 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/update.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/update.test.ts @@ -279,6 +279,9 @@ describe('update()', () => { scheduledTaskId: 'task-123', createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), + alertDelay: { + active: 5, + }, }, references: [ { @@ -334,6 +337,9 @@ describe('update()', () => { }, }, ], + alertDelay: { + active: 10, + }, }, }); expect(result).toMatchInlineSnapshot(` @@ -364,6 +370,9 @@ describe('update()', () => { }, }, ], + "alertDelay": Object { + "active": 5, + }, "createdAt": 2019-02-12T21:01:22.479Z, "enabled": true, "id": "1", @@ -422,6 +431,9 @@ describe('update()', () => { "uuid": "102", }, ], + "alertDelay": Object { + "active": 10, + }, "alertTypeId": "myType", "apiKey": null, "apiKeyCreatedByUser": null, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/common_transformations.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/common_transformations.ts index 64949d9014c507..b00b874b079ef5 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/common_transformations.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/common_transformations.ts @@ -77,6 +77,7 @@ export const transformRule: RewriteRequestCase = ({ active_snoozes: activeSnoozes, last_run: lastRun, next_run: nextRun, + alert_delay: alertDelay, ...rest }: any) => ({ ruleTypeId, @@ -99,6 +100,7 @@ export const transformRule: RewriteRequestCase = ({ ...(lastRun ? { lastRun: transformLastRun(lastRun) } : {}), ...(nextRun ? { nextRun } : {}), ...(apiKeyCreatedByUser !== undefined ? { apiKeyCreatedByUser } : {}), + ...(alertDelay ? { alertDelay } : {}), ...rest, }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/create.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/create.test.ts index 76e5fd7f09207f..b27d9cad0c0560 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/create.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/create.test.ts @@ -52,6 +52,9 @@ describe('createRule', () => { execution_status: { status: 'pending', last_execution_date: '2021-04-01T21:33:13.250Z' }, create_at: '2021-04-01T21:33:13.247Z', updated_at: '2021-04-01T21:33:13.247Z', + alert_delay: { + active: 10, + }, }; const ruleToCreate: Omit< RuleUpdates, @@ -96,6 +99,9 @@ describe('createRule', () => { updatedAt: new Date('2021-04-01T21:33:13.247Z'), apiKeyOwner: '', revision: 0, + alertDelay: { + active: 10, + }, }; http.post.mockResolvedValueOnce(resolvedValue); @@ -148,6 +154,9 @@ describe('createRule', () => { tags: [], updatedAt: '2021-04-01T21:33:13.247Z', updatedBy: undefined, + alertDelay: { + active: 10, + }, }); }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/create.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/create.ts index 2304ee8c489301..48fa1783f3c1ff 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/create.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/create.ts @@ -23,6 +23,7 @@ type RuleCreateBody = Omit< const rewriteBodyRequest: RewriteResponseCase = ({ ruleTypeId, actions, + alertDelay, ...res }): any => ({ ...res, @@ -43,6 +44,7 @@ const rewriteBodyRequest: RewriteResponseCase = ({ : {}), }) ), + ...(alertDelay ? { alert_delay: alertDelay } : {}), }); export async function createRule({ diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/update.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/update.test.ts index 8b3ebc3f96e523..591cdc83e86cf3 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/update.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/update.test.ts @@ -27,6 +27,9 @@ describe('updateRule', () => { apiKey: null, apiKeyOwner: null, revision: 0, + alertDelay: { + active: 10, + }, }; const resolvedValue: Rule = { ...ruleToUpdate, @@ -51,7 +54,7 @@ describe('updateRule', () => { Array [ "/api/alerting/rule/12%2F3", Object { - "body": "{\\"name\\":\\"test\\",\\"tags\\":[\\"foo\\"],\\"schedule\\":{\\"interval\\":\\"1m\\"},\\"params\\":{},\\"actions\\":[]}", + "body": "{\\"name\\":\\"test\\",\\"tags\\":[\\"foo\\"],\\"schedule\\":{\\"interval\\":\\"1m\\"},\\"params\\":{},\\"actions\\":[],\\"alert_delay\\":{\\"active\\":10}}", }, ] `); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/update.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/update.ts index 52158bfa2f0343..80346ff2f65daf 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/update.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/update.ts @@ -13,9 +13,13 @@ import { transformRule } from './common_transformations'; type RuleUpdatesBody = Pick< RuleUpdates, - 'name' | 'tags' | 'schedule' | 'actions' | 'params' | 'throttle' | 'notifyWhen' + 'name' | 'tags' | 'schedule' | 'actions' | 'params' | 'throttle' | 'notifyWhen' | 'alertDelay' >; -const rewriteBodyRequest: RewriteResponseCase = ({ actions, ...res }): any => ({ +const rewriteBodyRequest: RewriteResponseCase = ({ + actions, + alertDelay, + ...res +}): any => ({ ...res, actions: actions.map( ({ group, id, params, frequency, uuid, alertsFilter, useAlertDataForTemplate }) => ({ @@ -34,6 +38,7 @@ const rewriteBodyRequest: RewriteResponseCase = ({ actions, ... ...(uuid && { uuid }), }) ), + ...(alertDelay ? { alert_delay: alertDelay } : {}), }); export async function updateRule({ @@ -42,14 +47,16 @@ export async function updateRule({ id, }: { http: HttpSetup; - rule: Pick; + rule: Pick; id: string; }): Promise { const res = await http.put>( `${BASE_ALERTING_API_PATH}/rule/${encodeURIComponent(id)}`, { body: JSON.stringify( - rewriteBodyRequest(pick(rule, ['name', 'tags', 'schedule', 'params', 'actions'])) + rewriteBodyRequest( + pick(rule, ['name', 'tags', 'schedule', 'params', 'actions', 'alertDelay']) + ) ), } ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.test.tsx index 24592566d54655..8902b4d472ad2d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.test.tsx @@ -375,6 +375,9 @@ describe('rule_form', () => { enabled: false, mutedInstanceIds: [], ...(!showRulesList ? { ruleTypeId: ruleType.id } : {}), + alertDelay: { + active: 1, + }, } as unknown as Rule; wrapper = mountWithIntl( @@ -1034,6 +1037,24 @@ describe('rule_form', () => { expect(wrapper.find(ActionForm).props().hasFieldsForAAD).toEqual(true); }); + + it('renders rule alert delay', async () => { + const getAlertDelayInput = () => { + return wrapper.find('[data-test-subj="alertDelayInput"] input').first(); + }; + + await setup(); + expect(getAlertDelayInput().props().value).toEqual(1); + + getAlertDelayInput().simulate('change', { target: { value: '2' } }); + expect(getAlertDelayInput().props().value).toEqual(2); + + getAlertDelayInput().simulate('change', { target: { value: '20' } }); + expect(getAlertDelayInput().props().value).toEqual(20); + + getAlertDelayInput().simulate('change', { target: { value: '999' } }); + expect(getAlertDelayInput().props().value).toEqual(999); + }); }); describe('rule_form create rule non ruleing consumer and producer', () => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx index 98e2547dabdd3a..b0b052544b625d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx @@ -215,6 +215,7 @@ export const RuleForm = ({ ? getDurationUnitValue(rule.schedule.interval) : defaultScheduleIntervalUnit ); + const [alertDelay, setAlertDelay] = useState(rule.alertDelay?.active ?? 1); const [defaultActionGroupId, setDefaultActionGroupId] = useState(undefined); const [availableRuleTypes, setAvailableRuleTypes] = useState([]); @@ -328,6 +329,12 @@ export const RuleForm = ({ } }, [rule.schedule.interval, defaultScheduleInterval, defaultScheduleIntervalUnit]); + useEffect(() => { + if (rule.alertDelay) { + setAlertDelay(rule.alertDelay.active); + } + }, [rule.alertDelay]); + useEffect(() => { if (!flyoutBodyOverflowRef.current) { // We're using this as a reliable way to reset the scroll position @@ -393,6 +400,10 @@ export const RuleForm = ({ [dispatch] ); + const setAlertDelayProperty = (key: string, value: any) => { + dispatch({ command: { type: 'setAlertDelayProperty' }, payload: { key, value } }); + }; + useEffect(() => { const searchValue = searchText ? searchText.trim().toLocaleLowerCase() : null; setFilteredRuleTypes( @@ -766,51 +777,95 @@ export const RuleForm = ({ ) : null} {hideInterval !== true && ( - - 0} - error={errors['schedule.interval']} - > - - - 0} - value={ruleInterval || ''} - name="interval" - data-test-subj="intervalInput" - onChange={(e) => { - const value = e.target.value; - if (value === '' || INTEGER_REGEX.test(value)) { - const parsedValue = value === '' ? '' : parseInt(value, 10); - setRuleInterval(parsedValue || undefined); - setScheduleProperty('interval', `${parsedValue}${ruleIntervalUnit}`); - } - }} - /> - - - { - setRuleIntervalUnit(e.target.value); - setScheduleProperty('interval', `${ruleInterval}${e.target.value}`); - }} - data-test-subj="intervalInputUnit" - /> - - - - + <> + + 0} + error={errors['schedule.interval']} + > + + + 0} + value={ruleInterval || ''} + name="interval" + data-test-subj="intervalInput" + onChange={(e) => { + const value = e.target.value; + if (value === '' || INTEGER_REGEX.test(value)) { + const parsedValue = value === '' ? '' : parseInt(value, 10); + setRuleInterval(parsedValue || undefined); + setScheduleProperty('interval', `${parsedValue}${ruleIntervalUnit}`); + } + }} + /> + + + { + setRuleIntervalUnit(e.target.value); + setScheduleProperty('interval', `${ruleInterval}${e.target.value}`); + }} + data-test-subj="intervalInputUnit" + /> + + + + + + )} + + + + + } + />, + ]} + append={i18n.translate( + 'xpack.triggersActionsUI.sections.ruleForm.alertDelayFieldAppendLabel', + { + defaultMessage: 'consecutive matches', + } + )} + onChange={(e) => { + const value = e.target.value; + if (value === '' || INTEGER_REGEX.test(value)) { + const parsedValue = value === '' ? '' : parseInt(value, 10); + setAlertDelayProperty('active', parsedValue || 1); + setAlertDelay(parsedValue || undefined); + } + }} + /> + + {shouldShowConsumerSelect && ( <> diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.test.ts index 996676b73d59e8..6eadf1fce5ff43 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.test.ts @@ -21,6 +21,9 @@ describe('rule reducer', () => { actions: [], tags: [], notifyWhen: 'onActionGroupChange', + alertDelay: { + active: 5, + }, } as unknown as Rule; }); @@ -211,4 +214,18 @@ describe('rule reducer', () => { ); expect(updatedRule.rule.actions[0].frequency?.notifyWhen).toBe('onThrottleInterval'); }); + + test('if initial alert delay property was updated', () => { + const updatedRule = ruleReducer( + { rule: initialRule }, + { + command: { type: 'setAlertDelayProperty' }, + payload: { + key: 'active', + value: 10, + }, + } + ); + expect(updatedRule.rule.alertDelay?.active).toBe(10); + }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts index 54f3871928fb35..257df764ebc1ef 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts @@ -12,6 +12,7 @@ import { RuleActionParam, IntervalSchedule, RuleActionAlertsFilterProperty, + AlertDelay, } from '@kbn/alerting-plugin/common'; import { isEmpty } from 'lodash/fp'; import { Rule, RuleAction } from '../../../types'; @@ -30,6 +31,7 @@ interface CommandType< | 'setRuleActionProperty' | 'setRuleActionFrequency' | 'setRuleActionAlertsFilter' + | 'setAlertDelayProperty' > { type: T; } @@ -62,6 +64,12 @@ interface RuleSchedulePayload { index?: number; } +interface AlertDelayPayload { + key: Key; + value: AlertDelay[Key] | null; + index?: number; +} + export type RuleReducerAction = | { command: CommandType<'setRule'>; @@ -94,6 +102,10 @@ export type RuleReducerAction = | { command: CommandType<'setRuleActionAlertsFilter'>; payload: Payload; + } + | { + command: CommandType<'setAlertDelayProperty'>; + payload: AlertDelayPayload; }; export type InitialRuleReducer = Reducer<{ rule: InitialRule }, RuleReducerAction>; @@ -281,5 +293,22 @@ export const ruleReducer = ( }; } } + case 'setAlertDelayProperty': { + const { key, value } = action.payload as Payload; + if (rule.alertDelay && isEqual(rule.alertDelay[key], value)) { + return state; + } else { + return { + ...state, + rule: { + ...rule, + alertDelay: { + ...rule.alertDelay, + [key]: value, + }, + }, + }; + } + } } }; From 9488c93b3d7adc7a6617ff98b3c61769e147b0b4 Mon Sep 17 00:00:00 2001 From: Ersin Erdal <92688503+ersin-erdal@users.noreply.github.com> Date: Thu, 15 Feb 2024 18:25:20 +0100 Subject: [PATCH 12/40] Notify the response ops when there is change on connector config (#175981) Resolves: #175018 This Pr adds an integration test to check the changes on connectorTypes config, secrets and params schemas. I used `validate.schema` field as all the connector types have it. ConnectorTypes has config, secrets and params schemas on `validate.schema` whereas SubActionConnectorTypes has only config and secrets. They have multiple params schema as well but only registered and used during action execution. e.g. https://github.com/ersin-erdal/kibana/blob/main/x-pack/plugins/stack_connectors/server/connector_types/bedrock/bedrock.ts#L57 And here is the explanation why they are not listed in a definition: https://github.com/ersin-erdal/kibana/blob/main/x-pack/plugins/actions/server/sub_action_framework/validators.ts#L38 We need to do some refactoring to list those schemas on the connector types. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../actions/jest.integration.config.js | 2 +- .../connector_types.test.ts.snap | 11170 ++++++++++++++++ .../integration_tests/connector_types.test.ts | 60 + .../server/integration_tests/lib/index.ts | 8 + .../lib/setup_test_servers.ts | 37 + .../mocks/connector_types.ts | 32 + x-pack/plugins/actions/server/types.ts | 8 +- x-pack/plugins/actions/tsconfig.json | 3 +- .../rules_client/methods/get_alert_state.ts | 29 +- .../tests/get_alert_state.test.ts | 65 + 10 files changed, 11400 insertions(+), 14 deletions(-) create mode 100644 x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap create mode 100644 x-pack/plugins/actions/server/integration_tests/connector_types.test.ts create mode 100644 x-pack/plugins/actions/server/integration_tests/lib/index.ts create mode 100644 x-pack/plugins/actions/server/integration_tests/lib/setup_test_servers.ts create mode 100644 x-pack/plugins/actions/server/integration_tests/mocks/connector_types.ts diff --git a/x-pack/plugins/actions/jest.integration.config.js b/x-pack/plugins/actions/jest.integration.config.js index 41bd46b12005ef..daea840925756b 100644 --- a/x-pack/plugins/actions/jest.integration.config.js +++ b/x-pack/plugins/actions/jest.integration.config.js @@ -6,7 +6,7 @@ */ module.exports = { - preset: '@kbn/test/jest_integration_node', + preset: '@kbn/test/jest_integration', rootDir: '../../..', roots: ['/x-pack/plugins/actions'], }; diff --git a/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap b/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap new file mode 100644 index 00000000000000..11624752650e4e --- /dev/null +++ b/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap @@ -0,0 +1,11170 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Connector type config checks detect connector type changes for: .bedrock 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "defaultModel": Object { + "flags": Object { + "default": "anthropic.claude-v2:1", + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .bedrock 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "accessKey": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "secret": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .bedrock 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + "unknown": true, + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .cases-webhook 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "createCommentJson": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createCommentMethod": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": "put", + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "post", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "put", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "patch", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createCommentUrl": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createIncidentJson": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "createIncidentMethod": Object { + "flags": Object { + "default": "post", + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "post", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "put", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createIncidentResponseKey": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "createIncidentUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "getIncidentResponseExternalTitleKey": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "getIncidentUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "hasAuth": Object { + "flags": Object { + "default": true, + "error": [Function], + "presence": "optional", + }, + "type": "boolean", + }, + "headers": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "value": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "name": "entries", + }, + ], + "type": "record", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updateIncidentJson": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "updateIncidentMethod": Object { + "flags": Object { + "default": "put", + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "post", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "patch", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "put", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updateIncidentUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "viewIncidentUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .cases-webhook 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "password": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "user": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .cases-webhook 3`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "pushToService", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comments": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comment": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "commentId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "incident": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "description": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "id": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "severity": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "status": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "tags": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "title": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", +} +`; + +exports[`Connector type config checks detect connector type changes for: .d3security 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "url": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .d3security 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "token": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .d3security 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + "unknown": true, + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .email 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "clientId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "from": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "hasAuth": Object { + "flags": Object { + "default": true, + "error": [Function], + "presence": "optional", + }, + "type": "boolean", + }, + "host": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "oauthTokenUrl": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "port": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + Object { + "args": Object { + "limit": 65535, + }, + "name": "max", + }, + ], + "type": "number", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "secure": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "type": "boolean", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "service": Object { + "flags": Object { + "default": "other", + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "tenantId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .email 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "clientSecret": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "password": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "user": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .email 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "bcc": Object { + "flags": Object { + "default": Array [], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + "cc": Object { + "flags": Object { + "default": Array [], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + "kibanaFooterLink": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "path": Object { + "flags": Object { + "default": "/", + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "text": Object { + "flags": Object { + "default": "Go to Elastic", + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + "message": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "messageHTML": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "subject": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "to": Object { + "flags": Object { + "default": Array [], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .gen-ai 1`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiProvider": Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "Azure OpenAI", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiProvider": Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "OpenAI", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "defaultModel": Object { + "flags": Object { + "default": "gpt-4", + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", +} +`; + +exports[`Connector type config checks detect connector type changes for: .gen-ai 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiKey": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .gen-ai 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + "unknown": true, + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .index 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "executionTimeField": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "index": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "refresh": Object { + "flags": Object { + "default": false, + "error": [Function], + "presence": "optional", + }, + "type": "boolean", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .index 2`] = ` +Object { + "flags": Object { + "default": Object {}, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .index 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "documents": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "value": Object { + "flags": Object { + "error": [Function], + }, + "type": "any", + }, + }, + "name": "entries", + }, + ], + "type": "record", + }, + ], + "type": "array", + }, + "indexOverride": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .jira 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "projectKey": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .jira 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiToken": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "email": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .jira 3`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getFields", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getIncident", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "externalId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "handshake", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "pushToService", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comments": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comment": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "commentId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "incident": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "description": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "issueType": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "labels": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "parent": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "priority": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "summary": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "issueTypes", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "fieldsByIssueType", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "issues", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "title": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "issue", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", +} +`; + +exports[`Connector type config checks detect connector type changes for: .opsgenie 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .opsgenie 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiKey": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .opsgenie 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + "unknown": true, + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .pagerduty 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .pagerduty 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "routingKey": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .pagerduty 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "class": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "component": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "customDetails": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "value": Object { + "flags": Object { + "error": [Function], + }, + "type": "any", + }, + }, + "name": "entries", + }, + ], + "type": "record", + }, + "dedupKey": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "eventAction": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "trigger", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "resolve", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "acknowledge", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "group": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "links": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "href": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "text": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "type": "array", + }, + "severity": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "critical", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "error", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "warning", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "info", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "source": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "summary": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "timestamp": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .resilient 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "orgId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .resilient 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiKeyId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "apiKeySecret": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .resilient 3`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getFields", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getIncident", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "externalId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "handshake", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "pushToService", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comments": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comment": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "commentId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "incident": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "description": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "incidentTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "type": "number", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "severityCode": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "type": "number", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "incidentTypes", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "severity", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", +} +`; + +exports[`Connector type config checks detect connector type changes for: .sentinelone 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "url": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .sentinelone 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "token": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .sentinelone 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + "unknown": true, + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .server-log 1`] = ` +Object { + "flags": Object { + "default": Object {}, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .server-log 2`] = ` +Object { + "flags": Object { + "default": Object {}, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .server-log 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "level": Object { + "flags": Object { + "default": "info", + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "trace", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "debug", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "info", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "warn", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "error", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "fatal", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "message": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .servicenow 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "clientId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isOAuth": Object { + "flags": Object { + "default": false, + "error": [Function], + "presence": "optional", + }, + "type": "boolean", + }, + "jwtKeyId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "userIdentifierValue": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "usesTableApi": Object { + "flags": Object { + "default": true, + "error": [Function], + "presence": "optional", + }, + "type": "boolean", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .servicenow 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "clientSecret": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "password": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "privateKey": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "privateKeyPassword": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "username": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .servicenow 3`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getFields", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getIncident", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "externalId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "handshake", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "pushToService", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comments": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comment": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "commentId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "incident": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "category": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "correlation_display": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "correlation_id": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": "{{rule.id}}:{{alert.id}}", + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "description": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "impact": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "severity": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "short_description": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "subcategory": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "urgency": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getChoices", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "fields": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "closeIncident", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "incident": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "correlation_id": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": "{{rule.id}}:{{alert.id}}", + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", +} +`; + +exports[`Connector type config checks detect connector type changes for: .servicenow-itom 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "clientId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isOAuth": Object { + "flags": Object { + "default": false, + "error": [Function], + "presence": "optional", + }, + "type": "boolean", + }, + "jwtKeyId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "userIdentifierValue": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .servicenow-itom 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "clientSecret": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "password": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "privateKey": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "privateKeyPassword": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "username": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .servicenow-itom 3`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "addEvent", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "additional_info": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "description": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "event_class": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "message_key": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": "{{rule.id}}:{{alert.id}}", + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "metric_name": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "node": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "resource": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "severity": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "source": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "time_of_event": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "type": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getChoices", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "fields": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", +} +`; + +exports[`Connector type config checks detect connector type changes for: .servicenow-sir 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "clientId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isOAuth": Object { + "flags": Object { + "default": false, + "error": [Function], + "presence": "optional", + }, + "type": "boolean", + }, + "jwtKeyId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "userIdentifierValue": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "usesTableApi": Object { + "flags": Object { + "default": true, + "error": [Function], + "presence": "optional", + }, + "type": "boolean", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .servicenow-sir 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "clientSecret": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "password": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "privateKey": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "privateKeyPassword": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "username": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .servicenow-sir 3`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getFields", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getIncident", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "externalId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "handshake", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "pushToService", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comments": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comment": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "commentId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "incident": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "category": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "correlation_display": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "correlation_id": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": "{{rule.id}}:{{alert.id}}", + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "description": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "dest_ip": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + ], + "type": "alternatives", + }, + "externalId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "malware_hash": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + ], + "type": "alternatives", + }, + "malware_url": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + ], + "type": "alternatives", + }, + "priority": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "short_description": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "source_ip": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + ], + "type": "alternatives", + }, + "subcategory": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getChoices", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "fields": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", +} +`; + +exports[`Connector type config checks detect connector type changes for: .slack 1`] = ` +Object { + "flags": Object { + "default": Object {}, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .slack 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "webhookUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .slack 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "message": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .slack_api 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "allowedChannels": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 25, + }, + "name": "max", + }, + ], + "type": "array", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .slack_api 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "token": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .slack_api 3`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "validChannelId", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "channelId": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "postMessage", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "channelIds": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "max", + }, + ], + "type": "array", + }, + "channels": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "max", + }, + ], + "type": "array", + }, + "text": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "postBlockkit", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "channelIds": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "max", + }, + ], + "type": "array", + }, + "channels": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "max", + }, + ], + "type": "array", + }, + "text": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", +} +`; + +exports[`Connector type config checks detect connector type changes for: .swimlane 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "appId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "connectorType": Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "all", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "alerts", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "cases", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "mappings": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "alertIdConfig": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "fieldType": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "caseIdConfig": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "fieldType": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "caseNameConfig": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "fieldType": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "commentsConfig": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "fieldType": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "descriptionConfig": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "fieldType": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "ruleNameConfig": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "fieldType": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "severityConfig": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "fieldType": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .swimlane 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiToken": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .swimlane 3`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "pushToService", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comments": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comment": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "commentId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "incident": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "alertId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "caseId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "caseName": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "description": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "ruleName": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "severity": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", +} +`; + +exports[`Connector type config checks detect connector type changes for: .teams 1`] = ` +Object { + "flags": Object { + "default": Object {}, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .teams 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "webhookUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .teams 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "message": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .tines 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "url": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .tines 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "email": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "token": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .tines 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + "unknown": true, + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .torq 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "webhookIntegrationUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .torq 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "token": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .torq 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "body": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .webhook 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "authType": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "webhook-authentication-basic", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "webhook-authentication-ssl", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "ca": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "certType": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "ssl-crt-key", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "ssl-pfx", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "hasAuth": Object { + "flags": Object { + "default": true, + "error": [Function], + "presence": "optional", + }, + "type": "boolean", + }, + "headers": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "value": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "name": "entries", + }, + ], + "type": "record", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "method": Object { + "flags": Object { + "default": "post", + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "post", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "put", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "url": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "verificationMode": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "none", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "certificate", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "full", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .webhook 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "crt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "key": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "password": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "pfx": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "user": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .webhook 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "body": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .xmatters 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "configUrl": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "usesBasic": Object { + "flags": Object { + "default": true, + "error": [Function], + "presence": "optional", + }, + "type": "boolean", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .xmatters 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "password": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "secretsUrl": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "user": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .xmatters 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "alertActionGroupName": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "date": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "ruleName": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "severity": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "signalId": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "spaceId": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "tags": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; diff --git a/x-pack/plugins/actions/server/integration_tests/connector_types.test.ts b/x-pack/plugins/actions/server/integration_tests/connector_types.test.ts new file mode 100644 index 00000000000000..6a2382ea3088fd --- /dev/null +++ b/x-pack/plugins/actions/server/integration_tests/connector_types.test.ts @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { TestElasticsearchUtils, TestKibanaUtils } from '@kbn/core-test-helpers-kbn-server'; +import { ActionTypeRegistry } from '../action_type_registry'; +import { setupTestServers } from './lib'; +import { connectorTypes } from './mocks/connector_types'; + +jest.mock('../action_type_registry', () => { + const actual = jest.requireActual('../action_type_registry'); + return { + ...actual, + ActionTypeRegistry: jest.fn().mockImplementation((opts) => { + return new actual.ActionTypeRegistry(opts); + }), + }; +}); + +describe('Connector type config checks', () => { + let esServer: TestElasticsearchUtils; + let kibanaServer: TestKibanaUtils; + let actionTypeRegistry: ActionTypeRegistry; + + beforeAll(async () => { + const setupResult = await setupTestServers(); + esServer = setupResult.esServer; + kibanaServer = setupResult.kibanaServer; + + const mockedActionTypeRegistry = jest.requireMock('../action_type_registry'); + expect(mockedActionTypeRegistry.ActionTypeRegistry).toHaveBeenCalledTimes(1); + actionTypeRegistry = mockedActionTypeRegistry.ActionTypeRegistry.mock.results[0].value; + }); + + afterAll(async () => { + if (kibanaServer) { + await kibanaServer.stop(); + } + if (esServer) { + await esServer.stop(); + } + }); + + test('ensure connector types list up to date', () => { + expect(connectorTypes).toEqual(actionTypeRegistry.getAllTypes()); + }); + + for (const connectorTypeId of connectorTypes) { + test(`detect connector type changes for: ${connectorTypeId}`, async () => { + const connectorType = actionTypeRegistry.get(connectorTypeId); + + expect(connectorType?.validate.config.schema.getSchema!().describe()).toMatchSnapshot(); + expect(connectorType.validate.secrets.schema.getSchema!().describe()).toMatchSnapshot(); + expect(connectorType.validate.params.schema.getSchema!().describe()).toMatchSnapshot(); + }); + } +}); diff --git a/x-pack/plugins/actions/server/integration_tests/lib/index.ts b/x-pack/plugins/actions/server/integration_tests/lib/index.ts new file mode 100644 index 00000000000000..c9e6e4c7649bda --- /dev/null +++ b/x-pack/plugins/actions/server/integration_tests/lib/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { setupTestServers } from './setup_test_servers'; diff --git a/x-pack/plugins/actions/server/integration_tests/lib/setup_test_servers.ts b/x-pack/plugins/actions/server/integration_tests/lib/setup_test_servers.ts new file mode 100644 index 00000000000000..4b722d54602136 --- /dev/null +++ b/x-pack/plugins/actions/server/integration_tests/lib/setup_test_servers.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createTestServers, createRootWithCorePlugins } from '@kbn/core-test-helpers-kbn-server'; + +export async function setupTestServers(settings = {}) { + const { startES } = createTestServers({ + adjustTimeout: (t) => jest.setTimeout(t), + settings: { + es: { + license: 'trial', + }, + }, + }); + + const esServer = await startES(); + + const root = createRootWithCorePlugins(settings, { oss: false }); + + await root.preboot(); + const coreSetup = await root.setup(); + const coreStart = await root.start(); + + return { + esServer, + kibanaServer: { + root, + coreSetup, + coreStart, + stop: async () => await root.shutdown(), + }, + }; +} diff --git a/x-pack/plugins/actions/server/integration_tests/mocks/connector_types.ts b/x-pack/plugins/actions/server/integration_tests/mocks/connector_types.ts new file mode 100644 index 00000000000000..473f5b72ce59bb --- /dev/null +++ b/x-pack/plugins/actions/server/integration_tests/mocks/connector_types.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const connectorTypes: string[] = [ + '.email', + '.index', + '.pagerduty', + '.swimlane', + '.server-log', + '.slack', + '.slack_api', + '.webhook', + '.cases-webhook', + '.xmatters', + '.servicenow', + '.servicenow-sir', + '.servicenow-itom', + '.jira', + '.resilient', + '.teams', + '.torq', + '.opsgenie', + '.tines', + '.gen-ai', + '.bedrock', + '.d3security', + '.sentinelone', +]; diff --git a/x-pack/plugins/actions/server/types.ts b/x-pack/plugins/actions/server/types.ts index 343d9b3dde4f6a..e2ef2675a59e9d 100644 --- a/x-pack/plugins/actions/server/types.ts +++ b/x-pack/plugins/actions/server/types.ts @@ -16,6 +16,7 @@ import { SavedObjectReference, Logger, } from '@kbn/core/server'; +import { AnySchema } from 'joi'; import { ActionTypeRegistry } from './action_type_registry'; import { PluginSetupContract, PluginStartContract } from './plugin'; import { ActionsClient } from './actions_client'; @@ -101,11 +102,12 @@ export type ExecutorType< options: ActionTypeExecutorOptions ) => Promise>; -export interface ValidatorType { +export interface ValidatorType { schema: { - validate(value: unknown): Type; + validate(value: unknown): T; + getSchema?: () => AnySchema; }; - customValidator?: (value: Type, validatorServices: ValidatorServices) => void; + customValidator?: (value: T, validatorServices: ValidatorServices) => void; } export interface ValidatorServices { diff --git a/x-pack/plugins/actions/tsconfig.json b/x-pack/plugins/actions/tsconfig.json index 63c296d2d35e09..92a1074c951157 100644 --- a/x-pack/plugins/actions/tsconfig.json +++ b/x-pack/plugins/actions/tsconfig.json @@ -44,7 +44,8 @@ "@kbn/core-elasticsearch-server-mocks", "@kbn/core-logging-server-mocks", "@kbn/serverless", - "@kbn/actions-types" + "@kbn/actions-types", + "@kbn/core-test-helpers-kbn-server" ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/alerting/server/rules_client/methods/get_alert_state.ts b/x-pack/plugins/alerting/server/rules_client/methods/get_alert_state.ts index 6497428e1c2f25..4da913a06fe799 100644 --- a/x-pack/plugins/alerting/server/rules_client/methods/get_alert_state.ts +++ b/x-pack/plugins/alerting/server/rules_client/methods/get_alert_state.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { RuleTaskState } from '../../types'; import { taskInstanceToAlertTaskInstance } from '../../task_runner/alert_task_instance'; import { ReadOperations, AlertingAuthorizationEntity } from '../../authorization'; @@ -18,18 +19,28 @@ export async function getAlertState( context: RulesClientContext, { id }: GetAlertStateParams ): Promise { - const alert = await get(context, { id }); + const rule = await get(context, { id }); await context.authorization.ensureAuthorized({ - ruleTypeId: alert.alertTypeId, - consumer: alert.consumer, + ruleTypeId: rule.alertTypeId, + consumer: rule.consumer, operation: ReadOperations.GetRuleState, entity: AlertingAuthorizationEntity.Rule, }); - if (alert.scheduledTaskId) { - const { state } = taskInstanceToAlertTaskInstance( - await context.taskManager.get(alert.scheduledTaskId), - alert - ); - return state; + if (rule.scheduledTaskId) { + try { + const { state } = taskInstanceToAlertTaskInstance( + await context.taskManager.get(rule.scheduledTaskId), + rule + ); + return state; + } catch (e) { + if (SavedObjectsErrorHelpers.isNotFoundError(e)) { + context.logger.warn(`Task (${rule.scheduledTaskId}) not found`); + } else { + context.logger.warn( + `An error occurred when getting the task state for (${rule.scheduledTaskId})` + ); + } + } } } diff --git a/x-pack/plugins/alerting/server/rules_client/tests/get_alert_state.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/get_alert_state.test.ts index 63d86843512c00..951e85c023523e 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/get_alert_state.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/get_alert_state.test.ts @@ -22,6 +22,7 @@ import { AlertingAuthorization } from '../../authorization/alerting_authorizatio import { ActionsAuthorization } from '@kbn/actions-plugin/server'; import { getBeforeSetup } from './lib'; import { RULE_SAVED_OBJECT_TYPE } from '../../saved_objects'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; const taskManager = taskManagerMock.createStart(); const ruleTypeRegistry = ruleTypeRegistryMock.create(); @@ -175,6 +176,70 @@ describe('getAlertState()', () => { expect(taskManager.get).toHaveBeenCalledWith(scheduledTaskId); }); + test('logs a warning if the task not found', async () => { + const rulesClient = new RulesClient(rulesClientParams); + + const scheduledTaskId = 'task-123'; + + unsecuredSavedObjectsClient.get.mockResolvedValueOnce({ + id: '1', + type: RULE_SAVED_OBJECT_TYPE, + attributes: { + alertTypeId: '123', + schedule: { interval: '10s' }, + params: { + bar: true, + }, + actions: [], + enabled: true, + scheduledTaskId, + mutedInstanceIds: [], + muteAll: true, + }, + references: [], + }); + + taskManager.get.mockRejectedValueOnce(SavedObjectsErrorHelpers.createGenericNotFoundError()); + + await rulesClient.getAlertState({ id: '1' }); + + expect(rulesClientParams.logger.warn).toHaveBeenCalledTimes(1); + expect(rulesClientParams.logger.warn).toHaveBeenCalledWith('Task (task-123) not found'); + }); + + test('logs a warning if the taskManager throws an error', async () => { + const rulesClient = new RulesClient(rulesClientParams); + + const scheduledTaskId = 'task-123'; + + unsecuredSavedObjectsClient.get.mockResolvedValueOnce({ + id: '1', + type: RULE_SAVED_OBJECT_TYPE, + attributes: { + alertTypeId: '123', + schedule: { interval: '10s' }, + params: { + bar: true, + }, + actions: [], + enabled: true, + scheduledTaskId, + mutedInstanceIds: [], + muteAll: true, + }, + references: [], + }); + + taskManager.get.mockRejectedValueOnce(SavedObjectsErrorHelpers.createBadRequestError()); + + await rulesClient.getAlertState({ id: '1' }); + + expect(rulesClientParams.logger.warn).toHaveBeenCalledTimes(1); + expect(rulesClientParams.logger.warn).toHaveBeenCalledWith( + 'An error occurred when getting the task state for (task-123)' + ); + }); + describe('authorization', () => { beforeEach(() => { unsecuredSavedObjectsClient.get.mockResolvedValueOnce({ From 912c260108dddd78c574ec4cd6f9f19331f2b0ac Mon Sep 17 00:00:00 2001 From: "Quynh Nguyen (Quinn)" <43350163+qn895@users.noreply.github.com> Date: Thu, 15 Feb 2024 12:11:43 -0600 Subject: [PATCH 13/40] [ML] Fixes Single Metric Viewer's zoom settings in URL are not restored if URL specifies a forecast ID (#176969) ## Summary Fix https://github.com/elastic/kibana/issues/168583 After https://github.com/elastic/kibana/assets/43350163/9fd1f43a-ca70-4495-b872-57cbcf421db9 ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../application/timeseriesexplorer/timeseriesexplorer.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js index 76c0ffb0389711..cb1f18fd823582 100644 --- a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js +++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js @@ -447,9 +447,13 @@ export class TimeSeriesExplorer extends React.Component { stateUpdate.contextAggregationInterval, bounds ); + if ( - focusRange === undefined || - this.previousSelectedForecastId !== this.props.selectedForecastId + // If the user's focus range is not defined (i.e. no 'zoom' parameter restored from the appState URL), + // then calculate the default focus range to use + zoom === undefined && + (focusRange === undefined || + this.previousSelectedForecastId !== this.props.selectedForecastId) ) { focusRange = calculateDefaultFocusRange( autoZoomDuration, From f5e3b942db8ee43b135feba7c068c1fc4ae80111 Mon Sep 17 00:00:00 2001 From: Davis McPhee Date: Thu, 15 Feb 2024 14:12:06 -0400 Subject: [PATCH 14/40] Fix flaky test from #173292 and #173784 (#176978) ## Summary This PR fixes the flaky test from #173292 and #173784. Flaky test runner x95: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5193. Resolves #173292. Resolves #173784. ### Checklist - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] [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: Julia Rechkunova --- .../use_fetch_occurances_range.ts | 5 ++++- test/functional/apps/discover/group1/_discover.ts | 7 +++++-- .../test_suites/common/discover/group1/_discover.ts | 11 ++++++----- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/plugins/discover/public/application/main/components/no_results/no_results_suggestions/use_fetch_occurances_range.ts b/src/plugins/discover/public/application/main/components/no_results/no_results_suggestions/use_fetch_occurances_range.ts index 90efad593d519e..e5306344f10584 100644 --- a/src/plugins/discover/public/application/main/components/no_results/no_results_suggestions/use_fetch_occurances_range.ts +++ b/src/plugins/discover/public/application/main/components/no_results/no_results_suggestions/use_fetch_occurances_range.ts @@ -66,7 +66,10 @@ export const useFetchOccurrencesRange = (params: Params): Result => { abortSignal: abortControllerRef.current?.signal, }); } catch (error) { - // + if (error.name !== 'AbortError') { + // eslint-disable-next-line no-console + console.error(error); + } } } diff --git a/test/functional/apps/discover/group1/_discover.ts b/test/functional/apps/discover/group1/_discover.ts index 0210c7d8cc7f25..34679964e3c94e 100644 --- a/test/functional/apps/discover/group1/_discover.ts +++ b/test/functional/apps/discover/group1/_discover.ts @@ -170,8 +170,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show matches when time range is expanded', async () => { - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await retry.waitFor('view all matches to load', async () => { + await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + return !(await testSubjects.exists('discoverNoResultsViewAllMatches')); + }); await retry.try(async function () { expect(await PageObjects.discover.hasNoResults()).to.be(false); expect(await PageObjects.discover.getHitCountInt()).to.be.above(0); diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover.ts b/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover.ts index 1b5b3c8f6ff528..32fa8d5d6a8af6 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover.ts @@ -152,9 +152,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - // FLAKY: https://github.com/elastic/kibana/issues/173292 - // FLAKY: https://github.com/elastic/kibana/issues/173784 - describe.skip('query #2, which has an empty time range', () => { + describe('query #2, which has an empty time range', () => { const fromTime = 'Jun 11, 1999 @ 09:22:11.000'; const toTime = 'Jun 12, 1999 @ 11:21:04.000'; @@ -177,8 +175,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show matches when time range is expanded', async () => { - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await retry.waitFor('view all matches to load', async () => { + await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + return !(await testSubjects.exists('discoverNoResultsViewAllMatches')); + }); await retry.try(async function () { expect(await PageObjects.discover.hasNoResults()).to.be(false); expect(await PageObjects.discover.getHitCountInt()).to.be.above(0); From e84128e147744bbdfaff8667332763cbc5bafad5 Mon Sep 17 00:00:00 2001 From: Coen Warmer Date: Thu, 15 Feb 2024 19:13:34 +0100 Subject: [PATCH 15/40] Better styling for connectors (#177048) --- .../public/routes/components/settings_tab.tsx | 1 + .../connector_selector_base.tsx | 25 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/plugins/ai_assistant_management/observability/public/routes/components/settings_tab.tsx b/src/plugins/ai_assistant_management/observability/public/routes/components/settings_tab.tsx index ab68cb3abb306e..f0a5650d41f702 100644 --- a/src/plugins/ai_assistant_management/observability/public/routes/components/settings_tab.tsx +++ b/src/plugins/ai_assistant_management/observability/public/routes/components/settings_tab.tsx @@ -162,6 +162,7 @@ export function SettingsTab() { )} > - + ({ value: connector.id, inputDisplay: ( - + {i18n.translate( @@ -102,18 +103,16 @@ export function ConnectorSelectorBase(props: ConnectorSelectorBaseProps) { )} - - - {connector.name} - + + ), - dropdownDisplay: ( - - {connector.name} - - ), + dropdownDisplay: {connector.name}, }))} onChange={(id) => { props.selectConnector(id); From 167cc236b6d397020a0c8847cb5154ad4e2b341d Mon Sep 17 00:00:00 2001 From: Marta Bondyra <4283304+mbondyra@users.noreply.github.com> Date: Thu, 15 Feb 2024 19:14:45 +0100 Subject: [PATCH 16/40] [Lens] fix tests console errors (#176506) ## Summary Removes these console.errors from when we run tests. Rewrites all chart_switch and almost all editor frame tests to react testing library. Slightly improves some mocks. Screenshot 2024-02-15 at 11 13 10 Screenshot 2024-02-15 at 11 13 24 Screenshot 2024-02-15 at 11 13 30 Screenshot 2024-02-15 at 11 13 36 Screenshot 2024-02-15 at 11 13 45 --- .../datasources/common/field_item.test.tsx | 3 +- .../dimension_panel/dimension_panel.test.tsx | 117 +- .../datasources/form_based/utils.test.tsx | 6 +- .../editor_frame/data_panel_wrapper.tsx | 4 +- .../editor_frame/editor_frame.test.tsx | 1024 +++++++---------- .../workspace_panel/chart_switch.test.tsx | 599 +++------- .../workspace_panel/chart_switch.tsx | 6 +- .../lens/public/mocks/datasource_mock.tsx | 2 +- .../public/mocks/expression_renderer_mock.tsx | 4 +- .../plugins/lens/public/mocks/store_mocks.tsx | 2 +- .../lens/public/mocks/visualization_mock.tsx | 29 +- .../__snapshots__/load_initial.test.tsx.snap | 4 +- .../state_management/load_initial.test.tsx | 2 +- 13 files changed, 685 insertions(+), 1117 deletions(-) diff --git a/x-pack/plugins/lens/public/datasources/common/field_item.test.tsx b/x-pack/plugins/lens/public/datasources/common/field_item.test.tsx index 72686f0faf69fa..afd178a64ece5f 100644 --- a/x-pack/plugins/lens/public/datasources/common/field_item.test.tsx +++ b/x-pack/plugins/lens/public/datasources/common/field_item.test.tsx @@ -140,7 +140,8 @@ describe('Lens Field Item', () => { }, documentField, ], - } as IndexPattern; + isTimeBased: jest.fn(), + } as unknown as IndexPattern; defaultProps = { indexPattern, diff --git a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimension_panel.test.tsx b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimension_panel.test.tsx index 86ac619e9dcaa3..dedd7c2f38ef57 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimension_panel.test.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimension_panel.test.tsx @@ -7,7 +7,8 @@ import { ReactWrapper, ShallowWrapper } from 'enzyme'; import React, { ChangeEvent } from 'react'; -import { act } from 'react-dom/test-utils'; +import { screen, act, render, within } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import { findTestSubject } from '@elastic/eui/lib/test'; import { EuiComboBox, @@ -282,6 +283,30 @@ describe('FormBasedDimensionEditor', () => { jest.clearAllMocks(); }); + const renderDimensionPanel = (propsOverrides = {}) => { + const Wrapper: React.FC<{ + children: React.ReactNode; + }> = ({ children }) => { + return {children}; + }; + + const rtlRender = render( + , + { + wrapper: Wrapper, + } + ); + + const getVisibleFieldSelectOptions = () => { + const optionsList = screen.getByRole('dialog'); + return within(optionsList) + .getAllByRole('option') + .map((option) => option.textContent); + }; + + return { ...rtlRender, getVisibleFieldSelectOptions }; + }; + let wrapper: ReactWrapper | ShallowWrapper; afterEach(() => { @@ -293,71 +318,67 @@ describe('FormBasedDimensionEditor', () => { it('should call the filterOperations function', () => { const filterOperations = jest.fn().mockReturnValue(true); - wrapper = mountWithServices( - - ); - + renderDimensionPanel({ filterOperations }); expect(filterOperations).toBeCalled(); }); it('should show field select', () => { - wrapper = mountWithServices(); - - expect(getFieldSelectComboBox(wrapper)).toHaveLength(1); + renderDimensionPanel(); + expect(screen.getByTestId('indexPattern-dimension-field')).toBeInTheDocument(); }); it('should not show field select on fieldless operation', () => { - wrapper = mountWithServices( - - ); + renderDimensionPanel({ + state: getStateWithColumns({ + col1: { + label: 'Filters', + dataType: 'string', + isBucketed: false, - expect(getFieldSelectComboBox(wrapper)).toHaveLength(0); + // Private + operationType: 'filters', + params: { filters: [] }, + } as FiltersIndexPatternColumn, + }), + }); + expect(screen.queryByTestId('indexPattern-dimension-field')).not.toBeInTheDocument(); }); it('should not show any choices if the filter returns false', () => { - wrapper = mountWithServices( - false} - /> - ); - - expect(getFieldSelectComboBox(wrapper).prop('options')!).toHaveLength(0); + renderDimensionPanel({ + columnId: 'col2', + filterOperations: () => false, + }); + userEvent.click(screen.getByRole('button', { name: /open list of options/i })); + expect(screen.getByText(/There aren't any options available/)).toBeInTheDocument(); }); it('should list all field names and document as a whole in prioritized order', () => { - wrapper = mountWithServices(); - - const options = getFieldSelectComboBox(wrapper).prop('options'); + const { getVisibleFieldSelectOptions } = renderDimensionPanel(); - expect(options).toHaveLength(3); + const comboBoxButton = screen.getAllByRole('button', { name: /open list of options/i })[0]; + const comboBoxInput = screen.getAllByTestId('comboBoxSearchInput')[0]; + userEvent.click(comboBoxButton); - expect(options![0].label).toEqual('Records'); - expect(options![1].options!.map(({ label }) => label)).toEqual([ + const allOptions = [ + 'Records', 'timestampLabel', 'bytes', 'memory', 'source', - ]); + // these fields are generated to test the issue #148062 about fields that are using JS Object method names + ...Object.getOwnPropertyNames(Object.getPrototypeOf({})).sort(), + ]; + expect(allOptions.slice(0, 7)).toEqual(getVisibleFieldSelectOptions()); - // these fields are generated to test the issue #148062 about fields that are using JS Object method names - expect(options![2].options!.map(({ label }) => label)).toEqual( - Object.getOwnPropertyNames(Object.getPrototypeOf({})).sort() - ); + // keep hitting arrow down to scroll to the next options (react-window only renders visible options) + userEvent.type(comboBoxInput, '{ArrowDown}'.repeat(12)); + + expect(getVisibleFieldSelectOptions()).toEqual(allOptions.slice(5, 16)); + + // press again to go back to the beginning + userEvent.type(comboBoxInput, '{ArrowDown}'); + expect(getVisibleFieldSelectOptions()).toEqual(allOptions.slice(0, 9)); }); it('should hide fields that have no data', () => { @@ -1783,7 +1804,11 @@ describe('FormBasedDimensionEditor', () => { }); expect(setState.mock.calls[0]).toEqual([expect.any(Function), { isDimensionComplete: true }]); - expect(setState.mock.calls[0][0](props.state)).toEqual({ + let newState = props.state; + act(() => { + newState = setState.mock.calls[0][0](props.state); + }); + expect(newState).toEqual({ ...props.state, layers: { first: { diff --git a/x-pack/plugins/lens/public/datasources/form_based/utils.test.tsx b/x-pack/plugins/lens/public/datasources/form_based/utils.test.tsx index 7d7b2d9b59f83c..3302aac2a55797 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/utils.test.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/utils.test.tsx @@ -310,7 +310,11 @@ describe('indexpattern_datasource utils', () => { ]), [ `${rootId}X${formulaParts.length}`, - { operationType: 'math', references: formulaParts.map((_, i) => `${rootId}X${i}`) }, + { + operationType: 'math', + references: formulaParts.map((_, i) => `${rootId}X${i}`), + label: 'Part of formula', + }, ], ]); } diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.tsx index b9ad0df04aaa38..da78db7ed0bc67 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.tsx @@ -194,7 +194,9 @@ export const DataPanelWrapper = memo((props: DataPanelWrapperProps) => { <> {DataPanelComponent && ( -
{DataPanelComponent(datasourceProps)}
+
+ {DataPanelComponent(datasourceProps)} +
)} ); diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx index 7cd48d6beb03df..d99f6418870fad 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx @@ -7,31 +7,18 @@ import React, { useEffect } from 'react'; import { ReactWrapper } from 'enzyme'; -import faker from 'faker'; - -// Tests are executed in a jsdom environment who does not have sizing methods, -// thus the AutoSizer will always compute a 0x0 size space -// Mock the AutoSizer inside EuiSelectable (Chart Switch) and return some dimensions > 0 -jest.mock('react-virtualized-auto-sizer', () => { - return function (props: { - children: (dimensions: { width: number; height: number }) => React.ReactNode; - disableHeight?: boolean; - }) { - const { children, disableHeight, ...otherProps } = props; - return ( - // js-dom may complain that a non-DOM attributes are used when appending props - // Handle the disableHeight case using native DOM styling -
- {children({ width: 100, height: 100 })} -
- ); - }; -}); +import { screen, fireEvent, within, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; -import { EuiPanel, EuiToolTip } from '@elastic/eui'; import { EditorFrame, EditorFrameProps } from './editor_frame'; -import { DatasourcePublicAPI, DatasourceSuggestion, Visualization } from '../../types'; -import { act } from 'react-dom/test-utils'; +import { + DatasourceMap, + DatasourcePublicAPI, + DatasourceSuggestion, + Visualization, + VisualizationMap, +} from '../../types'; +import { act } from '@testing-library/react'; import { coreMock } from '@kbn/core/public/mocks'; import { createMockVisualization, @@ -42,15 +29,13 @@ import { renderWithReduxStore, } from '../../mocks'; import { inspectorPluginMock } from '@kbn/inspector-plugin/public/mocks'; -import { ReactExpressionRendererType } from '@kbn/expressions-plugin/public'; import { DragDrop, useDragDropContext } from '@kbn/dom-drag-drop'; import { uiActionsPluginMock } from '@kbn/ui-actions-plugin/public/mocks'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { expressionsPluginMock } from '@kbn/expressions-plugin/public/mocks'; import { mockDataPlugin, mountWithProvider } from '../../mocks'; -import { setState } from '../../state_management'; +import { LensAppState, setState } from '../../state_management'; import { getLensInspectorService } from '../../lens_inspector_service'; -import { toExpression } from '@kbn/interpreter'; import { createIndexPatternServiceMock } from '../../mocks/data_views_service_mock'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; import { EventAnnotationServiceType } from '@kbn/event-annotation-plugin/public'; @@ -105,6 +90,7 @@ function getDefaultProps() { indexPatternService: createIndexPatternServiceMock(), getUserMessages: () => [], addUserMessages: () => () => {}, + ExpressionRenderer: createExpressionRendererMock(), }; return defaultProps; } @@ -116,207 +102,172 @@ describe('editor_frame', () => { let mockVisualization2: jest.Mocked; let mockDatasource2: DatasourceMock; - let expressionRendererMock: ReactExpressionRendererType; + let visualizationMap: VisualizationMap; + let datasourceMap: DatasourceMap; beforeEach(() => { - mockVisualization = { - ...createMockVisualization(), - id: 'testVis', - visualizationTypes: [ - { - icon: 'empty', - id: 'testVis', - label: faker.lorem.word(), - groupLabel: 'testVisGroup', - }, - ], - }; - mockVisualization2 = { - ...createMockVisualization(), - id: 'testVis2', - visualizationTypes: [ - { - icon: 'empty', - id: 'testVis2', - label: 'TEST2', - groupLabel: 'testVis2Group', - }, - ], - }; - - mockVisualization.getLayerIds.mockReturnValue(['first']); - mockVisualization2.getLayerIds.mockReturnValue(['second']); + mockVisualization = createMockVisualization(); + mockVisualization2 = createMockVisualization('testVis2', ['second']); mockDatasource = createMockDatasource(); mockDatasource2 = createMockDatasource('testDatasource2'); + mockDatasource.getLayers.mockReturnValue(['first']); + mockDatasource.getDatasourceSuggestionsFromCurrentState.mockReturnValue([ + { + state: {}, + table: { + columns: [], + isMultiRow: true, + layerId: 'first', + changeType: 'unchanged', + }, + keptLayerIds: [], + }, + ]); + + visualizationMap = { + testVis: mockVisualization, + testVis2: mockVisualization2, + }; - expressionRendererMock = createExpressionRendererMock(); + datasourceMap = { + testDatasource: mockDatasource, + testDatasource2: mockDatasource2, + }; }); - describe('initialization', () => { - it('should not render something before all datasources are initialized', async () => { - const props = { - ...getDefaultProps(), - visualizationMap: { - testVis: mockVisualization, - }, - datasourceMap: { - testDatasource: mockDatasource, - }, - - ExpressionRenderer: expressionRendererMock, - }; - const { lensStore } = await mountWithProvider(, { + const renderEditorFrame = ( + propsOverrides: Partial = {}, + { preloadedStateOverrides }: { preloadedStateOverrides: Partial } = { + preloadedStateOverrides: {}, + } + ) => { + const { store, ...rtlRender } = renderWithReduxStore( + , + {}, + { preloadedState: { activeDatasourceId: 'testDatasource', - datasourceStates: { - testDatasource: { - isLoading: true, - state: { - internalState1: '', - }, - }, - }, - }, - }); - expect(mockDatasource.DataPanelComponent).not.toHaveBeenCalled(); - lensStore.dispatch( - setState({ + visualization: { activeId: mockVisualization.id, state: 'initialState' }, datasourceStates: { testDatasource: { isLoading: false, state: { - internalState1: '', + internalState: 'datasourceState', }, }, }, - }) - ); - expect(mockDatasource.DataPanelComponent).toHaveBeenCalled(); - }); - - it('should initialize visualization state and render config panel', async () => { - const initialState = {}; - mockDatasource.getLayers.mockReturnValue(['first']); - - const props = { - ...getDefaultProps(), - visualizationMap: { - testVis: { ...mockVisualization, initialize: () => initialState }, - }, - datasourceMap: { - testDatasource: { - ...mockDatasource, - initialize: () => Promise.resolve(), - }, + ...preloadedStateOverrides, }, + storeDeps: mockStoreDeps({ datasourceMap, visualizationMap }), + } + ); - ExpressionRenderer: expressionRendererMock, - }; + const openChartSwitch = () => { + userEvent.click(screen.getByTestId('lnsChartSwitchPopover')); + }; - await mountWithProvider(, { - preloadedState: { - visualization: { activeId: 'testVis', state: initialState }, - }, + const waitForChartSwitchClosed = () => { + waitFor(() => { + expect(screen.queryByTestId('lnsChartSwitchList')).not.toBeInTheDocument(); }); + }; - expect(mockVisualization.getConfiguration).toHaveBeenCalledWith( - expect.objectContaining({ state: initialState }) - ); - }); - - let instance: ReactWrapper; - - it('should render the resulting expression using the expression renderer', async () => { - mockDatasource.getLayers.mockReturnValue(['first']); - - const props: EditorFrameProps = { - ...getDefaultProps(), - visualizationMap: { - testVis: { - ...mockVisualization, - toExpression: (state, datasourceLayers, attrs, datasourceExpressionsByLayers = {}) => - toExpression({ - type: 'expression', - chain: [ - ...(datasourceExpressionsByLayers.first?.chain ?? []), - { type: 'function', function: 'testVis', arguments: {} }, - ], - }), - }, - }, - datasourceMap: { - testDatasource: { - ...mockDatasource, - toExpression: () => 'datasource', - }, - }, + const getMenuItem = (subType: string) => { + const list = screen.getByTestId('lnsChartSwitchList'); + return within(list).getByTestId(`lnsChartSwitchPopover_${subType}`); + }; - ExpressionRenderer: expressionRendererMock, - }; - instance = ( - await mountWithProvider(, { - preloadedState: { - visualization: { activeId: 'testVis', state: {} }, + const switchToVis = (subType: string) => { + fireEvent.click(getMenuItem(subType)); + }; + const queryLayerPanel = () => screen.queryByTestId('lns-layerPanel-0'); + const queryWorkspacePanel = () => screen.queryByTestId('lnsWorkspace'); + const queryDataPanel = () => screen.queryByTestId('lnsDataPanelWrapper'); + + return { + ...rtlRender, + store, + switchToVis, + getMenuItem, + openChartSwitch, + queryLayerPanel, + queryWorkspacePanel, + queryDataPanel, + waitForChartSwitchClosed, + simulateLoadingDatasource: () => + store.dispatch( + setState({ datasourceStates: { testDatasource: { isLoading: false, state: { - internalState1: '', + internalState: 'datasourceState', + }, + }, + }, + }) + ), + }; + }; + + describe('initialization', () => { + it('should render workspace panel, data panel and layer panel when all datasources are initialized', async () => { + const { queryWorkspacePanel, queryDataPanel, queryLayerPanel, simulateLoadingDatasource } = + renderEditorFrame(undefined, { + preloadedStateOverrides: { + datasourceStates: { + testDatasource: { + isLoading: true, + state: { + internalState: 'datasourceState', }, }, }, }, - }) - ).instance; + }); - instance.update(); + expect(mockVisualization.getConfiguration).not.toHaveBeenCalled(); + expect(queryWorkspacePanel()).not.toBeInTheDocument(); + expect(queryDataPanel()).not.toBeInTheDocument(); + expect(queryLayerPanel()).not.toBeInTheDocument(); - expect(instance.find(expressionRendererMock).prop('expression')).toMatchInlineSnapshot(` - "datasource - | testVis" - `); + simulateLoadingDatasource(); + expect(mockVisualization.getConfiguration).toHaveBeenCalledWith( + expect.objectContaining({ state: 'initialState' }) + ); + + expect(queryWorkspacePanel()).toBeInTheDocument(); + expect(queryDataPanel()).toBeInTheDocument(); + expect(queryLayerPanel()).toBeInTheDocument(); + }); + it('should render the resulting expression using the expression renderer', async () => { + renderEditorFrame(); + expect(screen.getByTestId('lnsExpressionRenderer')).toHaveTextContent( + 'datasource_expression | testVis' + ); }); }); describe('state update', () => { it('should re-render config panel after state update', async () => { - mockDatasource.getLayers.mockReturnValue(['first']); - const props = { - ...getDefaultProps(), - visualizationMap: { - testVis: { ...mockVisualization, toExpression: () => null }, - }, - datasourceMap: { - testDatasource: mockDatasource, - }, + const { store } = renderEditorFrame(); + const updatedState = 'updatedVisState'; - ExpressionRenderer: expressionRendererMock, - }; - renderWithReduxStore( - , - {}, - { - preloadedState: { - activeDatasourceId: 'testDatasource', - visualization: { activeId: mockVisualization.id, state: {} }, - datasourceStates: { - testDatasource: { - isLoading: false, - state: '', - }, - }, + store.dispatch( + setState({ + visualization: { + activeId: mockVisualization.id, + state: updatedState, }, - } + }) ); - const updatedState = {}; - const setDatasourceState = (mockDatasource.DataPanelComponent as jest.Mock).mock.calls[0][0] - .setState; - act(() => { - setDatasourceState(updatedState); - }); - expect(mockVisualization.getConfiguration).toHaveBeenCalledTimes(3); expect(mockVisualization.getConfiguration).toHaveBeenLastCalledWith( expect.objectContaining({ @@ -326,20 +277,7 @@ describe('editor_frame', () => { }); it('should re-render data panel after state update', async () => { - mockDatasource.getLayers.mockReturnValue(['first']); - - const props = { - ...getDefaultProps(), - visualizationMap: { - testVis: mockVisualization, - }, - datasourceMap: { - testDatasource: mockDatasource, - }, - - ExpressionRenderer: expressionRendererMock, - }; - await mountWithProvider(); + renderEditorFrame(); const setDatasourceState = (mockDatasource.DataPanelComponent as jest.Mock).mock.calls[0][0] .setState; @@ -349,9 +287,8 @@ describe('editor_frame', () => { const updatedState = { title: 'shazm', }; - act(() => { - setDatasourceState(updatedState); - }); + + setDatasourceState(updatedState); expect(mockDatasource.DataPanelComponent).toHaveBeenCalledTimes(1); expect(mockDatasource.DataPanelComponent).toHaveBeenLastCalledWith( @@ -362,21 +299,7 @@ describe('editor_frame', () => { }); it('should re-render config panel with updated datasource api after datasource state update', async () => { - mockDatasource.getLayers.mockReturnValue(['first']); - const props = { - ...getDefaultProps(), - visualizationMap: { - testVis: mockVisualization, - }, - datasourceMap: { - testDatasource: mockDatasource, - }, - - ExpressionRenderer: expressionRendererMock, - }; - await mountWithProvider(, { - preloadedState: { visualization: { activeId: mockVisualization.id, state: {} } }, - }); + renderEditorFrame(); const updatedPublicAPI: DatasourcePublicAPI = { datasourceId: 'testDatasource', @@ -394,9 +317,8 @@ describe('editor_frame', () => { const setDatasourceState = (mockDatasource.DataPanelComponent as jest.Mock).mock.calls[0][0] .setState; - act(() => { - setDatasourceState('newState'); - }); + + setDatasourceState('newState'); expect(mockVisualization.getConfiguration).toHaveBeenCalledTimes(1); expect(mockVisualization.getConfiguration).toHaveBeenCalledWith( @@ -413,34 +335,10 @@ describe('editor_frame', () => { describe('datasource public api communication', () => { it('should give access to the datasource state in the datasource factory function', async () => { - const datasourceState = {}; - mockDatasource.initialize.mockReturnValue(datasourceState); - mockDatasource.getLayers.mockReturnValue(['first']); - - const props = { - ...getDefaultProps(), - visualizationMap: { - testVis: mockVisualization, - }, - datasourceMap: { - testDatasource: mockDatasource, - }, - - ExpressionRenderer: expressionRendererMock, - }; - await mountWithProvider(, { - preloadedState: { - datasourceStates: { - testDatasource: { - isLoading: false, - state: {}, - }, - }, - }, - }); + renderEditorFrame(); expect(mockDatasource.getPublicAPI).toHaveBeenCalledWith({ - state: datasourceState, + state: { internalState: 'datasourceState' }, layerId: 'first', indexPatterns: {}, }); @@ -448,75 +346,15 @@ describe('editor_frame', () => { }); describe('switching', () => { - let instance: ReactWrapper; - - function switchTo(subType: string) { - act(() => { - instance.find('[data-test-subj="lnsChartSwitchPopover"]').last().simulate('click'); - }); - - instance.update(); - - act(() => { - instance - .find(`[data-test-subj="lnsChartSwitchPopover_${subType}"]`) - .last() - .simulate('click'); - }); - } - - beforeEach(async () => { - mockVisualization2.initialize.mockReturnValue({ initial: true }); - mockDatasource.getLayers.mockReturnValue(['first', 'second']); - mockDatasource.getDatasourceSuggestionsFromCurrentState.mockReturnValue([ - { - state: {}, - table: { - columns: [], - isMultiRow: true, - layerId: 'first', - changeType: 'unchanged', - }, - keptLayerIds: [], - }, - ]); - - const visualizationMap = { - testVis: mockVisualization, - testVis2: mockVisualization2, - }; - - const datasourceMap = { - testDatasource: mockDatasource, - testDatasource2: mockDatasource2, - }; - - const props = { - ...getDefaultProps(), - visualizationMap, - datasourceMap, - ExpressionRenderer: expressionRendererMock, - }; - instance = ( - await mountWithProvider(, { - storeDeps: mockStoreDeps({ datasourceMap, visualizationMap }), - }) - ).instance; - - // necessary to flush elements to dom synchronously - instance.update(); - }); - - afterEach(() => { - instance.unmount(); - }); - it('should initialize other visualization on switch', async () => { - switchTo('testVis2'); + const { openChartSwitch, switchToVis } = renderEditorFrame(); + openChartSwitch(); + switchToVis('testVis2'); expect(mockVisualization2.initialize).toHaveBeenCalled(); }); it('should use suggestions to switch to new visualization', async () => { + const { openChartSwitch, switchToVis } = renderEditorFrame(); const initialState = { suggested: true }; mockVisualization2.initialize.mockReturnValueOnce({ initial: true }); mockVisualization2.getVisualizationTypeId.mockReturnValueOnce('testVis2'); @@ -528,9 +366,8 @@ describe('editor_frame', () => { previewIcon: 'empty', }, ]); - - switchTo('testVis2'); - + openChartSwitch(); + switchToVis('testVis2'); expect(mockVisualization2.getSuggestions).toHaveBeenCalled(); expect(mockVisualization2.initialize).toHaveBeenCalledWith(expect.anything(), initialState); expect(mockVisualization2.getConfiguration).toHaveBeenCalledWith( @@ -541,7 +378,9 @@ describe('editor_frame', () => { it('should fall back when switching visualizations if the visualization has no suggested use', async () => { mockVisualization2.initialize.mockReturnValueOnce({ initial: true }); - switchTo('testVis2'); + const { openChartSwitch, switchToVis, waitForChartSwitchClosed } = renderEditorFrame(); + openChartSwitch(); + switchToVis('testVis2'); expect(mockDatasource.publicAPIMock.getTableSpec).toHaveBeenCalled(); expect(mockVisualization2.getSuggestions).toHaveBeenCalled(); @@ -553,131 +392,80 @@ describe('editor_frame', () => { expect(mockVisualization2.getConfiguration).toHaveBeenCalledWith( expect.objectContaining({ state: { initial: true } }) ); + waitForChartSwitchClosed(); }); }); describe('suggestions', () => { it('should fetch suggestions of currently active datasource', async () => { - const props = { - ...getDefaultProps(), - visualizationMap: { - testVis: mockVisualization, - }, - datasourceMap: { - testDatasource: mockDatasource, - testDatasource2: mockDatasource2, - }, - - ExpressionRenderer: expressionRendererMock, - }; - await mountWithProvider(); - + renderEditorFrame(); expect(mockDatasource.getDatasourceSuggestionsFromCurrentState).toHaveBeenCalled(); expect(mockDatasource2.getDatasourceSuggestionsFromCurrentState).not.toHaveBeenCalled(); }); it('should fetch suggestions of all visualizations', async () => { - mockDatasource.getDatasourceSuggestionsFromCurrentState.mockReturnValue([ - { - state: {}, - table: { - changeType: 'unchanged', - columns: [], - isMultiRow: true, - layerId: 'first', - }, - keptLayerIds: [], - }, - ]); - - const props = { - ...getDefaultProps(), - visualizationMap: { - testVis: mockVisualization, - testVis2: mockVisualization2, - }, - datasourceMap: { - testDatasource: mockDatasource, - testDatasource2: mockDatasource2, - }, - - ExpressionRenderer: expressionRendererMock, - }; - await mountWithProvider(); + renderEditorFrame(); expect(mockVisualization.getSuggestions).toHaveBeenCalled(); expect(mockVisualization2.getSuggestions).toHaveBeenCalled(); }); - let instance: ReactWrapper; it('should display top 5 suggestions in descending order', async () => { - mockDatasource.getLayers.mockReturnValue(['first']); - const props = { - ...getDefaultProps(), - visualizationMap: { - testVis: { - ...mockVisualization, - getSuggestions: () => [ - { - score: 0.1, - state: {}, - title: 'Suggestion6', - previewIcon: 'empty', - }, - { - score: 0.5, - state: {}, - title: 'Suggestion3', - previewIcon: 'empty', - }, - { - score: 0.7, - state: {}, - title: 'Suggestion2', - previewIcon: 'empty', - }, - { - score: 0.8, - state: {}, - title: 'Suggestion1', - previewIcon: 'empty', - }, - ], - }, - testVis2: { - ...mockVisualization, - getSuggestions: () => [ - { - score: 0.4, - state: {}, - title: 'Suggestion5', - previewIcon: 'empty', - }, - { - score: 0.45, - state: {}, - title: 'Suggestion4', - previewIcon: 'empty', - }, - ], - }, + visualizationMap = { + testVis: { + ...mockVisualization, + getSuggestions: () => [ + { + score: 0.1, + state: {}, + title: 'Suggestion6', + previewIcon: 'empty', + }, + { + score: 0.5, + state: {}, + title: 'Suggestion3', + previewIcon: 'empty', + }, + { + score: 0.7, + state: {}, + title: 'Suggestion2', + previewIcon: 'empty', + }, + { + score: 0.8, + state: {}, + title: 'Suggestion1', + previewIcon: 'empty', + }, + ], }, - datasourceMap: { - testDatasource: { - ...mockDatasource, - getDatasourceSuggestionsFromCurrentState: () => [generateSuggestion()], - }, + testVis2: { + ...mockVisualization, + getSuggestions: () => [ + { + score: 0.4, + state: {}, + title: 'Suggestion5', + previewIcon: 'empty', + }, + { + score: 0.45, + state: {}, + title: 'Suggestion4', + previewIcon: 'empty', + }, + ], }, - - ExpressionRenderer: expressionRendererMock, }; - instance = (await mountWithProvider()).instance; + + renderEditorFrame(); expect( - instance - .find('[data-test-subj="lnsSuggestion"]') - .find(EuiPanel) - .map((el) => el.parents(EuiToolTip).prop('content')) + within(screen.getByTestId('lnsSuggestionsPanel')) + .getAllByTestId('lnsSuggestion') + .map((el) => el.textContent) ).toEqual([ 'Current visualization', 'Suggestion1', @@ -691,39 +479,26 @@ describe('editor_frame', () => { it('should switch to suggested visualization', async () => { mockDatasource.getLayers.mockReturnValue(['first', 'second', 'third']); const newDatasourceState = {}; - const suggestionVisState = {}; - const props = { - ...getDefaultProps(), - visualizationMap: { - testVis: { - ...mockVisualization, - getSuggestions: () => [ - { - score: 0.8, - state: suggestionVisState, - title: 'Suggestion1', - previewIcon: 'empty', - }, - ], - }, - testVis2: mockVisualization2, - }, - datasourceMap: { - testDatasource: { - ...mockDatasource, - getDatasourceSuggestionsFromCurrentState: () => [generateSuggestion()], - }, + const suggestionVisState = { suggested: true }; + + visualizationMap = { + testVis: { + ...mockVisualization, + getSuggestions: () => [ + { + score: 0.8, + state: suggestionVisState, + title: 'Suggestion1', + previewIcon: 'empty', + }, + ], }, - - ExpressionRenderer: expressionRendererMock, + testVis2: mockVisualization2, }; - instance = (await mountWithProvider()).instance; - act(() => { - instance.find('[data-test-subj="lnsSuggestion"]').at(2).simulate('click'); - }); + renderEditorFrame(); + userEvent.click(screen.getByLabelText(/Suggestion1/i)); - expect(mockVisualization.getConfiguration).toHaveBeenCalledTimes(2); expect(mockVisualization.getConfiguration).toHaveBeenLastCalledWith( expect.objectContaining({ state: suggestionVisState, @@ -735,13 +510,18 @@ describe('editor_frame', () => { }) ); }); + describe('legacy tests', () => { + let instance: ReactWrapper; + + afterEach(() => { + instance.unmount(); + }); + + // this test doesn't test anything, it's buggy and should be rewritten when we find a way to user test drag and drop + it.skip('should switch to best suggested visualization on field drop', async () => { + const suggestionVisState = {}; - it('should switch to best suggested visualization on field drop', async () => { - mockDatasource.getLayers.mockReturnValue(['first']); - const suggestionVisState = {}; - const props = { - ...getDefaultProps(), - visualizationMap: { + visualizationMap = { testVis: { ...mockVisualization, getSuggestions: () => [ @@ -760,210 +540,196 @@ describe('editor_frame', () => { ], }, testVis2: mockVisualization2, - }, - datasourceMap: { + }; + datasourceMap = { testDatasource: { ...mockDatasource, getDatasourceSuggestionsForField: () => [generateSuggestion()], getDatasourceSuggestionsFromCurrentState: () => [generateSuggestion()], getDatasourceSuggestionsForVisualizeField: () => [generateSuggestion()], }, - }, + }; + renderEditorFrame(); - ExpressionRenderer: expressionRendererMock, - }; - instance = (await mountWithProvider()).instance; + mockVisualization.getConfiguration.mockClear(); + act(() => { + instance.find('[data-test-subj="lnsWorkspace"]').last().simulate('drop'); + }); - act(() => { - instance.find('[data-test-subj="lnsWorkspace"]').last().simulate('drop'); + expect(mockVisualization.getConfiguration).toHaveBeenCalledWith( + expect.objectContaining({ + state: {}, + }) + ); }); - expect(mockVisualization.getConfiguration).toHaveBeenCalledWith( - expect.objectContaining({ - state: suggestionVisState, - }) - ); - }); - - it('should use the currently selected visualization if possible on field drop', async () => { - mockDatasource.getLayers.mockReturnValue(['first', 'second', 'third']); - const suggestionVisState = {}; - const props = { - ...getDefaultProps(), - visualizationMap: { - testVis: { - ...mockVisualization, - getSuggestions: () => [ - { - score: 0.2, - state: {}, - title: 'Suggestion1', - previewIcon: 'empty', - }, - { - score: 0.6, - state: suggestionVisState, - title: 'Suggestion2', - previewIcon: 'empty', - }, - ], - }, - testVis2: { - ...mockVisualization2, - getSuggestions: () => [ - { - score: 0.8, - state: {}, - title: 'Suggestion3', - previewIcon: 'empty', - }, - ], + it('should use the currently selected visualization if possible on field drop', async () => { + mockDatasource.getLayers.mockReturnValue(['first', 'second', 'third']); + const suggestionVisState = {}; + const props = { + ...getDefaultProps(), + visualizationMap: { + testVis: { + ...mockVisualization, + getSuggestions: () => [ + { + score: 0.2, + state: {}, + title: 'Suggestion1', + previewIcon: 'empty', + }, + { + score: 0.6, + state: suggestionVisState, + title: 'Suggestion2', + previewIcon: 'empty', + }, + ], + }, + testVis2: { + ...mockVisualization2, + getSuggestions: () => [ + { + score: 0.8, + state: {}, + title: 'Suggestion3', + previewIcon: 'empty', + }, + ], + }, }, - }, - datasourceMap: { - testDatasource: { - ...mockDatasource, - getDatasourceSuggestionsForField: () => [generateSuggestion()], - getDatasourceSuggestionsFromCurrentState: () => [generateSuggestion()], - getDatasourceSuggestionsForVisualizeField: () => [generateSuggestion()], - DataPanelComponent: jest.fn().mockImplementation(() =>
), + datasourceMap: { + testDatasource: { + ...mockDatasource, + getDatasourceSuggestionsForField: () => [generateSuggestion()], + getDatasourceSuggestionsFromCurrentState: () => [generateSuggestion()], + getDatasourceSuggestionsForVisualizeField: () => [generateSuggestion()], + DataPanelComponent: jest.fn().mockImplementation(() =>
), + }, }, - }, - - ExpressionRenderer: expressionRendererMock, - } as EditorFrameProps; - instance = ( - await mountWithProvider(, { - preloadedState: { - datasourceStates: { - testDatasource: { - isLoading: false, - state: { - internalState1: '', + } as EditorFrameProps; + instance = ( + await mountWithProvider(, { + preloadedState: { + datasourceStates: { + testDatasource: { + isLoading: false, + state: { + internalState1: '', + }, }, }, }, - }, - }) - ).instance; - - instance.update(); + }) + ).instance; + + instance.update(); + + act(() => { + instance.find('[data-test-subj="mockVisA"]').find(DragDrop).prop('onDrop')!( + { + indexPatternId: '1', + field: {}, + id: '1', + humanData: { label: 'draggedField' }, + }, + 'field_add' + ); + }); - act(() => { - instance.find('[data-test-subj="mockVisA"]').find(DragDrop).prop('onDrop')!( - { - indexPatternId: '1', - field: {}, - id: '1', - humanData: { label: 'draggedField' }, - }, - 'field_add' + expect(mockVisualization.getConfiguration).toHaveBeenCalledWith( + expect.objectContaining({ + state: suggestionVisState, + }) ); }); - expect(mockVisualization.getConfiguration).toHaveBeenCalledWith( - expect.objectContaining({ - state: suggestionVisState, - }) - ); - }); - - it('should use the highest priority suggestion available', async () => { - mockDatasource.getLayers.mockReturnValue(['first', 'second', 'third']); - const suggestionVisState = {}; - const mockVisualization3 = { - ...createMockVisualization(), - id: 'testVis3', - getLayerIds: () => ['third'], - visualizationTypes: [ - { - icon: 'empty', - id: 'testVis3', - label: 'TEST3', - groupLabel: 'testVis3Group', - }, - ], - getSuggestions: () => [ - { - score: 0.9, - state: suggestionVisState, - title: 'Suggestion3', - previewIcon: 'empty', - }, - { - score: 0.7, - state: {}, - title: 'Suggestion4', - previewIcon: 'empty', - }, - ], - }; - - const props = { - ...getDefaultProps(), - visualizationMap: { - testVis: { - ...mockVisualization, - // do not return suggestions for the currently active vis, otherwise it will be chosen - getSuggestions: () => [], - }, - testVis2: { - ...mockVisualization2, - getSuggestions: () => [], - }, - testVis3: { - ...mockVisualization3, + it('should use the highest priority suggestion available', async () => { + mockDatasource.getLayers.mockReturnValue(['first', 'second', 'third']); + const suggestionVisState = {}; + const mockVisualization3 = { + ...createMockVisualization('testVis3', ['third']), + getSuggestions: () => [ + { + score: 0.9, + state: suggestionVisState, + title: 'Suggestion3', + previewIcon: 'empty', + }, + { + score: 0.7, + state: {}, + title: 'Suggestion4', + previewIcon: 'empty', + }, + ], + }; + + const props = { + ...getDefaultProps(), + visualizationMap: { + testVis: { + ...mockVisualization, + // do not return suggestions for the currently active vis, otherwise it will be chosen + getSuggestions: () => [], + }, + testVis2: { + ...mockVisualization2, + getSuggestions: () => [], + }, + testVis3: { + ...mockVisualization3, + }, }, - }, - datasourceMap: { - testDatasource: { - ...mockDatasource, - getDatasourceSuggestionsForField: () => [generateSuggestion()], - getDatasourceSuggestionsFromCurrentState: () => [generateSuggestion()], - getDatasourceSuggestionsForVisualizeField: () => [generateSuggestion()], - DataPanelComponent: jest.fn().mockImplementation(() => { - const [, dndDispatch] = useDragDropContext(); - useEffect(() => { - dndDispatch({ - type: 'startDragging', - payload: { - dragging: { - id: 'draggedField', - humanData: { label: '1' }, + datasourceMap: { + testDatasource: { + ...mockDatasource, + getDatasourceSuggestionsForField: () => [generateSuggestion()], + getDatasourceSuggestionsFromCurrentState: () => [generateSuggestion()], + getDatasourceSuggestionsForVisualizeField: () => [generateSuggestion()], + DataPanelComponent: jest.fn().mockImplementation(() => { + const [, dndDispatch] = useDragDropContext(); + useEffect(() => { + dndDispatch({ + type: 'startDragging', + payload: { + dragging: { + id: 'draggedField', + humanData: { label: '1' }, + }, }, - }, - }); - }, [dndDispatch]); - return
; - }), + }); + }, [dndDispatch]); + return
; + }), + }, }, - }, - ExpressionRenderer: expressionRendererMock, - } as EditorFrameProps; + } as EditorFrameProps; - instance = (await mountWithProvider()).instance; + instance = (await mountWithProvider()).instance; - instance.update(); + instance.update(); - act(() => { - instance.find(DragDrop).filter('[dataTestSubj="lnsWorkspace"]').prop('onDrop')!( - { - indexPatternId: '1', - field: {}, - id: '1', - humanData: { - label: 'label', + act(() => { + instance.find(DragDrop).filter('[dataTestSubj="lnsWorkspace"]').prop('onDrop')!( + { + indexPatternId: '1', + field: {}, + id: '1', + humanData: { + label: 'label', + }, }, - }, - 'field_add' + 'field_add' + ); + }); + + expect(mockVisualization3.getConfiguration).toHaveBeenCalledWith( + expect.objectContaining({ + state: suggestionVisState, + }) ); }); - - expect(mockVisualization3.getConfiguration).toHaveBeenCalledWith( - expect.objectContaining({ - state: suggestionVisState, - }) - ); }); }); }); diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/chart_switch.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/chart_switch.test.tsx index 3e613d5a23e895..a82da848dc4a2e 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/chart_switch.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/chart_switch.test.tsx @@ -6,62 +6,54 @@ */ import React from 'react'; -import { ReactWrapper } from 'enzyme'; -import type { PaletteOutput } from '@kbn/coloring'; +import { screen, fireEvent, within } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import { createMockVisualization, mockStoreDeps, createMockFramePublicAPI, mockDatasourceMap, mockDatasourceStates, + renderWithReduxStore, } from '../../../mocks'; -import { mountWithProvider } from '../../../mocks'; - -// Tests are executed in a jsdom environment who does not have sizing methods, -// thus the AutoSizer will always compute a 0x0 size space -// Mock the AutoSizer inside EuiSelectable (Chart Switch) and return some dimensions > 0 -jest.mock('react-virtualized-auto-sizer', () => { - return function (props: { - children: (dimensions: { width: number; height: number }) => React.ReactNode; - }) { - const { children } = props; - return
{children({ width: 100, height: 100 })}
; - }; -}); -import { Visualization, FramePublicAPI, DatasourcePublicAPI } from '../../../types'; -import { ChartSwitch } from './chart_switch'; -import { applyChanges } from '../../../state_management'; +import { + Visualization, + FramePublicAPI, + DatasourcePublicAPI, + SuggestionRequest, +} from '../../../types'; +import { ChartSwitch, ChartSwitchProps } from './chart_switch'; +import { LensAppState, applyChanges } from '../../../state_management'; describe('chart_switch', () => { function generateVisualization(id: string): jest.Mocked { return { - ...createMockVisualization(), - id, - getVisualizationTypeId: jest.fn((_state) => id), - visualizationTypes: [ + ...createMockVisualization(id), + getSuggestions: jest.fn((options) => [ { - icon: 'empty', - id, - label: `Label ${id}`, - groupLabel: `${id}Group`, + score: 1, + title: '', + state: `suggestion ${id}`, + previewIcon: 'empty', }, - ], - initialize: jest.fn((_addNewLayer, state) => { - return state || `${id} initial state`; - }), - getSuggestions: jest.fn((options) => { - return [ - { - score: 1, - title: '', - state: `suggestion ${id}`, - previewIcon: 'empty', - }, - ]; - }), + ]), }; } + let visualizationMap = mockVisualizationMap(); + let datasourceMap = mockDatasourceMap(); + let datasourceStates = mockDatasourceStates(); + let frame = mockFrame(['a']); + + beforeEach(() => { + visualizationMap = mockVisualizationMap(); + datasourceMap = mockDatasourceMap(); + datasourceStates = mockDatasourceStates(); + frame = mockFrame(['a']); + }); + afterEach(() => { + jest.clearAllMocks(); + }); /** * There are three visualizations. Each one has the same suggestion behavior: @@ -145,44 +137,66 @@ describe('chart_switch', () => { } as FramePublicAPI; } - function showFlyout(instance: ReactWrapper) { - instance.find('button[data-test-subj="lnsChartSwitchPopover"]').first().simulate('click'); - } - - function switchTo(subType: string, instance: ReactWrapper) { - showFlyout(instance); - instance.find(`[data-test-subj="lnsChartSwitchPopover_${subType}"]`).first().simulate('click'); - } - - function getMenuItem(subType: string, instance: ReactWrapper) { - showFlyout(instance); - return instance.find(`[data-test-subj="lnsChartSwitchPopover_${subType}"]`).first(); - } - it('should use suggested state if there is a suggestion from the target visualization', async () => { - const visualizationMap = mockVisualizationMap(); - const { instance, lensStore } = await mountWithProvider( + const renderChartSwitch = ( + propsOverrides: Partial = {}, + { preloadedStateOverrides }: { preloadedStateOverrides: Partial } = { + preloadedStateOverrides: {}, + } + ) => { + const { store, ...rtlRender } = renderWithReduxStore( , + {}, { + storeDeps: mockStoreDeps({ datasourceMap, visualizationMap }), preloadedState: { visualization: { activeId: 'visA', state: 'state from a', }, + datasourceStates, + activeDatasourceId: 'testDatasource', + ...preloadedStateOverrides, }, } ); - switchTo('visB', instance); + const openChartSwitch = () => { + userEvent.click(screen.getByTestId('lnsChartSwitchPopover')); + }; + + const getMenuItem = (subType: string) => { + const list = screen.getByTestId('lnsChartSwitchList'); + return within(list).getByTestId(`lnsChartSwitchPopover_${subType}`); + }; + + const switchToVis = (subType: string) => { + fireEvent.click(getMenuItem(subType)); + }; + + return { + ...rtlRender, + store, + switchToVis, + getMenuItem, + openChartSwitch, + }; + }; + + it('should use suggested state if there is a suggestion from the target visualization', async () => { + const { store, openChartSwitch, switchToVis } = renderChartSwitch(); + openChartSwitch(); + switchToVis('visB'); - expect(lensStore.dispatch).toHaveBeenCalledWith({ + expect(store.dispatch).toHaveBeenCalledWith({ type: 'lens/switchVisualization', payload: { suggestion: { - visualizationState: 'suggestion visB', + visualizationState: 'visB initial state', newVisualizationId: 'visB', datasourceId: 'testDatasource', datasourceState: {}, @@ -190,38 +204,18 @@ describe('chart_switch', () => { clearStagedPreview: true, }, }); - expect(lensStore.dispatch).not.toHaveBeenCalledWith({ type: applyChanges.type }); // should not apply changes automatically + expect(store.dispatch).not.toHaveBeenCalledWith({ type: applyChanges.type }); // should not apply changes automatically }); it('should use initial state if there is no suggestion from the target visualization', async () => { - const visualizationMap = mockVisualizationMap(); visualizationMap.visB.getSuggestions.mockReturnValueOnce([]); - const frame = mockFrame(['a']); (frame.datasourceLayers.a?.getTableSpec as jest.Mock).mockReturnValue([]); - const datasourceMap = mockDatasourceMap(); - const datasourceStates = mockDatasourceStates(); - const { instance, lensStore } = await mountWithProvider( - , - { - storeDeps: mockStoreDeps({ datasourceMap, visualizationMap }), - preloadedState: { - datasourceStates, - activeDatasourceId: 'testDatasource', - visualization: { - activeId: 'visA', - state: {}, - }, - }, - } - ); + const { store, switchToVis, openChartSwitch } = renderChartSwitch(); + openChartSwitch(); + switchToVis('visB'); - switchTo('visB', instance); expect(datasourceMap.testDatasource.removeLayer).toHaveBeenCalledWith({}, 'a'); // from preloaded state - expect(lensStore.dispatch).toHaveBeenCalledWith({ + expect(store.dispatch).toHaveBeenCalledWith({ type: 'lens/switchVisualization', payload: { suggestion: { @@ -231,16 +225,13 @@ describe('chart_switch', () => { clearStagedPreview: true, }, }); - expect(lensStore.dispatch).toHaveBeenCalledWith({ + expect(store.dispatch).toHaveBeenCalledWith({ type: 'lens/removeLayers', payload: { layerIds: ['a'], visualizationId: 'visA' }, }); }); it('should indicate data loss if not all columns will be used', async () => { - const visualizationMap = mockVisualizationMap(); - const frame = mockFrame(['a']); - const datasourceMap = mockDatasourceMap(); datasourceMap.testDatasource.getDatasourceSuggestionsFromCurrentState.mockReturnValue([ { state: {}, @@ -276,61 +267,21 @@ describe('chart_switch', () => { { columnId: 'col3', fields: [] }, ]); - const { instance } = await mountWithProvider( - , - { - preloadedState: { - visualization: { - activeId: 'visA', - state: {}, - }, - }, - } - ); + const { openChartSwitch, getMenuItem } = renderChartSwitch(); + openChartSwitch(); - expect( - getMenuItem('visB', instance) - .find('[data-test-subj="lnsChartSwitchPopoverAlert_visB"]') - .first() - .props().type - ).toEqual('warning'); + expect(within(getMenuItem('visB')).getByText(/warning/i)).toBeInTheDocument(); }); it('should indicate data loss if not all layers will be used', async () => { - const visualizationMap = mockVisualizationMap(); - const frame = mockFrame(['a', 'b']); - const { instance } = await mountWithProvider( - , - { - preloadedState: { - visualization: { - activeId: 'visA', - state: {}, - }, - }, - } - ); - - expect( - getMenuItem('visB', instance) - .find('[data-test-subj="lnsChartSwitchPopoverAlert_visB"]') - .first() - .props().type - ).toEqual('warning'); + frame = mockFrame(['a', 'b']); + const { openChartSwitch, getMenuItem } = renderChartSwitch(); + openChartSwitch(); + expect(within(getMenuItem('visB')).getByText(/warning/i)).toBeInTheDocument(); }); it('should support multi-layer suggestions without data loss', async () => { - const visualizationMap = mockVisualizationMap(); - const frame = mockFrame(['a', 'b']); - const datasourceMap = mockDatasourceMap(); + frame = mockFrame(['a', 'b']); datasourceMap.testDatasource.getDatasourceSuggestionsFromCurrentState.mockReturnValue([ { state: {}, @@ -352,147 +303,53 @@ describe('chart_switch', () => { keptLayerIds: ['a', 'b'], }, ]); - - const { instance } = await mountWithProvider( - , - { - preloadedState: { - visualization: { - activeId: 'visA', - state: {}, - }, - }, - } - ); - - expect( - getMenuItem('visB', instance).find('[data-test-subj="lnsChartSwitchPopoverAlert_visB"]') - ).toHaveLength(0); + const { openChartSwitch, getMenuItem } = renderChartSwitch(); + openChartSwitch(); + expect(within(getMenuItem('visB')).queryByText(/warning/i)).not.toBeInTheDocument(); }); it('should indicate data loss if no data will be used', async () => { - const visualizationMap = mockVisualizationMap(); visualizationMap.visB.getSuggestions.mockReturnValueOnce([]); - const frame = mockFrame(['a']); - - const { instance } = await mountWithProvider( - , - { - preloadedState: { - visualization: { - activeId: 'visA', - state: {}, - }, - }, - } - ); - - expect( - getMenuItem('visB', instance) - .find('[data-test-subj="lnsChartSwitchPopoverAlert_visB"]') - .first() - .props().type - ).toEqual('warning'); + const { openChartSwitch, getMenuItem } = renderChartSwitch(); + openChartSwitch(); + expect(within(getMenuItem('visB')).queryByText(/warning/i)).toBeInTheDocument(); }); it('should not indicate data loss if there is no data', async () => { - const visualizationMap = mockVisualizationMap(); visualizationMap.visB.getSuggestions.mockReturnValueOnce([]); - const frame = mockFrame(['a']); + frame = mockFrame(['a']); (frame.datasourceLayers.a?.getTableSpec as jest.Mock).mockReturnValue([]); - - const { instance } = await mountWithProvider( - , - - { - preloadedState: { - visualization: { - activeId: 'visA', - state: {}, - }, - }, - } - ); - - expect( - getMenuItem('visB', instance).find('[data-test-subj="lnsChartSwitchPopoverAlert_visB"]') - ).toHaveLength(0); + const { openChartSwitch, getMenuItem } = renderChartSwitch(); + openChartSwitch(); + expect(within(getMenuItem('visB')).queryByText(/warning/i)).not.toBeInTheDocument(); }); it('should not show a warning when the subvisualization is the same', async () => { - const frame = mockFrame(['a', 'b', 'c']); - const visualizationMap = mockVisualizationMap(); - visualizationMap.visC.getVisualizationTypeId.mockReturnValue('subvisC2'); - const switchVisualizationType = jest.fn(() => ({ type: 'subvisC1' })); + frame = mockFrame(['a', 'b', 'c']); - visualizationMap.visC.switchVisualizationType = switchVisualizationType; - - const datasourceStates = mockDatasourceStates(); - - const { instance } = await mountWithProvider( - , - { - preloadedState: { - datasourceStates, - activeDatasourceId: 'testDatasource', - visualization: { - activeId: 'visC', - state: { type: 'subvisC2' }, - }, + visualizationMap.visC.getVisualizationTypeId.mockReturnValue('subvisC2'); + visualizationMap.visC.switchVisualizationType = jest.fn(() => ({ type: 'subvisC1' })); + const { openChartSwitch, getMenuItem } = renderChartSwitch(undefined, { + preloadedStateOverrides: { + visualization: { + activeId: 'visC', + state: { type: 'subvisC2' }, }, - } - ); - - expect( - getMenuItem('subvisC2', instance).find( - '[data-test-subj="lnsChartSwitchPopoverAlert_subvisC2"]' - ) - ).toHaveLength(0); + }, + }); + openChartSwitch(); + expect(within(getMenuItem('subvisC2')).queryByText(/warning/i)).not.toBeInTheDocument(); }); it('should get suggestions when switching subvisualization', async () => { - const visualizationMap = mockVisualizationMap(); visualizationMap.visB.getSuggestions.mockReturnValueOnce([]); - const frame = mockFrame(['a', 'b', 'c']); - const datasourceMap = mockDatasourceMap(); + frame = mockFrame(['a', 'b', 'c']); datasourceMap.testDatasource.getLayers.mockReturnValue(['a', 'b', 'c']); - const datasourceStates = mockDatasourceStates(); - const { instance, lensStore } = await mountWithProvider( - , - { - storeDeps: mockStoreDeps({ datasourceMap, visualizationMap }), - preloadedState: { - datasourceStates, - visualization: { - activeId: 'visA', - state: {}, - }, - }, - } - ); + const { openChartSwitch, switchToVis, store } = renderChartSwitch(); + openChartSwitch(); + switchToVis('visB'); - switchTo('visB', instance); expect(datasourceMap.testDatasource.removeLayer).toHaveBeenCalledWith({}, 'a'); expect(datasourceMap.testDatasource.removeLayer).toHaveBeenCalledWith({}, 'b'); expect(datasourceMap.testDatasource.removeLayer).toHaveBeenCalledWith({}, 'c'); @@ -502,7 +359,7 @@ describe('chart_switch', () => { }) ); - expect(lensStore.dispatch).toHaveBeenCalledWith({ + expect(store.dispatch).toHaveBeenCalledWith({ type: 'lens/switchVisualization', payload: { suggestion: { @@ -517,75 +374,49 @@ describe('chart_switch', () => { }); it('should query main palette from active chart and pass into suggestions', async () => { - const visualizationMap = mockVisualizationMap(); - const mockPalette: PaletteOutput = { type: 'palette', name: 'mock' }; - visualizationMap.visA.getMainPalette = jest.fn(() => ({ + const legacyPalette: SuggestionRequest['mainPalette'] = { type: 'legacyPalette', - value: mockPalette, - })); + value: { type: 'palette', name: 'mock' }, + }; + visualizationMap.visA.getMainPalette = jest.fn(() => legacyPalette); visualizationMap.visB.getSuggestions.mockReturnValueOnce([]); - const frame = mockFrame(['a', 'b', 'c']); - const currentVisState = {}; - const datasourceMap = mockDatasourceMap(); + frame = mockFrame(['a', 'b', 'c']); datasourceMap.testDatasource.getLayers.mockReturnValue(['a', 'b', 'c']); - const { instance } = await mountWithProvider( - , - { - preloadedState: { - visualization: { - activeId: 'visA', - state: currentVisState, - }, - }, - storeDeps: mockStoreDeps({ datasourceMap, visualizationMap }), - } - ); - - switchTo('visB', instance); + const { openChartSwitch, switchToVis } = renderChartSwitch(); + openChartSwitch(); + switchToVis('visB'); - expect(visualizationMap.visA.getMainPalette).toHaveBeenCalledWith(currentVisState); + expect(visualizationMap.visA.getMainPalette).toHaveBeenCalledWith('state from a'); expect(visualizationMap.visB.getSuggestions).toHaveBeenCalledWith( expect.objectContaining({ keptLayerIds: ['a'], - mainPalette: { type: 'legacyPalette', value: mockPalette }, + mainPalette: legacyPalette, }) ); }); it('should not remove layers when switching between subtypes', async () => { - const frame = mockFrame(['a', 'b', 'c']); - const visualizationMap = mockVisualizationMap(); - const switchVisualizationType = jest.fn(() => 'switched'); + frame = mockFrame(['a', 'b', 'c']); + visualizationMap.visC.switchVisualizationType = jest.fn(() => 'switched'); - visualizationMap.visC.switchVisualizationType = switchVisualizationType; - const datasourceMap = mockDatasourceMap(); - const { instance, lensStore } = await mountWithProvider( - , - { - preloadedState: { - visualization: { - activeId: 'visC', - state: { type: 'subvisC1' }, - }, + const { openChartSwitch, switchToVis, store } = renderChartSwitch(undefined, { + preloadedStateOverrides: { + visualization: { + activeId: 'visC', + state: { type: 'subvisC1' }, }, - storeDeps: mockStoreDeps({ datasourceMap, visualizationMap }), - } - ); + }, + }); - switchTo('subvisC3', instance); - expect(switchVisualizationType).toHaveBeenCalledWith('subvisC3', { type: 'subvisC3' }); + openChartSwitch(); + switchToVis('subvisC3'); + expect(visualizationMap.visC.switchVisualizationType).toHaveBeenCalledWith('subvisC3', { + type: 'subvisC3', + }); - expect(lensStore.dispatch).toHaveBeenCalledWith({ + expect(store.dispatch).toHaveBeenCalledWith({ type: 'lens/switchVisualization', payload: { suggestion: { @@ -601,31 +432,22 @@ describe('chart_switch', () => { }); it('should not remove layers and initialize with existing state when switching between subtypes without data', async () => { - const frame = mockFrame(['a']); const datasourceLayers = frame.datasourceLayers as Record; datasourceLayers.a.getTableSpec = jest.fn().mockReturnValue([]); - const visualizationMap = mockVisualizationMap(); + visualizationMap.visC.getSuggestions = jest.fn().mockReturnValue([]); visualizationMap.visC.switchVisualizationType = jest.fn(() => 'switched'); - const datasourceMap = mockDatasourceMap(); - const { instance } = await mountWithProvider( - , - { - preloadedState: { - visualization: { - activeId: 'visC', - state: { type: 'subvisC1' }, - }, - }, - storeDeps: mockStoreDeps({ datasourceMap, visualizationMap }), - } - ); - switchTo('subvisC3', instance); + const { openChartSwitch, switchToVis } = renderChartSwitch(undefined, { + preloadedStateOverrides: { + visualization: { + activeId: 'visC', + state: { type: 'subvisC1' }, + }, + }, + }); + openChartSwitch(); + switchToVis('subvisC3'); expect(visualizationMap.visC.switchVisualizationType).toHaveBeenCalledWith('subvisC3', { type: 'subvisC1', @@ -634,9 +456,8 @@ describe('chart_switch', () => { }); it('should switch to the updated datasource state', async () => { - const visualizationMap = mockVisualizationMap(); - const frame = mockFrame(['a', 'b']); - const datasourceMap = mockDatasourceMap(); + frame = mockFrame(['a', 'b']); + datasourceMap.testDatasource.getDatasourceSuggestionsFromCurrentState.mockReturnValue([ { state: 'testDatasource suggestion', @@ -666,33 +487,19 @@ describe('chart_switch', () => { keptLayerIds: [], }, ]); - const { instance, lensStore } = await mountWithProvider( - , - { - storeDeps: mockStoreDeps({ datasourceMap, visualizationMap }), - preloadedState: { - visualization: { - activeId: 'visA', - state: {}, - }, - }, - } - ); - switchTo('visB', instance); + const { openChartSwitch, switchToVis, store } = renderChartSwitch(); + openChartSwitch(); + switchToVis('visB'); - expect(lensStore.dispatch).toHaveBeenCalledWith({ + expect(store.dispatch).toHaveBeenCalledWith({ type: 'lens/switchVisualization', payload: { suggestion: { newVisualizationId: 'visB', datasourceId: 'testDatasource', datasourceState: 'testDatasource suggestion', - visualizationState: 'suggestion visB', + visualizationState: 'visB initial state', }, clearStagedPreview: true, }, @@ -700,37 +507,18 @@ describe('chart_switch', () => { }); it('should ensure the new visualization has the proper subtype', async () => { - const visualizationMap = mockVisualizationMap(); - const switchVisualizationType = jest.fn( + visualizationMap.visB.switchVisualizationType = jest.fn( (visualizationType, state) => `${state} ${visualizationType}` ); + const { openChartSwitch, switchToVis, store } = renderChartSwitch(); + openChartSwitch(); + switchToVis('visB'); - visualizationMap.visB.switchVisualizationType = switchVisualizationType; - const datasourceMap = mockDatasourceMap(); - const { instance, lensStore } = await mountWithProvider( - , - { - storeDeps: mockStoreDeps({ datasourceMap, visualizationMap }), - preloadedState: { - visualization: { - activeId: 'visA', - state: {}, - }, - }, - } - ); - - switchTo('visB', instance); - - expect(lensStore.dispatch).toHaveBeenCalledWith({ + expect(store.dispatch).toHaveBeenCalledWith({ type: 'lens/switchVisualization', payload: { suggestion: { - visualizationState: 'suggestion visB visB', + visualizationState: 'visB initial state visB', newVisualizationId: 'visB', datasourceId: 'testDatasource', datasourceState: {}, @@ -741,56 +529,27 @@ describe('chart_switch', () => { }); it('should use the suggestion that matches the subtype', async () => { - const visualizationMap = mockVisualizationMap(); - const switchVisualizationType = jest.fn(); - - visualizationMap.visC.switchVisualizationType = switchVisualizationType; - const datasourceMap = mockDatasourceMap(); - const { instance } = await mountWithProvider( - , - { - preloadedState: { - visualization: { - activeId: 'visC', - state: { type: 'subvisC3' }, - }, + const { openChartSwitch, switchToVis } = renderChartSwitch(undefined, { + preloadedStateOverrides: { + visualization: { + activeId: 'visC', + state: { type: 'subvisC3' }, }, - } - ); - - switchTo('subvisC1', instance); - expect(switchVisualizationType).toHaveBeenCalledWith('subvisC1', { + }, + }); + openChartSwitch(); + switchToVis('subvisC1'); + expect(visualizationMap.visC.switchVisualizationType).toHaveBeenCalledWith('subvisC1', { type: 'subvisC1', notPrimary: true, }); }); it('should show all visualization types', async () => { - const datasourceMap = mockDatasourceMap(); - const { instance } = await mountWithProvider( - , - { - preloadedState: { - visualization: { - activeId: 'visA', - state: {}, - }, - }, - } - ); - - showFlyout(instance); - - const allDisplayed = ['visA', 'visB', 'subvisC1', 'subvisC2', 'subvisC3'].every( - (subType) => instance.find(`[data-test-subj="lnsChartSwitchPopover_${subType}"]`).length > 0 + const { openChartSwitch, getMenuItem } = renderChartSwitch(); + openChartSwitch(); + const allDisplayed = ['visA', 'visB', 'subvisC1', 'subvisC2', 'subvisC3'].every((subType) => + getMenuItem(subType) ); expect(allDisplayed).toBeTruthy(); diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/chart_switch.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/chart_switch.tsx index c40c81285dc15b..2cb8fc75a67586 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/chart_switch.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/chart_switch.tsx @@ -55,7 +55,7 @@ interface VisualizationSelection { sameDatasources?: boolean; } -interface Props { +export interface ChartSwitchProps { framePublicAPI: FramePublicAPI; visualizationMap: VisualizationMap; datasourceMap: DatasourceMap; @@ -126,7 +126,7 @@ function getCurrentVisualizationId( ); } -export const ChartSwitch = memo(function ChartSwitch(props: Props) { +export const ChartSwitch = memo(function ChartSwitch(props: ChartSwitchProps) { const [flyoutOpen, setFlyoutOpen] = useState(false); const dispatchLens = useLensDispatch(); const activeDatasourceId = useLensSelector(selectActiveDatasourceId); @@ -494,7 +494,7 @@ export const ChartSwitch = memo(function ChartSwitch(props: Props) { }); function getTopSuggestion( - props: Props, + props: ChartSwitchProps, visualizationId: string, datasourceStates: DatasourceStates, visualization: VisualizationState, diff --git a/x-pack/plugins/lens/public/mocks/datasource_mock.tsx b/x-pack/plugins/lens/public/mocks/datasource_mock.tsx index 207c6562be5574..daf56218bcd073 100644 --- a/x-pack/plugins/lens/public/mocks/datasource_mock.tsx +++ b/x-pack/plugins/lens/public/mocks/datasource_mock.tsx @@ -51,7 +51,7 @@ export function createMockDatasource( removeLayer: jest.fn((state, layerId) => ({ newState: state, removedLayerIds: [layerId] })), cloneLayer: jest.fn((_state, _layerId, _newLayerId, getNewId) => {}), removeColumn: jest.fn((props) => {}), - getLayers: jest.fn((_state) => []), + getLayers: jest.fn((_state) => ['a']), uniqueLabels: jest.fn((_state, dataViews) => ({})), getDropProps: jest.fn(), onDrop: jest.fn(), diff --git a/x-pack/plugins/lens/public/mocks/expression_renderer_mock.tsx b/x-pack/plugins/lens/public/mocks/expression_renderer_mock.tsx index 42187662e0213b..842d6ccbb713f6 100644 --- a/x-pack/plugins/lens/public/mocks/expression_renderer_mock.tsx +++ b/x-pack/plugins/lens/public/mocks/expression_renderer_mock.tsx @@ -12,5 +12,7 @@ export function createExpressionRendererMock(): jest.Mock< React.ReactElement, [ReactExpressionRendererProps] > { - return jest.fn(({ expression }) => {expression || 'Expression renderer mock'}); + return jest.fn(({ expression }) => ( + {expression || 'Expression renderer mock'} + )); } diff --git a/x-pack/plugins/lens/public/mocks/store_mocks.tsx b/x-pack/plugins/lens/public/mocks/store_mocks.tsx index 0d78a07d3dfce3..ad028bfe107f0d 100644 --- a/x-pack/plugins/lens/public/mocks/store_mocks.tsx +++ b/x-pack/plugins/lens/public/mocks/store_mocks.tsx @@ -69,7 +69,7 @@ export const renderWithReduxStore = ( { preloadedState, storeDeps, - }: { preloadedState: Partial; storeDeps?: LensStoreDeps } = { + }: { preloadedState?: Partial; storeDeps?: LensStoreDeps } = { preloadedState: {}, storeDeps: mockStoreDeps(), } diff --git a/x-pack/plugins/lens/public/mocks/visualization_mock.tsx b/x-pack/plugins/lens/public/mocks/visualization_mock.tsx index b368f994756eb0..663345c8240959 100644 --- a/x-pack/plugins/lens/public/mocks/visualization_mock.tsx +++ b/x-pack/plugins/lens/public/mocks/visualization_mock.tsx @@ -6,39 +6,42 @@ */ import React from 'react'; import { LayerTypes } from '@kbn/expression-xy-plugin/public'; +import { toExpression } from '@kbn/interpreter'; +import faker from 'faker'; import { Visualization, VisualizationMap } from '../types'; -export function createMockVisualization(id = 'testVis'): jest.Mocked { - const layerId = 'layer1'; - +export function createMockVisualization( + id = 'testVis', + layerIds = ['layer1'] +): jest.Mocked { return { id, clearLayer: jest.fn((state, _layerId, _indexPatternId) => state), removeLayer: jest.fn(), - getLayerIds: jest.fn((_state) => [layerId]), + getLayerIds: jest.fn((_state) => layerIds), getSupportedLayers: jest.fn(() => [{ type: LayerTypes.DATA, label: 'Data Layer' }]), getLayerType: jest.fn((_state, _layerId) => LayerTypes.DATA), visualizationTypes: [ { icon: 'empty', id, - label: 'TEST', + label: faker.lorem.word(), groupLabel: `${id}Group`, }, ], appendLayer: jest.fn(), - getVisualizationTypeId: jest.fn((_state) => 'empty'), + getVisualizationTypeId: jest.fn((_state) => id), getDescription: jest.fn((_state) => ({ label: '' })), switchVisualizationType: jest.fn((_, x) => x), getSuggestions: jest.fn((_options) => []), getRenderEventCounters: jest.fn((_state) => []), - initialize: jest.fn((_addNewLayer, _state) => ({ newState: 'newState' })), + initialize: jest.fn((_addNewLayer, _state) => `${id} initial state`), getConfiguration: jest.fn((props) => ({ groups: [ { groupId: 'a', groupLabel: 'a', - layerId, + layerId: layerIds[0], supportsMoreColumns: true, accessors: [], filterOperations: jest.fn(() => true), @@ -46,7 +49,15 @@ export function createMockVisualization(id = 'testVis'): jest.Mocked 'expression'), + toExpression: jest.fn((state, datasourceLayers, attrs, datasourceExpressionsByLayers = {}) => + toExpression({ + type: 'expression', + chain: [ + ...(datasourceExpressionsByLayers.first?.chain ?? []), + { type: 'function', function: 'testVis', arguments: {} }, + ], + }) + ), toPreviewExpression: jest.fn((_state, _frame) => 'expression'), getUserMessages: jest.fn((_state) => []), setDimension: jest.fn(), diff --git a/x-pack/plugins/lens/public/state_management/__snapshots__/load_initial.test.tsx.snap b/x-pack/plugins/lens/public/state_management/__snapshots__/load_initial.test.tsx.snap index 4c09cefdd6de92..68d4e7d57e983a 100644 --- a/x-pack/plugins/lens/public/state_management/__snapshots__/load_initial.test.tsx.snap +++ b/x-pack/plugins/lens/public/state_management/__snapshots__/load_initial.test.tsx.snap @@ -100,9 +100,7 @@ Object { }, "visualization": Object { "activeId": "testVis", - "state": Object { - "newState": "newState", - }, + "state": "testVis initial state", }, }, } diff --git a/x-pack/plugins/lens/public/state_management/load_initial.test.tsx b/x-pack/plugins/lens/public/state_management/load_initial.test.tsx index ef9d84062a720f..130e1294b9c956 100644 --- a/x-pack/plugins/lens/public/state_management/load_initial.test.tsx +++ b/x-pack/plugins/lens/public/state_management/load_initial.test.tsx @@ -199,7 +199,7 @@ describe('Initializing the store', () => { expect(store.getState()).toEqual({ lens: expect.objectContaining({ visualization: { - state: { newState: 'newState' }, // new vis gets initialized + state: 'testVis initial state', // new vis gets initialized activeId: 'testVis', }, activeDatasourceId: 'testDatasource2', // resets to first on the list From 7f5486e1e6f4841d146a624ced3d5f2466ca6237 Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Thu, 15 Feb 2024 13:21:37 -0500 Subject: [PATCH 17/40] [Response Ops][Task Manager ] Adding ability for ad-hoc task instance to specify timeout override (#175731) Resolves https://github.com/elastic/kibana/issues/174353 ## Summary Adds ability for task instance to specify a timeout override that will be used in place of the task type timeout when running an ad-hoc task. In the future we may consider allowing timeout overrides for recurring tasks but this PR limits usage to only ad-hoc task runs. This timeout override is planned for use by backfill rule execution tasks so the only usages in this PR are in the functional tests. --- x-pack/plugins/task_manager/server/task.ts | 5 + .../server/task_running/task_runner.test.ts | 85 ++++++++++++- .../server/task_running/task_runner.ts | 25 ++-- .../server/task_validator.test.ts | 113 ++++++++++++++++++ .../task_manager/server/task_validator.ts | 51 ++++++-- .../sample_task_plugin/server/init_routes.ts | 1 + .../sample_task_plugin/server/plugin.ts | 31 +++++ .../check_registered_task_types.ts | 1 + .../task_manager/task_management.ts | 37 ++++++ 9 files changed, 333 insertions(+), 16 deletions(-) diff --git a/x-pack/plugins/task_manager/server/task.ts b/x-pack/plugins/task_manager/server/task.ts index b7b86c50c8b084..728d175e8b98ff 100644 --- a/x-pack/plugins/task_manager/server/task.ts +++ b/x-pack/plugins/task_manager/server/task.ts @@ -345,6 +345,11 @@ export interface TaskInstance { * Indicates the number of skipped executions. */ numSkippedRuns?: number; + + /* + * Optionally override the timeout defined in the task type for this specific task instance + */ + timeoutOverride?: string; } /** diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts index 6735b3c0602b89..1e22e15a7f1e40 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts @@ -250,7 +250,7 @@ describe('TaskManagerRunner', () => { expect(instance.enabled).not.toBeDefined(); }); - test('calculates retryAt by timeout if it exceeds the schedule when running a recurring task', async () => { + test('calculates retryAt by task type timeout if it exceeds the schedule when running a recurring task', async () => { const timeoutMinutes = 1; const intervalSeconds = 20; const id = _.random(1, 20).toString(); @@ -286,6 +286,44 @@ describe('TaskManagerRunner', () => { expect(instance.enabled).not.toBeDefined(); }); + test('does not calculate retryAt by task instance timeout if defined for a recurring task', async () => { + const timeoutMinutes = 1; + const timeoutOverrideSeconds = 90; + const intervalSeconds = 20; + const id = _.random(1, 20).toString(); + const initialAttempts = _.random(0, 2); + const { runner, store } = await pendingStageSetup({ + instance: { + id, + attempts: initialAttempts, + schedule: { + interval: `${intervalSeconds}s`, + }, + timeoutOverride: `${timeoutOverrideSeconds}s`, + enabled: true, + }, + definitions: { + bar: { + title: 'Bar!', + timeout: `${timeoutMinutes}m`, + createTaskRunner: () => ({ + run: async () => undefined, + }), + }, + }, + }); + + await runner.markTaskAsRunning(); + + expect(store.update).toHaveBeenCalledTimes(1); + const instance = store.update.mock.calls[0][0]; + + expect(instance.retryAt!.getTime()).toEqual( + instance.startedAt!.getTime() + timeoutMinutes * 60 * 1000 + ); + expect(instance.enabled).not.toBeDefined(); + }); + test('sets startedAt, status, attempts and retryAt when claiming a task', async () => { const timeoutMinutes = 1; const id = _.random(1, 20).toString(); @@ -329,6 +367,51 @@ describe('TaskManagerRunner', () => { expect(instance.enabled).not.toBeDefined(); }); + test('test sets retryAt to task instance timeout override when defined when claiming an ad hoc task', async () => { + const timeoutSeconds = 60; + const timeoutOverrideSeconds = 90; + const id = _.random(1, 20).toString(); + const initialAttempts = _.random(0, 2); + const { runner, store } = await pendingStageSetup({ + instance: { + id, + enabled: true, + attempts: initialAttempts, + timeoutOverride: `${timeoutOverrideSeconds}s`, + schedule: undefined, + }, + definitions: { + bar: { + title: 'Bar!', + timeout: `${timeoutSeconds}s`, + createTaskRunner: () => ({ + run: async () => undefined, + }), + }, + }, + }); + + await runner.markTaskAsRunning(); + + expect(store.update).toHaveBeenCalledTimes(1); + const instance = store.update.mock.calls[0][0]; + + expect(instance.attempts).toEqual(initialAttempts + 1); + expect(instance.status).toBe('running'); + expect(instance.startedAt!.getTime()).toEqual(Date.now()); + + const minRunAt = Date.now(); + const maxRunAt = minRunAt + baseDelay * Math.pow(2, initialAttempts - 1); + expect(instance.retryAt!.getTime()).toBeGreaterThanOrEqual( + minRunAt + timeoutOverrideSeconds * 1000 + ); + expect(instance.retryAt!.getTime()).toBeLessThanOrEqual( + maxRunAt + timeoutOverrideSeconds * 1000 + ); + + expect(instance.enabled).not.toBeDefined(); + }); + test('sets retryAt when there is an error', async () => { const id = _.random(1, 20).toString(); const initialAttempts = _.random(1, 3); diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.ts index faea2bfb7e4467..2c1242629952cc 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.ts @@ -260,10 +260,25 @@ export class TaskManagerRunner implements TaskRunner { // this allows us to catch tasks that remain in Pending/Finalizing without being // cleaned up isReadyToRun(this.instance) ? this.instance.task.startedAt : this.instance.timestamp, - this.definition.timeout + this.timeout )!; } + /* + * Gets the timeout of the current task. Uses the timeout + * defined by the task type unless this is an ad-hoc task that specifies an override + */ + public get timeout() { + if (this.instance.task.schedule) { + // recurring tasks should use timeout in task type + return this.definition.timeout; + } + + return this.instance.task.timeoutOverride + ? this.instance.task.timeoutOverride + : this.definition.timeout; + } + /** * Gets the duration of the current task run */ @@ -521,17 +536,13 @@ export class TaskManagerRunner implements TaskRunner { attempts, retryAt: (this.instance.task.schedule - ? maxIntervalFromDate( - now, - this.instance.task.schedule.interval, - this.definition.timeout - ) + ? maxIntervalFromDate(now, this.instance.task.schedule.interval, this.timeout) : this.getRetryDelay({ attempts, // Fake an error. This allows retry logic when tasks keep timing out // and lets us set a proper "retryAt" value each time. error: new Error('Task timeout'), - addDuration: this.definition.timeout, + addDuration: this.timeout, })) ?? null, // This is a safe conversion as we're setting the startAt above }, diff --git a/x-pack/plugins/task_manager/server/task_validator.test.ts b/x-pack/plugins/task_manager/server/task_validator.test.ts index 52822adf6f49fe..01eb7097d15c27 100644 --- a/x-pack/plugins/task_manager/server/task_validator.test.ts +++ b/x-pack/plugins/task_manager/server/task_validator.test.ts @@ -322,6 +322,49 @@ describe('TaskValidator', () => { expect(result).toEqual(task); }); + it(`should return the task with timeoutOverride as-is whenever schedule is not defined and override is valid`, () => { + const definitions = new TaskTypeDictionary(mockLogger()); + const taskValidator = new TaskValidator({ + logger: mockLogger(), + definitions, + allowReadingInvalidState: false, + }); + const task = taskManagerMock.createTask({ timeoutOverride: '1s' }); + const result = taskValidator.getValidatedTaskInstanceForUpdating(task); + expect(result).toEqual(task); + }); + + it(`should return the task with timeoutOverride stripped whenever schedule and override are defined`, () => { + const definitions = new TaskTypeDictionary(mockLogger()); + const taskValidator = new TaskValidator({ + logger: mockLogger(), + definitions, + allowReadingInvalidState: false, + }); + const task = taskManagerMock.createTask({ + schedule: { interval: '1d' }, + timeoutOverride: '1s', + }); + const { timeoutOverride, ...taskWithoutOverride } = task; + const result = taskValidator.getValidatedTaskInstanceForUpdating(task); + expect(result).toEqual(taskWithoutOverride); + }); + + it(`should return the task with timeoutOverride stripped whenever override is invalid`, () => { + const definitions = new TaskTypeDictionary(mockLogger()); + const taskValidator = new TaskValidator({ + logger: mockLogger(), + definitions, + allowReadingInvalidState: false, + }); + const task = taskManagerMock.createTask({ + timeoutOverride: 'foo', + }); + const { timeoutOverride, ...taskWithoutOverride } = task; + const result = taskValidator.getValidatedTaskInstanceForUpdating(task); + expect(result).toEqual(taskWithoutOverride); + }); + // TODO: Remove skip once all task types have defined their state schema. // https://github.com/elastic/kibana/issues/159347 it.skip(`should fail to validate the state schema when the task type doesn't have stateSchemaByVersion defined`, () => { @@ -394,4 +437,74 @@ describe('TaskValidator', () => { ).toThrowErrorMatchingInlineSnapshot(`"[bar]: definition for this key is missing"`); }); }); + + describe('validateTimeoutOverride()', () => { + it(`should validate when specifying a valid timeout override field with no schedule`, () => { + const definitions = new TaskTypeDictionary(mockLogger()); + const taskValidator = new TaskValidator({ + logger: mockLogger(), + definitions, + allowReadingInvalidState: false, + }); + const task = taskManagerMock.createTask({ + timeoutOverride: '1s', + state: { foo: 'foo' }, + }); + expect(taskValidator.validateTimeoutOverride(task)).toEqual(task); + }); + + it(`should validate when specifying a schedule and no timeout override`, () => { + const definitions = new TaskTypeDictionary(mockLogger()); + const taskValidator = new TaskValidator({ + logger: mockLogger(), + definitions, + allowReadingInvalidState: false, + }); + const task = taskManagerMock.createTask({ + schedule: { interval: '1d' }, + state: { foo: 'foo' }, + }); + expect(taskValidator.validateTimeoutOverride(task)).toEqual(task); + }); + + it(`should fail to validate when specifying a valid timeout override field and recurring schedule`, () => { + const definitions = new TaskTypeDictionary(mockLogger()); + const logger = mockLogger(); + const taskValidator = new TaskValidator({ + logger, + definitions, + allowReadingInvalidState: false, + }); + const task = taskManagerMock.createTask({ + timeoutOverride: '1s', + schedule: { interval: '1d' }, + state: { foo: 'foo' }, + }); + + const { timeoutOverride, ...taskWithoutOverride } = task; + expect(taskValidator.validateTimeoutOverride(task)).toEqual(taskWithoutOverride); + expect(logger.warn).toHaveBeenCalledWith( + `[TaskValidator] cannot specify timeout override 1s when scheduling a recurring task` + ); + }); + + it(`should fail to validate when specifying an invalid timeout override field`, () => { + const definitions = new TaskTypeDictionary(mockLogger()); + const logger = mockLogger(); + const taskValidator = new TaskValidator({ + logger, + definitions, + allowReadingInvalidState: false, + }); + const task = taskManagerMock.createTask({ + timeoutOverride: 'foo', + state: { foo: 'foo' }, + }); + const { timeoutOverride, ...taskWithoutOverride } = task; + expect(taskValidator.validateTimeoutOverride(task)).toEqual(taskWithoutOverride); + expect(logger.warn).toHaveBeenCalledWith( + `[TaskValidator] Invalid timeout override "foo". Timeout must be of the form "{number}{cadence}" where number is an integer. Example: 5m. This timeout override will be ignored.` + ); + }); + }); }); diff --git a/x-pack/plugins/task_manager/server/task_validator.ts b/x-pack/plugins/task_manager/server/task_validator.ts index 61d9a903dd5b4c..ddc7304e4e31ee 100644 --- a/x-pack/plugins/task_manager/server/task_validator.ts +++ b/x-pack/plugins/task_manager/server/task_validator.ts @@ -5,11 +5,13 @@ * 2.0. */ -import { max, memoize } from 'lodash'; +import { max, memoize, omit } from 'lodash'; import type { Logger } from '@kbn/core/server'; import type { ObjectType } from '@kbn/config-schema'; import { TaskTypeDictionary } from './task_type_dictionary'; import type { TaskInstance, ConcreteTaskInstance, TaskDefinition } from './task'; +import { isInterval, parseIntervalAsMillisecond } from './lib/intervals'; +import { isErr, tryAsResult } from './lib/result_type'; interface TaskValidatorOpts { allowReadingInvalidState: boolean; @@ -98,34 +100,67 @@ export class TaskValidator { task: T, options: { validate: boolean } = { validate: true } ): T { + const taskWithValidatedTimeout = this.validateTimeoutOverride(task); + if (!options.validate) { - return task; + return taskWithValidatedTimeout; } // In the scenario the task is unused / deprecated and Kibana needs to manipulate the task, // we'll do a pass-through for those - if (!this.definitions.has(task.taskType)) { - return task; + if (!this.definitions.has(taskWithValidatedTimeout.taskType)) { + return taskWithValidatedTimeout; } - const taskTypeDef = this.definitions.get(task.taskType); + const taskTypeDef = this.definitions.get(taskWithValidatedTimeout.taskType); const latestStateSchema = this.cachedGetLatestStateSchema(taskTypeDef); // TODO: Remove once all task types have defined their state schema. // https://github.com/elastic/kibana/issues/159347 // Otherwise, failures on read / write would occur. (don't forget to unskip test) if (!latestStateSchema) { - return task; + return taskWithValidatedTimeout; } // We are doing a write operation which must validate against the latest state schema return { - ...task, - state: this.getValidatedStateSchema(task.state, task.taskType, latestStateSchema, 'forbid'), + ...taskWithValidatedTimeout, + state: this.getValidatedStateSchema( + taskWithValidatedTimeout.state, + taskWithValidatedTimeout.taskType, + latestStateSchema, + 'forbid' + ), stateVersion: latestStateSchema?.version, }; } + public validateTimeoutOverride(task: T): T { + if (task.timeoutOverride) { + if ( + !isInterval(task.timeoutOverride) || + isErr(tryAsResult(() => parseIntervalAsMillisecond(task.timeoutOverride!))) + ) { + this.logger.warn( + `[TaskValidator] Invalid timeout override "${task.timeoutOverride}". Timeout must be of the form "{number}{cadence}" where number is an integer. Example: 5m. This timeout override will be ignored.` + ); + + return omit(task, 'timeoutOverride') as T; + } + } + + // Only allow timeoutOverride if schedule is not defined + if (!!task.timeoutOverride && !!task.schedule) { + this.logger.warn( + `[TaskValidator] cannot specify timeout override ${task.timeoutOverride} when scheduling a recurring task` + ); + + return omit(task, 'timeoutOverride') as T; + } + + return task; + } + private migrateTaskState( state: ConcreteTaskInstance['state'], currentVersion: number | undefined, diff --git a/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/init_routes.ts b/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/init_routes.ts index 01f8cd6ba4bc97..b1c8d6dd028b2a 100644 --- a/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/init_routes.ts +++ b/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/init_routes.ts @@ -62,6 +62,7 @@ export function initRoutes( params: schema.recordOf(schema.string(), schema.any(), { defaultValue: {} }), state: schema.recordOf(schema.string(), schema.any(), { defaultValue: {} }), id: schema.maybe(schema.string()), + timeoutOverride: schema.maybe(schema.string()), }), }), }, diff --git a/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/plugin.ts b/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/plugin.ts index 0e3a2bb993fe73..52c747d0ec7860 100644 --- a/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/plugin.ts +++ b/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/server/plugin.ts @@ -167,6 +167,37 @@ export class SampleTaskManagerFixturePlugin }, }), }, + sampleAdHocTaskTimingOut: { + title: 'Sample Ad-Hoc Task that Times Out', + description: 'A sample task that times out.', + maxAttempts: 3, + timeout: '1s', + createTaskRunner: ({ taskInstance }: { taskInstance: ConcreteTaskInstance }) => { + let isCancelled: boolean = false; + return { + async run() { + // wait for 15 seconds + await new Promise((r) => setTimeout(r, 15000)); + + if (!isCancelled) { + const [{ elasticsearch }] = await core.getStartServices(); + await elasticsearch.client.asInternalUser.index({ + index: '.kibana_task_manager_test_result', + body: { + type: 'task', + taskType: 'sampleAdHocTaskTimingOut', + taskId: taskInstance.id, + }, + refresh: true, + }); + } + }, + async cancel() { + isCancelled = true; + }, + }; + }, + }, sampleRecurringTaskWhichHangs: { title: 'Sample Recurring Task that Hangs for a minute', description: 'A sample task that Hangs for a minute on each run.', diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts index 3b71c99df2e5bf..e5d5e8fbd6fb72 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts @@ -20,6 +20,7 @@ export default function ({ getService }: FtrProviderContext) { } const TEST_TYPES = [ + 'sampleAdHocTaskTimingOut', 'lowPriorityTask', 'sampleOneTimeTaskThrowingError', 'sampleRecurringTaskTimingOut', diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts index f897e0fa05035e..a430993933c8bf 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts @@ -791,6 +791,43 @@ export default function ({ getService }: FtrProviderContext) { }); }); + it('should fail to schedule recurring task with timeout override', async () => { + const task = await scheduleTask({ + taskType: 'sampleRecurringTaskTimingOut', + schedule: { interval: '1s' }, + timeoutOverride: '30s', + params: {}, + }); + + expect(task.timeoutOverride).to.be(undefined); + }); + + it('should allow timeout override for ad hoc tasks', async () => { + const task = await scheduleTask({ + taskType: 'sampleAdHocTaskTimingOut', + timeoutOverride: '30s', + params: {}, + }); + + expect(task.timeoutOverride).to.be('30s'); + + // this task type is set to time out after 1s but the task runner + // will wait 15 seconds and then index a document if it hasn't timed out + // this test overrides the timeout to 30s and checks if the expected + // document was indexed. presence of indexed document means the task + // timeout override was respected + await retry.try(async () => { + const [scheduledTask] = (await currentTasks()).docs; + expect(scheduledTask?.id).to.eql(task.id); + }); + + await retry.try(async () => { + const docs: RawDoc[] = await historyDocs(task.id); + expect(docs.length).to.eql(1); + expect(docs[0]._source.taskType).to.eql('sampleAdHocTaskTimingOut'); + }); + }); + it('should bulk update schedules for multiple tasks', async () => { const initialTime = Date.now(); const tasks = await Promise.all([ From 19cc3797d36b08bc96fbaa21ece34f037add8559 Mon Sep 17 00:00:00 2001 From: Davis McPhee Date: Thu, 15 Feb 2024 14:28:55 -0400 Subject: [PATCH 18/40] Unskip flaky test from #167643 (#176942) ## Summary This PR unskips the tests skipped in #167643. Flaky test runner x50: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5186. Resolves #167643. ### Checklist - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] [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: Julia Rechkunova --- .../test_suites/common/examples/partial_results/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/test_serverless/functional/test_suites/common/examples/partial_results/index.ts b/x-pack/test_serverless/functional/test_suites/common/examples/partial_results/index.ts index c5a5bb2995217f..415174adf0d0ab 100644 --- a/x-pack/test_serverless/functional/test_suites/common/examples/partial_results/index.ts +++ b/x-pack/test_serverless/functional/test_suites/common/examples/partial_results/index.ts @@ -12,8 +12,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const PageObjects = getPageObjects(['common', 'svlCommonPage']); - // FLAKY: https://github.com/elastic/kibana/issues/167643 - describe.skip('Partial Results Example', function () { + describe('Partial Results Example', function () { before(async () => { await PageObjects.svlCommonPage.loginAsAdmin(); await PageObjects.common.navigateToApp('partialResultsExample'); From b4836ace2fb3d6c38df24294732b09be8f713d9f Mon Sep 17 00:00:00 2001 From: Davis McPhee Date: Thu, 15 Feb 2024 14:29:23 -0400 Subject: [PATCH 19/40] Unskip flaky test from #175579 (#176981) ## Summary This PR unskips the tests skipped in #175579. Flaky test runner x50: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5194. Resolves #175579. ### Checklist - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] [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: Julia Rechkunova --- .../test/examples/search_examples/partial_results_example.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/test/examples/search_examples/partial_results_example.ts b/x-pack/test/examples/search_examples/partial_results_example.ts index 83eb900ef0ff40..269b2e79ab38f7 100644 --- a/x-pack/test/examples/search_examples/partial_results_example.ts +++ b/x-pack/test/examples/search_examples/partial_results_example.ts @@ -14,8 +14,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const PageObjects = getPageObjects(['common']); const retry = getService('retry'); - // FLAKY: https://github.com/elastic/kibana/issues/175579 - describe.skip('Partial results example', () => { + describe('Partial results example', () => { before(async () => { await PageObjects.common.navigateToApp('searchExamples'); await testSubjects.click('/search'); From e136a9318215d5913a5e957aec5d9ad0b8132506 Mon Sep 17 00:00:00 2001 From: Zacqary Adam Xeper Date: Thu, 15 Feb 2024 12:30:08 -0600 Subject: [PATCH 20/40] [RAM] Fix bug where select all rules bypasses filters (#176962) ## Summary Fixes #176867 A bug introduced in https://github.com/elastic/kibana/pull/174954 bypassed most filters when using Select All on the Rules List. This was because the names of the filter properties changed, and no longer matched what the `useBulkEditSelect` hook was expecting. Because all of these types were optional, it didn't trigger any type errors. This syncs up the type definitions with the new filter store hook, and adds a functional test to make sure filters are working on bulk actions when clicking the select all button. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../hooks/use_bulk_edit_select.test.tsx | 15 ++-- .../hooks/use_bulk_edit_select.tsx | 55 ++++-------- .../rules_list/components/rules_list.tsx | 3 +- .../rules_list/bulk_actions.ts | 87 ++++++++++++++++++- 4 files changed, 111 insertions(+), 49 deletions(-) diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_select.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_select.test.tsx index 07bf3516fbdefe..1a5e3f278eb5e8 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_select.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_select.test.tsx @@ -45,8 +45,7 @@ describe('useBulkEditSelectTest', () => { useBulkEditSelect({ items, totalItemCount: 4, - tagsFilter: ['test: 123'], - searchText: 'rules*', + filters: { tags: ['test: 123'], searchText: 'rules*' }, }) ); @@ -58,8 +57,7 @@ describe('useBulkEditSelectTest', () => { useBulkEditSelect({ items, totalItemCount: 4, - tagsFilter: ['test: 123'], - searchText: 'rules*', + filters: { tags: ['test: 123'], searchText: 'rules*' }, }) ); @@ -107,8 +105,7 @@ describe('useBulkEditSelectTest', () => { useBulkEditSelect({ items, totalItemCount: 4, - tagsFilter: ['test: 123'], - searchText: 'rules*', + filters: { tags: ['test: 123'], searchText: 'rules*' }, }) ); @@ -124,8 +121,10 @@ describe('useBulkEditSelectTest', () => { useBulkEditSelect({ items, totalItemCount: 4, - tagsFilter: ['test: 123'], - searchText: 'rules*', + filters: { + tags: ['test: 123'], + searchText: 'rules*', + }, }) ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_select.tsx b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_select.tsx index 84e762cbe93f8b..fe70b4fa0e3bc7 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_select.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_select.tsx @@ -7,7 +7,7 @@ import { useReducer, useMemo, useCallback } from 'react'; import { fromKueryExpression, nodeBuilder } from '@kbn/es-query'; import { mapFiltersToKueryNode } from '../lib/rule_api/map_filters_to_kuery_node'; -import { RuleTableItem, RuleStatus } from '../../types'; +import { RuleTableItem, RulesListFilters } from '../../types'; interface BulkEditSelectionState { selectedIds: Set; @@ -73,27 +73,11 @@ const reducer = (state: BulkEditSelectionState, action: Action) => { interface UseBulkEditSelectProps { totalItemCount: number; items: RuleTableItem[]; - typesFilter?: string[]; - actionTypesFilter?: string[]; - tagsFilter?: string[]; - ruleExecutionStatusesFilter?: string[]; - ruleLastRunOutcomesFilter?: string[]; - ruleStatusesFilter?: RuleStatus[]; - searchText?: string; + filters?: RulesListFilters; } export function useBulkEditSelect(props: UseBulkEditSelectProps) { - const { - totalItemCount = 0, - items = [], - typesFilter, - actionTypesFilter, - tagsFilter, - ruleExecutionStatusesFilter, - ruleLastRunOutcomesFilter, - ruleStatusesFilter, - searchText, - } = props; + const { totalItemCount = 0, items = [], filters } = props; const [state, dispatch] = useReducer(reducer, { ...initialState, @@ -187,15 +171,20 @@ export function useBulkEditSelect(props: UseBulkEditSelectProps) { const getFilterKueryNode = useCallback( (idsToExclude?: string[]) => { - const ruleFilterKueryNode = mapFiltersToKueryNode({ - typesFilter, - actionTypesFilter, - tagsFilter, - ruleExecutionStatusesFilter, - ruleLastRunOutcomesFilter, - ruleStatusesFilter, - searchText, - }); + const ruleFilterKueryNode = mapFiltersToKueryNode( + filters + ? { + typesFilter: filters.types, + actionTypesFilter: filters.actionTypes, + tagsFilter: filters.tags, + ruleExecutionStatusesFilter: filters.ruleExecutionStatuses, + ruleLastRunOutcomesFilter: filters.ruleLastRunOutcomes, + ruleParamsFilter: filters.ruleParams, + ruleStatusesFilter: filters.ruleStatuses, + searchText: filters.searchText, + } + : {} + ); if (idsToExclude && idsToExclude.length) { const excludeFilter = fromKueryExpression( @@ -209,15 +198,7 @@ export function useBulkEditSelect(props: UseBulkEditSelectProps) { return ruleFilterKueryNode; }, - [ - typesFilter, - actionTypesFilter, - tagsFilter, - ruleExecutionStatusesFilter, - ruleLastRunOutcomesFilter, - ruleStatusesFilter, - searchText, - ] + [filters] ); const getFilter = useCallback(() => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx index 9b66a659496740..b381035fbfc61c 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx @@ -363,8 +363,7 @@ export const RulesList = ({ } = useBulkEditSelect({ totalItemCount: rulesState.totalItemCount, items: tableItems, - ...filters, - typesFilter: rulesTypesFilter, + filters: { ...filters, types: rulesTypesFilter }, }); const handleUpdateFiltersEffect = useCallback( diff --git a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/rules_list/bulk_actions.ts b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/rules_list/bulk_actions.ts index 4c545e20cb6871..c8cf8903a4275b 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/rules_list/bulk_actions.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/rules_list/bulk_actions.ts @@ -14,7 +14,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; -import { createAlert, scheduleRule, snoozeAlert } from '../../../lib/alert_api_actions'; +import { + createAlert, + createAlertManualCleanup, + scheduleRule, + snoozeAlert, +} from '../../../lib/alert_api_actions'; import { ObjectRemover } from '../../../lib/object_remover'; export default ({ getPageObjects, getService }: FtrProviderContext) => { @@ -30,7 +35,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await testSubjects.click('rulesTab'); } - describe('rules list', () => { + describe('rules list bulk actions', () => { before(async () => { await pageObjects.common.navigateToApp('triggersActions'); await testSubjects.click('rulesTab'); @@ -206,5 +211,83 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { expect(toastTitle).to.eql('Updated API key for 1 rule.'); }); }); + + it('should apply filters to bulk actions when using the select all button', async () => { + const rule1 = await createAlert({ + supertest, + objectRemover, + overwrites: { name: 'a' }, + }); + const rule2 = await createAlertManualCleanup({ + supertest, + overwrites: { name: 'b', rule_type_id: 'test.always-firing' }, + }); + const rule3 = await createAlert({ + supertest, + objectRemover, + overwrites: { name: 'c' }, + }); + + await refreshAlertsList(); + expect(await testSubjects.getVisibleText('totalRulesCount')).to.be('3 rules'); + + await testSubjects.click('ruleTypeFilterButton'); + await testSubjects.existOrFail('ruleTypetest.noopFilterOption'); + await testSubjects.click('ruleTypetest.noopFilterOption'); + await testSubjects.click(`checkboxSelectRow-${rule1.id}`); + await testSubjects.click('selectAllRulesButton'); + + await testSubjects.click('showBulkActionButton'); + await testSubjects.click('bulkDisable'); + await testSubjects.existOrFail('untrackAlertsModal'); + await testSubjects.click('confirmModalConfirmButton'); + + await retry.try(async () => { + const toastTitle = await toasts.getTitleAndDismiss(); + expect(toastTitle).to.eql('Disabled 2 rules'); + }); + + await testSubjects.click('rules-list-clear-filter'); + await refreshAlertsList(); + + await pageObjects.triggersActionsUI.searchAlerts(rule1.name); + expect(await testSubjects.getVisibleText('statusDropdown')).to.be('Disabled'); + await pageObjects.triggersActionsUI.searchAlerts(rule2.name); + expect(await testSubjects.getVisibleText('statusDropdown')).to.be('Enabled'); + await pageObjects.triggersActionsUI.searchAlerts(rule3.name); + expect(await testSubjects.getVisibleText('statusDropdown')).to.be('Disabled'); + + await testSubjects.click('rules-list-clear-filter'); + await refreshAlertsList(); + + await testSubjects.click('ruleStatusFilterButton'); + await testSubjects.existOrFail('ruleStatusFilterOption-enabled'); + await testSubjects.click('ruleStatusFilterOption-enabled'); + await testSubjects.click(`checkboxSelectRow-${rule2.id}`); + await testSubjects.click('selectAllRulesButton'); + + await testSubjects.click('showBulkActionButton'); + await testSubjects.click('bulkDelete'); + await testSubjects.existOrFail('rulesDeleteConfirmation'); + await testSubjects.click('confirmModalConfirmButton'); + + await retry.try(async () => { + const toastTitle = await toasts.getTitleAndDismiss(); + expect(toastTitle).to.eql('Deleted 1 rule'); + }); + + await testSubjects.click('rules-list-clear-filter'); + await refreshAlertsList(); + + await retry.try( + async () => { + expect(await testSubjects.getVisibleText('totalRulesCount')).to.be('2 rules'); + }, + async () => { + // If the delete fails, make sure rule2 gets cleaned up + objectRemover.add(rule2.id, 'alert', 'alerts'); + } + ); + }); }); }; From 8e7e5b23ec4f3b148c6a6e33f5b157d6266b710b Mon Sep 17 00:00:00 2001 From: Ersin Erdal <92688503+ersin-erdal@users.noreply.github.com> Date: Thu, 15 Feb 2024 20:54:05 +0100 Subject: [PATCH 21/40] Revert changes in PR#175981 (#177054) Reverts changes in https://github.com/elastic/kibana/pull/175981 --- .../rules_client/methods/get_alert_state.ts | 29 +++------ .../tests/get_alert_state.test.ts | 65 ------------------- 2 files changed, 9 insertions(+), 85 deletions(-) diff --git a/x-pack/plugins/alerting/server/rules_client/methods/get_alert_state.ts b/x-pack/plugins/alerting/server/rules_client/methods/get_alert_state.ts index 4da913a06fe799..6497428e1c2f25 100644 --- a/x-pack/plugins/alerting/server/rules_client/methods/get_alert_state.ts +++ b/x-pack/plugins/alerting/server/rules_client/methods/get_alert_state.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { RuleTaskState } from '../../types'; import { taskInstanceToAlertTaskInstance } from '../../task_runner/alert_task_instance'; import { ReadOperations, AlertingAuthorizationEntity } from '../../authorization'; @@ -19,28 +18,18 @@ export async function getAlertState( context: RulesClientContext, { id }: GetAlertStateParams ): Promise { - const rule = await get(context, { id }); + const alert = await get(context, { id }); await context.authorization.ensureAuthorized({ - ruleTypeId: rule.alertTypeId, - consumer: rule.consumer, + ruleTypeId: alert.alertTypeId, + consumer: alert.consumer, operation: ReadOperations.GetRuleState, entity: AlertingAuthorizationEntity.Rule, }); - if (rule.scheduledTaskId) { - try { - const { state } = taskInstanceToAlertTaskInstance( - await context.taskManager.get(rule.scheduledTaskId), - rule - ); - return state; - } catch (e) { - if (SavedObjectsErrorHelpers.isNotFoundError(e)) { - context.logger.warn(`Task (${rule.scheduledTaskId}) not found`); - } else { - context.logger.warn( - `An error occurred when getting the task state for (${rule.scheduledTaskId})` - ); - } - } + if (alert.scheduledTaskId) { + const { state } = taskInstanceToAlertTaskInstance( + await context.taskManager.get(alert.scheduledTaskId), + alert + ); + return state; } } diff --git a/x-pack/plugins/alerting/server/rules_client/tests/get_alert_state.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/get_alert_state.test.ts index 951e85c023523e..63d86843512c00 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/get_alert_state.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/get_alert_state.test.ts @@ -22,7 +22,6 @@ import { AlertingAuthorization } from '../../authorization/alerting_authorizatio import { ActionsAuthorization } from '@kbn/actions-plugin/server'; import { getBeforeSetup } from './lib'; import { RULE_SAVED_OBJECT_TYPE } from '../../saved_objects'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; const taskManager = taskManagerMock.createStart(); const ruleTypeRegistry = ruleTypeRegistryMock.create(); @@ -176,70 +175,6 @@ describe('getAlertState()', () => { expect(taskManager.get).toHaveBeenCalledWith(scheduledTaskId); }); - test('logs a warning if the task not found', async () => { - const rulesClient = new RulesClient(rulesClientParams); - - const scheduledTaskId = 'task-123'; - - unsecuredSavedObjectsClient.get.mockResolvedValueOnce({ - id: '1', - type: RULE_SAVED_OBJECT_TYPE, - attributes: { - alertTypeId: '123', - schedule: { interval: '10s' }, - params: { - bar: true, - }, - actions: [], - enabled: true, - scheduledTaskId, - mutedInstanceIds: [], - muteAll: true, - }, - references: [], - }); - - taskManager.get.mockRejectedValueOnce(SavedObjectsErrorHelpers.createGenericNotFoundError()); - - await rulesClient.getAlertState({ id: '1' }); - - expect(rulesClientParams.logger.warn).toHaveBeenCalledTimes(1); - expect(rulesClientParams.logger.warn).toHaveBeenCalledWith('Task (task-123) not found'); - }); - - test('logs a warning if the taskManager throws an error', async () => { - const rulesClient = new RulesClient(rulesClientParams); - - const scheduledTaskId = 'task-123'; - - unsecuredSavedObjectsClient.get.mockResolvedValueOnce({ - id: '1', - type: RULE_SAVED_OBJECT_TYPE, - attributes: { - alertTypeId: '123', - schedule: { interval: '10s' }, - params: { - bar: true, - }, - actions: [], - enabled: true, - scheduledTaskId, - mutedInstanceIds: [], - muteAll: true, - }, - references: [], - }); - - taskManager.get.mockRejectedValueOnce(SavedObjectsErrorHelpers.createBadRequestError()); - - await rulesClient.getAlertState({ id: '1' }); - - expect(rulesClientParams.logger.warn).toHaveBeenCalledTimes(1); - expect(rulesClientParams.logger.warn).toHaveBeenCalledWith( - 'An error occurred when getting the task state for (task-123)' - ); - }); - describe('authorization', () => { beforeEach(() => { unsecuredSavedObjectsClient.get.mockResolvedValueOnce({ From d2f566970c22220ba0130ae9446078d30ec8c995 Mon Sep 17 00:00:00 2001 From: Davis McPhee Date: Thu, 15 Feb 2024 16:08:13 -0400 Subject: [PATCH 22/40] Fix flaky test from #172781 (#176972) ## Summary This PR fixes the flaky test skipped in #172781. Flaky test runner x95: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5187. Resolves #172781. ### Checklist - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] [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) --- .../existing_fields.ts | 2 +- .../page_objects/unified_field_list.ts | 16 ++++++++++++++++ .../existing_fields.ts | 5 ++--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/test/examples/unified_field_list_examples/existing_fields.ts b/test/examples/unified_field_list_examples/existing_fields.ts index 341c440b3c8a81..2967e877383f1f 100644 --- a/test/examples/unified_field_list_examples/existing_fields.ts +++ b/test/examples/unified_field_list_examples/existing_fields.ts @@ -73,7 +73,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { await PageObjects.timePicker.setAbsoluteRange(TEST_START_TIME, TEST_END_TIME); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - await PageObjects.unifiedFieldList.toggleSidebarSection('meta'); + await PageObjects.unifiedFieldList.openSidebarSection('meta'); }); after(async () => { diff --git a/test/functional/page_objects/unified_field_list.ts b/test/functional/page_objects/unified_field_list.ts index 5e2d1039d76976..378b20cc02e247 100644 --- a/test/functional/page_objects/unified_field_list.ts +++ b/test/functional/page_objects/unified_field_list.ts @@ -88,6 +88,22 @@ export class UnifiedFieldListPageObject extends FtrService { ); } + public async openSidebarSection(sectionName: SidebarSectionName) { + const openedSectionSelector = `${this.getSidebarSectionSelector( + sectionName, + true + )}.euiAccordion-isOpen`; + + if (await this.find.existsByCssSelector(openedSectionSelector)) { + return; + } + + await this.retry.waitFor(`${sectionName} fields section to open`, async () => { + await this.toggleSidebarSection(sectionName); + return await this.find.existsByCssSelector(openedSectionSelector); + }); + } + public async waitUntilFieldPopoverIsOpen() { await this.retry.waitFor('popover is open', async () => { return Boolean(await this.find.byCssSelector('[data-popover-open="true"]')); diff --git a/x-pack/test_serverless/functional/test_suites/common/examples/unified_field_list_examples/existing_fields.ts b/x-pack/test_serverless/functional/test_suites/common/examples/unified_field_list_examples/existing_fields.ts index 4725b39bd9db19..05400dbac1b38f 100644 --- a/x-pack/test_serverless/functional/test_suites/common/examples/unified_field_list_examples/existing_fields.ts +++ b/x-pack/test_serverless/functional/test_suites/common/examples/unified_field_list_examples/existing_fields.ts @@ -78,7 +78,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { await PageObjects.timePicker.setAbsoluteRange(TEST_START_TIME, TEST_END_TIME); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - await PageObjects.unifiedFieldList.toggleSidebarSection('meta'); + await PageObjects.unifiedFieldList.openSidebarSection('meta'); }); after(async () => { @@ -92,8 +92,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { await kibanaServer.savedObjects.cleanStandardList(); }); - // FLAKY: https://github.com/elastic/kibana/issues/172781 - describe.skip('existence', () => { + describe('existence', () => { it('should find which fields exist in the sample documents', async () => { const sidebarFields = await PageObjects.unifiedFieldList.getAllFieldNames(); expect(sidebarFields.sort()).to.eql([...metaFields, ...fieldsWithData].sort()); From cec949ed0abfe4cd2a9f74d55c0d3212e96db328 Mon Sep 17 00:00:00 2001 From: "Christiane (Tina) Heiligers" Date: Thu, 15 Feb 2024 13:09:11 -0700 Subject: [PATCH 23/40] Deprecates SavedObjectType migrations and schemas in favor of modelVersions (#176970) fix https://github.com/elastic/kibana/issues/176776 Saved objects `modelVersions` support BWC and ZDT and replace `SavedObjectsType.schemas` and `SavedObjectsType.migrations` properties. This PR marks these two properties as deprecated. The public facing docs have also been updated to the "new" way of implementing saved object changes. ### 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 --- ...objects-service-use-case-examples.asciidoc | 761 ++++++++++++++++++ .../core/saved-objects-service.asciidoc | 513 +++++++----- .../src/saved_objects_type.ts | 4 +- 3 files changed, 1068 insertions(+), 210 deletions(-) create mode 100644 docs/developer/architecture/core/saved-objects-service-use-case-examples.asciidoc diff --git a/docs/developer/architecture/core/saved-objects-service-use-case-examples.asciidoc b/docs/developer/architecture/core/saved-objects-service-use-case-examples.asciidoc new file mode 100644 index 00000000000000..2b2cbde0b3f1ad --- /dev/null +++ b/docs/developer/architecture/core/saved-objects-service-use-case-examples.asciidoc @@ -0,0 +1,761 @@ +[[saved-objects-service-use-case-examples]] +=== Use-case examples + +These are example of the migration scenario currently supported (out of +the box) by the system. + +*note:* _more complex scenarios (e.g field mutation by copy/sync) could +already be implemented, but without the proper tooling exposed from +Core, most of the work related to sync and compatibility would have to +be implemented in the domain layer of the type owners, which is why +we’re not documenting them yet._ + +==== Adding a non-indexed field without default value + +We are currently in model version 1, and our type has 2 indexed fields +defined: `foo` and `bar`. + +The definition of the type at version 1 would look like: + +[source,ts] +---- +const myType: SavedObjectsType = { + name: 'test', + namespaceType: 'single', + switchToModelVersionAt: '8.10.0', + modelVersions: { + // initial (and current) model version + 1: { + changes: [], + schemas: { + // FC schema defining the known fields (indexed or not) for this version + forwardCompatibility: schema.object( + { foo: schema.string(), bar: schema.string() }, + { unknowns: 'ignore' } // note the `unknown: ignore` which is how we're evicting the unknown fields + ), + // schema that will be used to validate input during `create` and `bulkCreate` + create: schema.object( + { foo: schema.string(), bar: schema.string() }, + ) + }, + }, + }, + mappings: { + properties: { + foo: { type: 'text' }, + bar: { type: 'text' }, + }, + }, +}; +---- + +From here, say we want to introduce a new `dolly` field that is not +indexed, and that we don’t need to populate with a default value. + +To achieve that, we need to introduce a new model version, with the only +thing to do will be to define the associated schemas to include this new +field. + +The added model version would look like: + +[source,ts] +---- +// the new model version adding the `dolly` field +let modelVersion2: SavedObjectsModelVersion = { + // not an indexed field, no data backfill, so changes are actually empty + changes: [], + schemas: { + // the only addition in this model version: taking the new field into account for the schemas + forwardCompatibility: schema.object( + { foo: schema.string(), bar: schema.string(), dolly: schema.string() }, + { unknowns: 'ignore' } // note the `unknown: ignore` which is how we're evicting the unknown fields + ), + create: schema.object( + { foo: schema.string(), bar: schema.string(), dolly: schema.string() }, + ) + }, +}; +---- + +The full type definition after the addition of the new model version: + +[source,ts] +---- +const myType: SavedObjectsType = { + name: 'test', + namespaceType: 'single', + switchToModelVersionAt: '8.10.0', + modelVersions: { + 1: { + changes: [], + schemas: { + forwardCompatibility: schema.object( + { foo: schema.string(), bar: schema.string() }, + { unknowns: 'ignore' } + ), + create: schema.object( + { foo: schema.string(), bar: schema.string() }, + ) + }, + }, + 2: { + changes: [], + schemas: { + forwardCompatibility: schema.object( + { foo: schema.string(), bar: schema.string(), dolly: schema.string() }, + { unknowns: 'ignore' } + ), + create: schema.object( + { foo: schema.string(), bar: schema.string(), dolly: schema.string() }, + ) + }, + }, + }, + mappings: { + properties: { + foo: { type: 'text' }, + bar: { type: 'text' }, + }, + }, +}; +---- + +==== Adding an indexed field without default value + +This scenario is fairly close to the previous one. The difference being +that working with an indexed field means adding a `mappings_addition` +change and to also update the root mappings accordingly. + +To reuse the previous example, let’s say the `dolly` field we want to +add would need to be indexed instead. + +In that case, the new version needs to do the following: - add a +`mappings_addition` type change to define the new mappings - update the +root `mappings` accordingly - add the updated schemas as we did for the +previous example + +The new version definition would look like: + +[source,ts] +---- +let modelVersion2: SavedObjectsModelVersion = { + // add a change defining the mapping for the new field + changes: [ + { + type: 'mappings_addition', + addedMappings: { + dolly: { type: 'text' }, + }, + }, + ], + schemas: { + // adding the new field to the forwardCompatibility schema + forwardCompatibility: schema.object( + { foo: schema.string(), bar: schema.string(), dolly: schema.string() }, + { unknowns: 'ignore' } + ), + create: schema.object( + { foo: schema.string(), bar: schema.string(), dolly: schema.string() }, + ) + }, +}; +---- + +As said, we will also need to update the root mappings definition: + +[source,ts] +---- +mappings: { + properties: { + foo: { type: 'text' }, + bar: { type: 'text' }, + dolly: { type: 'text' }, + }, +}, +---- + +the full type definition after the addition of the model version 2 would +be: + +[source,ts] +---- +const myType: SavedObjectsType = { + name: 'test', + namespaceType: 'single', + switchToModelVersionAt: '8.10.0', + modelVersions: { + 1: { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + foo: { type: 'text' }, + bar: { type: 'text' }, + }, + }, + ], + schemas: { + forwardCompatibility: schema.object( + { foo: schema.string(), bar: schema.string() }, + { unknowns: 'ignore' } + ), + create: schema.object( + { foo: schema.string(), bar: schema.string() }, + ) + }, + }, + 2: { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + dolly: { type: 'text' }, + }, + }, + ], + schemas: { + forwardCompatibility: schema.object( + { foo: schema.string(), bar: schema.string(), dolly: schema.string() }, + { unknowns: 'ignore' } + ), + create: schema.object( + { foo: schema.string(), bar: schema.string(), dolly: schema.string() }, + ) + }, + }, + }, + mappings: { + properties: { + foo: { type: 'text' }, + bar: { type: 'text' }, + dolly: { type: 'text' }, + }, + }, +}; +---- + +==== Adding an indexed field with a default value + +Now a slightly different scenario where we’d like to populate the newly +introduced field with a default value. + +In that case, we’d need to add an additional `data_backfill` change to +populate the new field’s value (in addition to the `mappings_addition` +one): + +[source,ts] +---- +let modelVersion2: SavedObjectsModelVersion = { + changes: [ + // setting the `dolly` field's default value. + { + type: 'data_backfill', + transform: (document) => { + return { attributes: { dolly: 'default_value' } }; + }, + }, + // define the mappings for the new field + { + type: 'mappings_addition', + addedMappings: { + dolly: { type: 'text' }, + }, + }, + ], + schemas: { + // define `dolly` as an know field in the schema + forwardCompatibility: schema.object( + { foo: schema.string(), bar: schema.string(), dolly: schema.string() }, + { unknowns: 'ignore' } + ), + create: schema.object( + { foo: schema.string(), bar: schema.string(), dolly: schema.string() }, + ) + }, +}; +---- + +The full type definition would look like: + +[source,ts] +---- +const myType: SavedObjectsType = { + name: 'test', + namespaceType: 'single', + switchToModelVersionAt: '8.10.0', + modelVersions: { + 1: { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + foo: { type: 'text' }, + bar: { type: 'text' }, + }, + }, + ], + schemas: { + forwardCompatibility: schema.object( + { foo: schema.string(), bar: schema.string() }, + { unknowns: 'ignore' } + ), + create: schema.object( + { foo: schema.string(), bar: schema.string() }, + ) + }, + }, + 2: { + changes: [ + { + type: 'data_backfill', + transform: (document) => { + return { attributes: { dolly: 'default_value' } }; + }, + }, + { + type: 'mappings_addition', + addedMappings: { + dolly: { type: 'text' }, + }, + }, + ], + schemas: { + forwardCompatibility: schema.object( + { foo: schema.string(), bar: schema.string(), dolly: schema.string() }, + { unknowns: 'ignore' } + ), + create: schema.object( + { foo: schema.string(), bar: schema.string(), dolly: schema.string() }, + ) + }, + }, + }, + mappings: { + properties: { + foo: { type: 'text' }, + bar: { type: 'text' }, + dolly: { type: 'text' }, + }, + }, +}; +---- + +*Note:* _if the field was non-indexed, we would just not use the +`mappings_addition` change or update the mappings (as done in example +1)_ + +==== Removing an existing field + +We are currently in model version 1, and our type has 2 indexed fields +defined: `kept` and `removed`. + +The definition of the type at version 1 would look like: + +[source,ts] +---- +const myType: SavedObjectsType = { + name: 'test', + namespaceType: 'single', + switchToModelVersionAt: '8.10.0', + modelVersions: { + // initial (and current) model version + 1: { + changes: [], + schemas: { + // FC schema defining the known fields (indexed or not) for this version + forwardCompatibility: schema.object( + { kept: schema.string(), removed: schema.string() }, + { unknowns: 'ignore' } // note the `unknown: ignore` which is how we're evicting the unknown fields + ), + // schema that will be used to validate input during `create` and `bulkCreate` + create: schema.object( + { kept: schema.string(), removed: schema.string() }, + ) + }, + }, + }, + mappings: { + properties: { + kept: { type: 'text' }, + removed: { type: 'text' }, + }, + }, +}; +---- + +From here, say we want to remove the `removed` field, as our application +doesn’t need it anymore since a recent change. + +The first thing to understand here is the impact toward backward +compatibility: Say that Kibana version `X` was still using this field, +and that we stopped utilizing the field in version `X+1`. + +We can’t remove the data in version `X+1`, as we need to be able to +rollback to the prior version at *any time*. If we were to delete the +data of this `removed` field during the upgrade to version `X+1`, and if +then, for any reason, we’d need to rollback to version `X`, it would +cause a data loss, as version `X` was still using this field, but it +would no longer present in our document after the rollback. + +Which is why we need to perform any field removal as a 2-step operation: +- release `X`: Kibana still utilize the field - release `X+1`: Kibana no +longer utilize the field, but the data is still present in the documents +- release `X+2`: The data is effectively deleted from the documents. + +That way, any prior-version rollback (`X+2` to `X+1` *or* `X+1` to `X` +is safe in term of data integrity) + +The main question then, is what’s the best way of having our application +layer simply ignore this `removed` field during version `X+1`, as we +don’t want this field (now non-utilized) to be returned from the +persistence layer, as it could ``pollute'' the higher-layers where the +field is effectively no longer used or even known. + +This can easily be done by introducing a new version and using the +`forwardCompatibility` schema to ``shallow'' the field. + +The `X+1` model version would look like: + +[source,ts] +---- +// the new model version ignoring the `removed` field +let modelVersion2: SavedObjectsModelVersion = { + changes: [], + schemas: { + forwardCompatibility: schema.object( + { kept: schema.string() }, // `removed` is no longer defined here + { unknowns: 'ignore' } + ), + create: schema.object( + { kept: schema.string() }, // `removed` is no longer defined here + ) + }, +}; +---- + +The full type definition after the addition of the new model version: + +[source,ts] +---- +const myType: SavedObjectsType = { + name: 'test', + namespaceType: 'single', + switchToModelVersionAt: '8.10.0', + modelVersions: { + // initial (and current) model version + 1: { + changes: [], + schemas: { + // FC schema defining the known fields (indexed or not) for this version + forwardCompatibility: schema.object( + { kept: schema.string(), removed: schema.string() }, + { unknowns: 'ignore' } // note the `unknown: ignore` which is how we're evicting the unknown fields + ), + // schema that will be used to validate input during `create` and `bulkCreate` + create: schema.object( + { kept: schema.string(), removed: schema.string() }, + ) + }, + }, + 2: { + changes: [], + schemas: { + forwardCompatibility: schema.object( + { kept: schema.string() }, // `removed` is no longer defined here + { unknowns: 'ignore' } + ), + create: schema.object( + { kept: schema.string() }, // `removed` is no longer defined here + ) + }, + } + }, + mappings: { + properties: { + kept: { type: 'text' }, + removed: { type: 'text' }, + }, + }, +}; +---- + +then, in a *later* release, we can then deploy the change that will +effectively remove the data from the documents: + +[source,ts] +---- +// the new model version ignoring the `removed` field +let modelVersion3: SavedObjectsModelVersion = { + changes: [ // define a data_removal change to delete the field + { + type: 'data_removal', + removedAttributePaths: ['removed'] + } + ], + schemas: { + forwardCompatibility: schema.object( + { kept: schema.string() }, + { unknowns: 'ignore' } + ), + create: schema.object( + { kept: schema.string() }, + ) + }, +}; +---- + +The full type definition after the data removal would look like: + +[source,ts] +---- +const myType: SavedObjectsType = { + name: 'test', + namespaceType: 'single', + switchToModelVersionAt: '8.10.0', + modelVersions: { + // initial (and current) model version + 1: { + changes: [], + schemas: { + // FC schema defining the known fields (indexed or not) for this version + forwardCompatibility: schema.object( + { kept: schema.string(), removed: schema.string() }, + { unknowns: 'ignore' } // note the `unknown: ignore` which is how we're evicting the unknown fields + ), + // schema that will be used to validate input during `create` and `bulkCreate` + create: schema.object( + { kept: schema.string(), removed: schema.string() }, + ) + }, + }, + 2: { + changes: [], + schemas: { + forwardCompatibility: schema.object( + { kept: schema.string() }, // `removed` is no longer defined here + { unknowns: 'ignore' } + ), + create: schema.object( + { kept: schema.string() }, // `removed` is no longer defined here + ) + }, + }, + 3: { + changes: [ // define a data_removal change to delete the field + { + type: 'data_removal', + removedAttributePaths: ['removed'] + } + ], + schemas: { + forwardCompatibility: schema.object( + { kept: schema.string() }, + { unknowns: 'ignore' } + ), + create: schema.object( + { kept: schema.string() }, + ) + }, + } + }, + mappings: { + properties: { + kept: { type: 'text' }, + removed: { type: 'text' }, + }, + }, +}; +---- + +=== Testing model versions + +Model versions definitions are more structured than the legacy migration +functions, which makes them harder to test without the proper tooling. +This is why a set of testing tools and utilities are exposed from the +`@kbn/core-test-helpers-model-versions` package, to help properly test +the logic associated with model version and their associated +transformations. + +==== Tooling for unit tests + +For unit tests, the package exposes utilities to easily test the impact +of transforming documents from a model version to another one, either +upward or backward. + +===== Model version test migrator + +The `createModelVersionTestMigrator` helper allows to create a test +migrator that can be used to test model version changes between +versions, by transforming documents the same way the migration algorithm +would during an upgrade. + +*Example:* + +[source,ts] +---- +import { + createModelVersionTestMigrator, + type ModelVersionTestMigrator +} from '@kbn/core-test-helpers-model-versions'; + +const mySoTypeDefinition = someSoType(); + +describe('mySoTypeDefinition model version transformations', () => { + let migrator: ModelVersionTestMigrator; + + beforeEach(() => { + migrator = createModelVersionTestMigrator({ type: mySoTypeDefinition }); + }); + + describe('Model version 2', () => { + it('properly backfill the expected fields when converting from v1 to v2', () => { + const obj = createSomeSavedObject(); + + const migrated = migrator.migrate({ + document: obj, + fromVersion: 1, + toVersion: 2, + }); + + expect(migrated.properties).toEqual(expectedV2Properties); + }); + + it('properly removes the expected fields when converting from v2 to v1', () => { + const obj = createSomeSavedObject(); + + const migrated = migrator.migrate({ + document: obj, + fromVersion: 2, + toVersion: 1, + }); + + expect(migrated.properties).toEqual(expectedV1Properties); + }); + }); +}); +---- + +==== Tooling for integration tests + +During integration tests, we can boot a real Elasticsearch cluster, +allowing us to manipulate SO documents in a way almost similar to how it +would be done on production runtime. With integration tests, we can even +simulate the cohabitation of two Kibana instances with different model +versions to assert the behavior of their interactions. + +===== Model version test bed + +The package exposes a `createModelVersionTestBed` function that can be +used to fully setup a test bed for model version integration testing. It +can be used to start and stop the ES server, and to initiate the +migration between the two versions we’re testing. + +*Example:* + +[source,ts] +---- +import { + createModelVersionTestBed, + type ModelVersionTestKit +} from '@kbn/core-test-helpers-model-versions'; + +describe('myIntegrationTest', () => { + const testbed = createModelVersionTestBed(); + let testkit: ModelVersionTestKit; + + beforeAll(async () => { + await testbed.startES(); + }); + + afterAll(async () => { + await testbed.stopES(); + }); + + beforeEach(async () => { + // prepare the test, preparing the index and performing the SO migration + testkit = await testbed.prepareTestKit({ + savedObjectDefinitions: [{ + definition: mySoTypeDefinition, + // the model version that will be used for the "before" version + modelVersionBefore: 1, + // the model version that will be used for the "after" version + modelVersionAfter: 2, + }] + }) + }); + + afterEach(async () => { + if(testkit) { + // delete the indices between each tests to perform a migration again + await testkit.tearsDown(); + } + }); + + it('can be used to test model version cohabitation', async () => { + // last registered version is `1` (modelVersionBefore) + const repositoryV1 = testkit.repositoryBefore; + // last registered version is `2` (modelVersionAfter) + const repositoryV2 = testkit.repositoryAfter; + + // do something with the two repositories, e.g + await repositoryV1.create(someAttrs, { id }); + const v2docReadFromV1 = await repositoryV2.get('my-type', id); + expect(v2docReadFromV1.attributes).toEqual(whatIExpect); + }); +}); +---- + +*Limitations:* + +Because the test bed is only creating the parts of Core required to +instantiate the two SO repositories, and because we’re not able to +properly load all plugins (for proper isolation), the integration test +bed currently has some limitations: + +* no extensions are enabled +** no security +** no encryption +** no spaces +* all SO types will be using the same SO index + +=== Limitations and edge cases in serverless environments + +The serverless environment, and the fact that upgrade in such +environments are performed in a way where, at some point, the old and +new version of the application are living in cohabitation, leads to some +particularities regarding the way the SO APIs works, and to some +limitations / edge case that we need to document + +==== Using the `fields` option of the `find` savedObjects API + +By default, the `find` API (as any other SO API returning documents) +will migrate all documents before returning them, to ensure that +documents can be used by both versions during a cohabitation (e.g an old +node searching for documents already migrated, or a new node searching +for documents not yet migrated). + +However, when using the `fields` option of the `find` API, the documents +can’t be migrated, as some model version changes can’t be applied +against a partial set of attributes. For this reason, when the `fields` +option is provided, the documents returned from `find` will *not* be +migrated. + +Which is why, when using this option, the API consumer needs to make +sure that _all_ the fields passed to the `fields` option *were already +present in the prior model version*. Otherwise, it may lead to +inconsistencies during upgrades, where newly introduced or backfilled +fields may not necessarily appear in the documents returned from the +`search` API when the option is used. + +(_note_: both the previous and next version of Kibana must follow this +rule then) + +==== Using `bulkUpdate` for fields with large `json` blobs + +The savedObjects `bulkUpdate` API will update documents client-side and +then reindex the updated documents. These update operations are done +in-memory, and cause memory constraint issues when updating many objects +with large `json` blobs stored in some fields. As such, we recommend +against using `bulkUpdate` for savedObjects that: - use arrays (as these +tend to be large objects) - store large `json` blobs in some fields + diff --git a/docs/developer/architecture/core/saved-objects-service.asciidoc b/docs/developer/architecture/core/saved-objects-service.asciidoc index eb9f1c7fd45162..71ece4ae3d7354 100644 --- a/docs/developer/architecture/core/saved-objects-service.asciidoc +++ b/docs/developer/architecture/core/saved-objects-service.asciidoc @@ -47,6 +47,11 @@ export const dashboardVisualization: SavedObjectsType = { name: 'dashboard_visualization', // <1> hidden: true, namespaceType: 'multiple-isolated', // <2> + switchToModelVersionAt: '8.10.0', + modelVersions: { + 1: modelVersion1, + 2: modelVersion2, + }, mappings: { dynamic: false, properties: { @@ -58,10 +63,7 @@ export const dashboardVisualization: SavedObjectsType = { }, }, }, - migrations: { - '1.0.0': migratedashboardVisualizationToV1, - '2.0.0': migratedashboardVisualizationToV2, - }, + // ...other mandatory properties }; ---- <1> Since the name of a Saved Object type may form part of the URL path for the @@ -95,33 +97,32 @@ Each Saved Object type can define it's own {es} field mappings. Because multiple Saved Object types can share the same index, mappings defined by a type will be nested under a top-level field that matches the type name. -For example, the mappings defined by the `dashboard_visualization` Saved +For example, the mappings defined by the `search` Saved Object type: -.src/plugins/my_plugin/server/saved_objects/dashboard_visualization.ts +https://github.com/elastic/kibana/blob/main/src/plugins/saved_search/server/saved_objects/search.ts#L19-L70[.src/plugins/saved_search/server/saved_objects/search.ts] [source,typescript] ---- import { SavedObjectsType } from 'src/core/server'; - -export const dashboardVisualization: SavedObjectsType = { - name: 'dashboard_visualization', - ... +// ... other imports +export function getSavedSearchObjectType: SavedObjectsType = { // <1> + name: 'search', + hidden: false, + namespaceType: 'multiple-isolated', mappings: { + dynamic: false, properties: { - dynamic: false, - description: { - type: 'text', - }, - hits: { - type: 'integer', - }, + title: { type: 'text' }, + description: { type: 'text' }, }, }, - migrations: { ... }, + modelVersions: { ... }, + // ...other optional properties }; ---- +<1> Simplification -Will result in the following mappings being applied to the `.kibana` index: +Will result in the following mappings being applied to the `.kibana_analytics` index: [source,json] ---- { @@ -129,14 +130,14 @@ Will result in the following mappings being applied to the `.kibana` index: "dynamic": "strict", "properties": { ... - "dashboard_vizualization": { + "search": { "dynamic": false, "properties": { - "description": { + "title": { "type": "text", }, - "hits": { - "type": "integer", + "description": { + "type": "text", }, }, } @@ -157,242 +158,336 @@ Saved Object types should never use `dynamic: true` as this can cause an arbitrary amount of fields to be added to the `.kibana` index. [[saved-objects-service-writing-migrations]] -==== Writing Migrations +==== Writing Migrations by defining model versions -Saved Objects support schema changes between Kibana versions, which we call -migrations. Migrations are applied when a Kibana installation is upgraded from -one version to the next, when exports are imported via the Saved Objects -Management UI, or when a new object is created via the HTTP API. +Saved Objects support changes using `modelVersions``. The modelVersion API is a new way to define transformations +(_``migrations''_) for your savedObject types, and will replace the +``legacy'' migration API after Kibana version `8.10.0`. The legacy migration API has been deprecated, meaning it is no longer possible to register migrations using the legacy system. -Each Saved Object type may define migrations for its schema. Migrations are -specified by the Kibana version number, receive an input document, and must -return the fully migrated document to be persisted to Elasticsearch. +Model versions are decoupled from the stack version and satisfy the requirements for zero downtime and backward-compatibility. -Let's say we want to define two migrations: -- In version 1.1.0, we want to drop the `subtitle` field and append it to the - title -- In version 1.4.0, we want to add a new `id` field to every panel with a newly - generated UUID. +Each Saved Object type may define model versions for its schema and are bound to a given https://github.com/elastic/kibana/blob/9b330e493216e8dde3166451e4714966f63f5ab7/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_type.ts#L22-L27[savedObject type]. Changes to a saved object type are +specified by defining a new model. -First, the current `mappings` should always reflect the latest or "target" -schema. Next, we should define a migration function for each step in the schema -evolution: +=== Defining model versions -src/plugins/my_plugin/server/saved_objects/dashboard_visualization.ts -[source,typescript] +As for old migrations, model versions are bound to a given +https://github.com/elastic/kibana/blob/9b330e493216e8dde3166451e4714966f63f5ab7/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_type.ts#L22-L27[savedObject +type] + +When registering a SO type, a new +https://github.com/elastic/kibana/blob/9a6a2ccdff619f827b31c40dd9ed30cb27203da7/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_type.ts#L138-L177[modelVersions] +property is available. This attribute is a map of +https://github.com/elastic/kibana/blob/9a6a2ccdff619f827b31c40dd9ed30cb27203da7/packages/core/saved-objects/core-saved-objects-server/src/model_version/model_version.ts#L12-L20[SavedObjectsModelVersion] +which is the top-level type/container to define model versions. + +This map follows a similar `{ [version number] => version definition }` +format as the old migration map, however a given SO type’s model version +is now identified by a single integer. + +The first version must be numbered as version 1, incrementing by one for +each new version. + +That way: - SO type versions are decoupled from stack versioning - SO +type versions are independent between types + +_a *valid* version numbering:_ + +[source,ts] +---- +const myType: SavedObjectsType = { + name: 'test', + switchToModelVersionAt: '8.10.0', + modelVersions: { + 1: modelVersion1, // valid: start with version 1 + 2: modelVersion2, // valid: no gap between versions + }, + // ...other mandatory properties +}; ---- -import { SavedObjectsType, SavedObjectMigrationFn } from 'src/core/server'; -import uuid from 'uuid'; -interface DashboardVisualizationPre110 { - title: string; - subtitle: string; - panels: Array<{}>; -} -interface DashboardVisualization110 { - title: string; - panels: Array<{}>; -} +_an *invalid* version numbering:_ -interface DashboardVisualization140 { - title: string; - panels: Array<{ id: string }>; -} +[source,ts] +---- +const myType: SavedObjectsType = { + name: 'test', + switchToModelVersionAt: '8.10.0', + modelVersions: { + 2: modelVersion2, // invalid: first version must be 1 + 4: modelVersion3, // invalid: skipped version 3 + }, + // ...other mandatory properties +}; +---- -const migrateDashboardVisualization110: SavedObjectMigrationFn< - DashboardVisualizationPre110, // <1> - DashboardVisualization110 -> = (doc) => { - const { subtitle, ...attributesWithoutSubtitle } = doc.attributes; - return { - ...doc, // <2> - attributes: { - ...attributesWithoutSubtitle, - title: `${doc.attributes.title} - ${doc.attributes.subtitle}`, +=== Structure of a model version + +https://github.com/elastic/kibana/blob/9b330e493216e8dde3166451e4714966f63f5ab7/packages/core/saved-objects/core-saved-objects-server/src/model_version/model_version.ts#L12-L20[Model +versions] are not just functions as the previous migrations were, but +structured objects describing how the version behaves and what changed +since the last one. + +_A base example of what a model version can look like:_ + +[source,ts] +---- +const myType: SavedObjectsType = { + name: 'test', + switchToModelVersionAt: '8.10.0', + modelVersions: { + 1: { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + someNewField: { type: 'text' }, + }, + }, + { + type: 'data_backfill', + transform: someBackfillFunction, + }, + ], + schemas: { + forwardCompatibility: fcSchema, + create: createSchema, + }, }, - }; + }, + // ...other mandatory properties }; +---- + +*Note:* Having multiple changes of the same type for a given version is +supported by design to allow merging different sources (to prepare for +an eventual higher-level API) -const migrateDashboardVisualization140: SavedObjectMigrationFn< - DashboardVisualization110, - DashboardVisualization140 -> = (doc) => { - const outPanels = doc.attributes.panels?.map((panel) => { - return { ...panel, id: uuid.v4() }; - }); - return { - ...doc, - attributes: { - ...doc.attributes, - panels: outPanels, +_This definition would be perfectly valid:_ + +[source,ts] +---- +const version1: SavedObjectsModelVersion = { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + someNewField: { type: 'text' }, + }, + }, + { + type: 'mappings_addition', + addedMappings: { + anotherNewField: { type: 'text' }, + }, }, - }; + ], }; +---- -export const dashboardVisualization: SavedObjectsType = { - name: 'dashboard_visualization', // <1> - /** ... */ - migrations: { - // Takes a pre 1.1.0 doc, and converts it to 1.1.0 - '1.1.0': migrateDashboardVisualization110, +It’s currently composed of two main properties: + +==== changes + +https://github.com/elastic/kibana/blob/9b330e493216e8dde3166451e4714966f63f5ab7/packages/core/saved-objects/core-saved-objects-server/src/model_version/model_version.ts#L21-L51[link +to the TS doc for `changes`] + +Describes the list of changes applied during this version. + +*Important:* This is the part that replaces the old migration system, +and allows defining when a version adds new mapping, mutates the +documents, or other type-related changes. + +The current types of changes are: + +===== - mappings_addition + +Used to define new mappings introduced in a given version. - // Takes a 1.1.0 doc, and converts it to 1.4.0 - '1.4.0': migrateDashboardVisualization140, // <3> +_Usage example:_ + +[source,ts] +---- +const change: SavedObjectsModelMappingsAdditionChange = { + type: 'mappings_addition', + addedMappings: { + newField: { type: 'text' }, + existingNestedField: { + properties: { + newNestedProp: { type: 'keyword' }, + }, + }, }, }; ---- -<1> It is useful to define an interface for each version of the schema. This -allows TypeScript to ensure that you are properly handling the input and output -types correctly as the schema evolves. -<2> Returning a shallow copy is necessary to avoid type errors when using -different types for the input and output shape. -<3> Migrations do not have to be defined for every version. The version number -of a migration must always be the earliest Kibana version in which this -migration was released. So if you are creating a migration which will be -part of the v7.10.0 release, but will also be backported and released as -v7.9.3, the migration version should be: 7.9.3. -Migrations should be written defensively, an exception in a migration function -will prevent a Kibana upgrade from succeeding and will cause downtime for our -users. Having said that, if a document is encountered that is not in the -expected shape, migrations are encouraged to throw an exception to abort the -upgrade. In most scenarios, it is better to fail an upgrade than to silently -ignore a corrupt document which can cause unexpected behaviour at some future -point in time. +*note:* _When adding mappings, the root `type.mappings` must also be +updated accordingly (as it was done previously)._ -WARNING: Do not attempt to change the `migrationVersion`, `id`, or `type` fields -within a migration function, this is not supported. +===== - mappings_deprecation -It is critical that you have extensive tests to ensure that migrations behave -as expected with all possible input documents. Given how simple it is to test -all the branch conditions in a migration function and the high impact of a bug -in this code, there's really no reason not to aim for 100% test code coverage. +Used to flag mappings as no longer being used and ready to be removed. -==== Type visibility -It is recommended that plugins only expose Saved Object types that are necessary. -That is so to provide better backward compatibility. +_Usage example:_ -There are two options to register a type: either as completely unexposed to the global Saved Objects HTTP APIs and client or to only expose it to the client but not to the APIs. - -===== Hidden types +[source,ts] +---- +let change: SavedObjectsModelMappingsDeprecationChange = { + type: 'mappings_deprecation', + deprecatedMappings: ['someDeprecatedField', 'someNested.deprecatedField'], +}; +---- -In case when the type is not hidden, it will be exposed via the global Saved Objects HTTP API. -That brings the limitation of introducing backward incompatible changes as there might be a service consuming the API. +*note:* _It is currently not possible to remove fields from an existing +index’s mapping (without reindexing into another index), so the mappings +flagged with this change type won’t be deleted for now, but this should +still be used to allow our system to clean the mappings once upstream +(ES) unblock us._ -This is a formal limitation not prohibiting backward incompatible changes in the migrations. -But in case of such changes on the hidden types, they can be resolved and encapsulated on the intermediate layer in the plugin API. +===== - data_backfill -Hence, the main idea is that all the interactions with the Saved Objects should be done via the plugin API rather than via the Saved Objects HTTP API. +Used to populate fields (indexed or not) added in the same version. -By default, the hidden types will not be accessible in the Saved Objects client. -To make them accessible, they should be explicitly listed in the `includedHiddenTypes` parameters upon client creation. +_Usage example:_ -[source,typescript] +[source,ts] +---- +let change: SavedObjectsModelDataBackfillChange = { + type: 'data_backfill', + transform: (document) => { + return { attributes: { someAddedField: 'defaultValue' } }; + }, +}; ---- -import { CoreStart, Plugin } from '@kbn/core/server'; -class SomePlugin implements Plugin { - // ... +*note:* _Even if no check is performed to ensure it, this type of model +change should only be used to backfill newly introduced fields._ - public start({ savedObjects }: CoreStart) { - // ... +===== - data_removal - const savedObjectsClient = savedObjects.getScopedClient( - request, - { includedHiddenTypes: ['dashboard_visualization'] } - ); +Used to remove data (unset fields) from all documents of the type. - // ... - } -} +_Usage example:_ + +[source,ts] +---- +let change: SavedObjectsModelDataRemovalChange = { + type: 'data_removal', + attributePaths: ['someRootAttributes', 'some.nested.attribute'], +}; ---- -===== Hidden from the HTTP APIs +*note:* _Due to backward compatibility, field utilization must be +stopped in a prior release before actual data removal (in case of +rollback). Please refer to the field removal migration example below in +this document_ -When a saved object is registered as hidden from the HTTP APIs, it will remain exposed to the global Saved Objects client: +===== - unsafe_transform -[source,typescript] ----- -import { SavedObjectsType } from 'src/core/server'; +Used to execute an arbitrary transformation function. -export const myCustomVisualization: SavedObjectsType = { - name: 'my_custom_visualization', // <1> - hidden: false, - hiddenFromHttpApis: true, // <2> - namespaceType: 'multiple-isolated', - mappings: { - dynamic: false, - properties: { - description: { - type: 'text', - }, - hits: { - type: 'integer', - }, - }, - }, - migrations: { - '1.0.0': migrateMyCustomVisualizationToV1, - '2.0.0': migrateMyCustomVisualizationToV2, +_Usage example:_ + +[source,ts] +---- +let change: SavedObjectsModelUnsafeTransformChange = { + type: 'unsafe_transform', + transformFn: (document) => { + document.attributes.someAddedField = 'defaultValue'; + return { document }; }, }; ---- -<1> MyCustomVisualization types have their own domain-specific HTTP API's that leverage the global Saved Objects client -<2> This field determines "hidden from http apis" behavior -- any attempts to use the global Saved Objects HTTP APIs will throw errors +*note:* _Using such transformations is potentially unsafe, given the +migration system will have no knowledge of which kind of operations will +effectively be executed against the documents. Those should only be used +when there’s no other way to cover one’s migration needs._ *Please reach +out to the development team if you think you need to use this, as you +theoretically shouldn’t.* + +==== schemas + +https://github.com/elastic/kibana/blob/9b330e493216e8dde3166451e4714966f63f5ab7/packages/core/saved-objects/core-saved-objects-server/src/model_version/schemas.ts#L11-L16[link +to the TS doc for `schemas`] + +The schemas associated with this version. Schemas are used to validate +or convert SO documents at various stages of their lifecycle. -=== Client side usage +The currently available schemas are: -==== References +===== forwardCompatibility -When a Saved Object declares `references` to other Saved Objects, the -Saved Objects Export API will automatically export the target object with all -of its references. This makes it easy for users to export the entire -reference graph of an object. +This is a new concept introduced by model versions. This schema is used +for inter-version compatibility. -If a Saved Object can't be used on its own, that is, it needs other objects -to exist for a feature to function correctly, that Saved Object should declare -references to all the objects it requires. For example, a `dashboard` -object might have panels for several `visualization` objects. When these -`visualization` objects don't exist, the dashboard cannot be rendered -correctly. The `dashboard` object should declare references to all its -visualizations. +When retrieving a savedObject document from an index, if the version of +the document is higher than the latest version known of the Kibana +instance, the document will go through the `forwardCompatibility` schema +of the associated model version. -However, `visualization` objects can continue to be rendered or embedded into -other dashboards even if the `dashboard` it was originally embedded into -doesn't exist. As a result, `visualization` objects should not declare -references to `dashboard` objects. +*Important:* These conversion mechanism shouldn’t assert the data +itself, and only strip unknown fields to convert the document to the +*shape* of the document at the given version. -For each referenced object, an `id`, `type` and `name` are added to the -`references` array: +Basically, this schema should keep all the known fields of a given +version, and remove all the unknown fields, without throwing. -[source, typescript] +Forward compatibility schema can be implemented in two different ways. + +[arabic] +. Using `config-schema` + +_Example of schema for a version having two fields: someField and +anotherField_ + +[source,ts] ---- -router.get( - { path: '/some-path', validate: false }, - async (context, req, res) => { - const object = await context.core.savedObjects.client.create( - 'dashboard', - { - title: 'my dashboard', - panels: [ - { visualization: 'vis1' }, // <1> - ], - indexPattern: 'indexPattern1' - }, - { references: [ - { id: '...', type: 'visualization', name: 'vis1' }, - { id: '...', type: 'index_pattern', name: 'indexPattern1' }, - ] - } - ) - ... - } +const versionSchema = schema.object( + { + someField: schema.maybe(schema.string()), + anotherField: schema.maybe(schema.string()), + }, + { unknowns: 'ignore' } ); ---- -<1> Note how `dashboard.panels[0].visualization` stores the `name` property of -the reference (not the `id` directly) to be able to uniquely identify this -reference. This guarantees that the id the reference points to always remains -up to date. If a visualization `id` was directly stored in -`dashboard.panels[0].visualization` there is a risk that this `id` gets -updated without updating the reference in the references array. + +*Important:* Note the `{ unknowns: 'ignore' }` in the schema’s options. +This is required when using `config-schema` based schemas, as this what +will evict the additional fields without throwing an error. + +[arabic, start=2] +. Using a plain javascript function + +_Example of schema for a version having two fields: someField and +anotherField_ + +[source,ts] +---- +const versionSchema: SavedObjectModelVersionEvictionFn = (attributes) => { + const knownFields = ['someField', 'anotherField']; + return pick(attributes, knownFields); +} +---- + +*note:* _Even if highly recommended, implementing this schema is not +strictly required. Type owners can manage unknown fields and +inter-version compatibility themselves in their service layer instead._ + +===== create + +This is a direct replacement for +https://github.com/elastic/kibana/blob/9b330e493216e8dde3166451e4714966f63f5ab7/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_type.ts#L75-L82[the +old SavedObjectType.schemas] definition, now directly included in the +model version definition. + +As a refresher the `create` schema is a `@kbn/config-schema` object-type +schema, and is used to validate the properties of the document during +`create` and `bulkCreate` operations. + +*note:* _Implementing this schema is optional, but still recommended, as +otherwise there will be no validating when importing objects_ + +For implementation examples, refer to <>. + +include::saved-objects-service-use-case-examples.asciidoc[leveloffset=+1] diff --git a/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_type.ts b/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_type.ts index 716b31406649c5..53b52d04f376b5 100644 --- a/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_type.ts +++ b/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_type.ts @@ -70,6 +70,7 @@ export interface SavedObjectsType { mappings: SavedObjectsTypeMappingDefinition; /** * An optional map of {@link SavedObjectMigrationFn | migrations} or a function returning a map of {@link SavedObjectMigrationFn | migrations} to be used to migrate the type. + * @deprecated Use {@link SavedObjectsType.modelVersions | modelVersions} instead. */ migrations?: SavedObjectMigrationMap | (() => SavedObjectMigrationMap); /** @@ -78,6 +79,7 @@ export interface SavedObjectsType { * When provided, calls to {@link SavedObjectsClient.create | create} will be validated against this schema. * * See {@link SavedObjectsValidationMap} for more details. + * @deprecated Use {@link SavedObjectsType.modelVersions | modelVersions} instead. */ schemas?: SavedObjectsValidationMap | (() => SavedObjectsValidationMap); /** @@ -177,7 +179,7 @@ export interface SavedObjectsType { modelVersions?: SavedObjectsModelVersionMap | SavedObjectsModelVersionMapProvider; /** - * Allows to opt-in to the new model version API. + * Allows to opt-in to the model version API. * * Must be a valid semver version (with the patch version being necessarily 0) * From f8c49fe03826f0baeb3466ddb499fb84579c794c Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Thu, 15 Feb 2024 15:14:49 -0600 Subject: [PATCH 24/40] skip failing suites (#177084) --- .buildkite/scripts/pipelines/pull_request/pipeline.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index 25539aecb0707c..df912b10bbb3ee 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -81,7 +81,8 @@ const uploadPipeline = (pipelineContent: string | object) => { } if ( - (await doAnyChangesMatch([/^x-pack\/plugins\/apm/, /^packages\/kbn-apm-synthtrace/])) || + // Failing: See https://github.com/elastic/kibana/issues/177084 + // (await doAnyChangesMatch([/^x-pack\/plugins\/apm/, /^packages\/kbn-apm-synthtrace/])) || GITHUB_PR_LABELS.includes('ci:all-cypress-suites') ) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/apm_cypress.yml')); From 58652916c585f976486e0b304da0d8e7bab842a9 Mon Sep 17 00:00:00 2001 From: Tomasz Ciecierski Date: Thu, 15 Feb 2024 23:56:41 +0100 Subject: [PATCH 25/40] [EDR Workflows] Unskip osquery alert test (#177023) --- .../all/alerts_response_actions_form.cy.ts | 427 +++++++++--------- 1 file changed, 211 insertions(+), 216 deletions(-) diff --git a/x-pack/plugins/osquery/cypress/e2e/all/alerts_response_actions_form.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/alerts_response_actions_form.cy.ts index 020469299d8c5e..5cb3a317878638 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/alerts_response_actions_form.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/alerts_response_actions_form.cy.ts @@ -24,229 +24,224 @@ import { import { clickRuleName, inputQuery, typeInECSFieldInput } from '../../tasks/live_query'; import { closeDateTabIfVisible, closeToastIfVisible } from '../../tasks/integrations'; -// FLAKY: https://github.com/elastic/kibana/issues/169785 -describe.skip( - 'Alert Event Details - Response Actions Form', - { tags: ['@ess', '@serverless'] }, - () => { - let multiQueryPackId: string; - let multiQueryPackName: string; - let ruleId: string; - let ruleName: string; - let packId: string; - let packName: string; - const packData = packFixture(); - const multiQueryPackData = multiQueryPackFixture(); - before(() => { - initializeDataViews(); - }); - beforeEach(() => { - loadPack(packData).then((data) => { - packId = data.saved_object_id; - packName = data.name; - }); - loadPack(multiQueryPackData).then((data) => { - multiQueryPackId = data.saved_object_id; - multiQueryPackName = data.name; - }); - loadRule().then((data) => { - ruleId = data.id; - ruleName = data.name; - }); - }); - afterEach(() => { - cleanupPack(packId); - cleanupPack(multiQueryPackId); - cleanupRule(ruleId); - }); - - it('adds response actions with osquery with proper validation and form values', () => { - cy.visit('/app/security/rules'); - clickRuleName(ruleName); - cy.getBySel('globalLoadingIndicator').should('not.exist'); - cy.getBySel('editRuleSettingsLink').click(); - cy.getBySel('globalLoadingIndicator').should('not.exist'); - closeDateTabIfVisible(); - cy.getBySel('edit-rule-actions-tab').click(); - cy.getBySel('globalLoadingIndicator').should('not.exist'); - cy.contains('Response actions are run on each rule execution.'); - cy.getBySel(OSQUERY_RESPONSE_ACTION_ADD_BUTTON).click(); - - cy.getBySel(RESPONSE_ACTIONS_ERRORS).within(() => { - cy.contains('Query is a required field'); - cy.contains('The timeout value must be 60 seconds or higher.').should('not.exist'); - }); +describe('Alert Event Details - Response Actions Form', { tags: ['@ess', '@serverless'] }, () => { + let multiQueryPackId: string; + let multiQueryPackName: string; + let ruleId: string; + let ruleName: string; + let packId: string; + let packName: string; + const packData = packFixture(); + const multiQueryPackData = multiQueryPackFixture(); + before(() => { + initializeDataViews(); + }); + beforeEach(() => { + loadPack(packData).then((data) => { + packId = data.saved_object_id; + packName = data.name; + }); + loadPack(multiQueryPackData).then((data) => { + multiQueryPackId = data.saved_object_id; + multiQueryPackName = data.name; + }); + loadRule().then((data) => { + ruleId = data.id; + ruleName = data.name; + }); + }); + afterEach(() => { + cleanupPack(packId); + cleanupPack(multiQueryPackId); + cleanupRule(ruleId); + }); + + it('adds response actions with osquery with proper validation and form values', () => { + cy.visit('/app/security/rules'); + clickRuleName(ruleName); + cy.getBySel('globalLoadingIndicator').should('not.exist'); + cy.getBySel('editRuleSettingsLink').click(); + cy.getBySel('globalLoadingIndicator').should('not.exist'); + closeDateTabIfVisible(); + cy.getBySel('edit-rule-actions-tab').click(); + cy.getBySel('globalLoadingIndicator').should('not.exist'); + cy.contains('Response actions are run on each rule execution.'); + cy.getBySel(OSQUERY_RESPONSE_ACTION_ADD_BUTTON).click(); + + cy.getBySel(RESPONSE_ACTIONS_ERRORS).within(() => { + cy.contains('Query is a required field'); + cy.contains('The timeout value must be 60 seconds or higher.').should('not.exist'); + }); - // check if changing error state of one input doesn't clear other errors - START - cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { - cy.contains('Advanced').click(); - cy.getBySel('timeout-input').clear(); - cy.contains('The timeout value must be 60 seconds or higher.'); - }); + // check if changing error state of one input doesn't clear other errors - START + cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { + cy.contains('Advanced').click(); + cy.getBySel('timeout-input').clear(); + cy.contains('The timeout value must be 60 seconds or higher.'); + }); - cy.getBySel(RESPONSE_ACTIONS_ERRORS).within(() => { - cy.contains('Query is a required field'); - cy.contains('The timeout value must be 60 seconds or higher.'); - }); - - cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { - cy.getBySel('timeout-input').type('6'); - cy.contains('The timeout value must be 60 seconds or higher.'); - }); - cy.getBySel(RESPONSE_ACTIONS_ERRORS).within(() => { - cy.contains('Query is a required field'); - cy.contains('The timeout value must be 60 seconds or higher.'); - }); - cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { - cy.getBySel('timeout-input').type('6'); - cy.contains('The timeout value must be 60 seconds or higher.').should('not.exist'); - }); - cy.getBySel(RESPONSE_ACTIONS_ERRORS).within(() => { - cy.contains('Query is a required field'); - }); - cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { - cy.getBySel('timeout-input').type('6'); - }); - cy.getBySel(RESPONSE_ACTIONS_ERRORS).within(() => { - cy.contains('Query is a required field'); - cy.contains('The timeout value must be 60 seconds or higher.').should('not.exist'); - }); - // check if changing error state of one input doesn't clear other errors - END + cy.getBySel(RESPONSE_ACTIONS_ERRORS).within(() => { + cy.contains('Query is a required field'); + cy.contains('The timeout value must be 60 seconds or higher.'); + }); + + cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { + cy.getBySel('timeout-input').type('6'); + cy.contains('The timeout value must be 60 seconds or higher.'); + }); + cy.getBySel(RESPONSE_ACTIONS_ERRORS).within(() => { + cy.contains('Query is a required field'); + cy.contains('The timeout value must be 60 seconds or higher.'); + }); + cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { + cy.getBySel('timeout-input').type('6'); + cy.contains('The timeout value must be 60 seconds or higher.').should('not.exist'); + }); + cy.getBySel(RESPONSE_ACTIONS_ERRORS).within(() => { + cy.contains('Query is a required field'); + }); + cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { + cy.getBySel('timeout-input').type('6'); + }); + cy.getBySel(RESPONSE_ACTIONS_ERRORS).within(() => { + cy.contains('Query is a required field'); + cy.contains('The timeout value must be 60 seconds or higher.').should('not.exist'); + }); + // check if changing error state of one input doesn't clear other errors - END + + cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { + cy.contains('Query is a required field'); + inputQuery('select * from uptime1'); + }); + cy.getBySel(OSQUERY_RESPONSE_ACTION_ADD_BUTTON).click(); + cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { + cy.contains('Run a set of queries in a pack').click(); + }); + cy.getBySel(RESPONSE_ACTIONS_ERRORS) + .within(() => { + cy.contains('Pack is a required field'); + }) + .should('exist'); + cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { + cy.contains('Pack is a required field'); + cy.getBySel('comboBoxInput').type(`${packName}{downArrow}{enter}`); + }); + + cy.getBySel(OSQUERY_RESPONSE_ACTION_ADD_BUTTON).click(); - cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { + cy.getBySel(RESPONSE_ACTIONS_ITEM_2) + .within(() => { cy.contains('Query is a required field'); - inputQuery('select * from uptime1'); - }); - cy.getBySel(OSQUERY_RESPONSE_ACTION_ADD_BUTTON).click(); - cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { - cy.contains('Run a set of queries in a pack').click(); - }); - cy.getBySel(RESPONSE_ACTIONS_ERRORS) - .within(() => { - cy.contains('Pack is a required field'); - }) - .should('exist'); - cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { + inputQuery('select * from uptime'); + cy.contains('Query is a required field').should('not.exist'); + cy.contains('Advanced').click(); + typeInECSFieldInput('{downArrow}{enter}'); + cy.getBySel('osqueryColumnValueSelect').type('days{downArrow}{enter}'); + }) + .clickOutside(); + + cy.getBySel('ruleEditSubmitButton').click(); + cy.contains(`${ruleName} was saved`).should('exist'); + closeToastIfVisible(); + + cy.getBySel('globalLoadingIndicator').should('not.exist'); + cy.getBySel('editRuleSettingsLink').click(); + cy.getBySel('globalLoadingIndicator').should('not.exist'); + cy.getBySel('edit-rule-actions-tab').click(); + cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { + cy.contains('select * from uptime1'); + }); + cy.getBySel(RESPONSE_ACTIONS_ITEM_2).within(() => { + cy.contains('select * from uptime'); + cy.contains('Custom key/value pairs. e.g. {"application":"foo-bar","env":"production"}'); + cy.contains('Days of uptime'); + }); + cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { + cy.getBySel('comboBoxSearchInput').should('have.value', packName); + cy.getBySel('comboBoxInput').type('{selectall}{backspace}{enter}'); + }); + cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { + cy.contains('select * from uptime1'); + cy.getBySel('remove-response-action').click(); + }); + cy.getBySel(RESPONSE_ACTIONS_ITEM_0) + .within(() => { + cy.getBySel('comboBoxSearchInput').click(); + cy.contains('Search for a pack to run'); cy.contains('Pack is a required field'); cy.getBySel('comboBoxInput').type(`${packName}{downArrow}{enter}`); - }); - - cy.getBySel(OSQUERY_RESPONSE_ACTION_ADD_BUTTON).click(); - - cy.getBySel(RESPONSE_ACTIONS_ITEM_2) - .within(() => { - cy.contains('Query is a required field'); - inputQuery('select * from uptime'); - cy.contains('Query is a required field').should('not.exist'); - cy.contains('Advanced').click(); - typeInECSFieldInput('{downArrow}{enter}'); - cy.getBySel('osqueryColumnValueSelect').type('days{downArrow}{enter}'); - }) - .clickOutside(); - - cy.getBySel('ruleEditSubmitButton').click(); - cy.contains(`${ruleName} was saved`).should('exist'); - closeToastIfVisible(); - - cy.getBySel('globalLoadingIndicator').should('not.exist'); - cy.getBySel('editRuleSettingsLink').click(); - cy.getBySel('globalLoadingIndicator').should('not.exist'); - cy.getBySel('edit-rule-actions-tab').click(); - cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { - cy.contains('select * from uptime1'); - }); - cy.getBySel(RESPONSE_ACTIONS_ITEM_2).within(() => { - cy.contains('select * from uptime'); - cy.contains('Custom key/value pairs. e.g. {"application":"foo-bar","env":"production"}'); - cy.contains('Days of uptime'); - }); - cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { + cy.contains(packName); + }) + .clickOutside(); + cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { + cy.contains('select * from uptime'); + cy.contains('Custom key/value pairs. e.g. {"application":"foo-bar","env":"production"}'); + cy.contains('Days of uptime'); + }); + + cy.intercept('PUT', '/api/detection_engine/rules').as('saveRuleSingleQuery'); + + cy.getBySel('ruleEditSubmitButton').click(); + cy.wait('@saveRuleSingleQuery', { timeout: 15000 }).should(({ request }) => { + const oneQuery = [ + { + interval: 3600, + query: 'select * from uptime;', + id: Object.keys(packData.queries)[0], + }, + ]; + expect(request.body.response_actions[0].params.queries).to.deep.equal(oneQuery); + }); + + cy.contains(`${ruleName} was saved`).should('exist'); + closeToastIfVisible(); + + cy.getBySel('globalLoadingIndicator').should('not.exist'); + cy.getBySel('editRuleSettingsLink').click(); + cy.getBySel('globalLoadingIndicator').should('not.exist'); + + cy.getBySel('edit-rule-actions-tab').click(); + cy.getBySel(RESPONSE_ACTIONS_ITEM_0) + .within(() => { cy.getBySel('comboBoxSearchInput').should('have.value', packName); - cy.getBySel('comboBoxInput').type('{selectall}{backspace}{enter}'); - }); - cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { - cy.contains('select * from uptime1'); - cy.getBySel('remove-response-action').click(); - }); - cy.getBySel(RESPONSE_ACTIONS_ITEM_0) - .within(() => { - cy.getBySel('comboBoxSearchInput').click(); - cy.contains('Search for a pack to run'); - cy.contains('Pack is a required field'); - cy.getBySel('comboBoxInput').type(`${packName}{downArrow}{enter}`); - cy.contains(packName); - }) - .clickOutside(); - cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { + cy.getBySel('comboBoxInput').type( + `{selectall}{backspace}${multiQueryPackName}{downArrow}{enter}` + ); + cy.contains('SELECT * FROM memory_info;'); + cy.contains('SELECT * FROM system_info;'); + }) + .clickOutside(); + + cy.getBySel(RESPONSE_ACTIONS_ITEM_1) + .within(() => { cy.contains('select * from uptime'); cy.contains('Custom key/value pairs. e.g. {"application":"foo-bar","env":"production"}'); cy.contains('Days of uptime'); - }); - - cy.intercept('PUT', '/api/detection_engine/rules').as('saveRuleSingleQuery'); - - cy.getBySel('ruleEditSubmitButton').click(); - cy.wait('@saveRuleSingleQuery', { timeout: 15000 }).should(({ request }) => { - const oneQuery = [ - { - interval: 3600, - query: 'select * from uptime;', - id: Object.keys(packData.queries)[0], - }, - ]; - expect(request.body.response_actions[0].params.queries).to.deep.equal(oneQuery); - }); - - cy.contains(`${ruleName} was saved`).should('exist'); - closeToastIfVisible(); - - cy.getBySel('globalLoadingIndicator').should('not.exist'); - cy.getBySel('editRuleSettingsLink').click(); - cy.getBySel('globalLoadingIndicator').should('not.exist'); - - cy.getBySel('edit-rule-actions-tab').click(); - cy.getBySel(RESPONSE_ACTIONS_ITEM_0) - .within(() => { - cy.getBySel('comboBoxSearchInput').should('have.value', packName); - cy.getBySel('comboBoxInput').type( - `{selectall}{backspace}${multiQueryPackName}{downArrow}{enter}` - ); - cy.contains('SELECT * FROM memory_info;'); - cy.contains('SELECT * FROM system_info;'); - }) - .clickOutside(); - - cy.getBySel(RESPONSE_ACTIONS_ITEM_1) - .within(() => { - cy.contains('select * from uptime'); - cy.contains('Custom key/value pairs. e.g. {"application":"foo-bar","env":"production"}'); - cy.contains('Days of uptime'); - }) - .clickOutside(); - cy.intercept('PUT', '/api/detection_engine/rules').as('saveRuleMultiQuery'); - - cy.contains('Save changes').click(); - cy.wait('@saveRuleMultiQuery').should(({ request }) => { - const threeQueries = [ - { - interval: 3600, - query: 'SELECT * FROM memory_info;', - platform: 'linux', - id: Object.keys(multiQueryPackData.queries)[0], - }, - { - interval: 3600, - query: 'SELECT * FROM system_info;', - id: Object.keys(multiQueryPackData.queries)[1], - }, - { - interval: 10, - query: 'select opera_extensions.* from users join opera_extensions using (uid);', - id: Object.keys(multiQueryPackData.queries)[2], - }, - ]; - expect(request.body.response_actions[0].params.queries).to.deep.equal(threeQueries); - }); - }); - } -); + }) + .clickOutside(); + cy.intercept('PUT', '/api/detection_engine/rules').as('saveRuleMultiQuery'); + + cy.contains('Save changes').click(); + cy.wait('@saveRuleMultiQuery').should(({ request }) => { + const threeQueries = [ + { + interval: 3600, + query: 'SELECT * FROM memory_info;', + platform: 'linux', + id: Object.keys(multiQueryPackData.queries)[0], + }, + { + interval: 3600, + query: 'SELECT * FROM system_info;', + id: Object.keys(multiQueryPackData.queries)[1], + }, + { + interval: 10, + query: 'select opera_extensions.* from users join opera_extensions using (uid);', + id: Object.keys(multiQueryPackData.queries)[2], + }, + ]; + expect(request.body.response_actions[0].params.queries).to.deep.equal(threeQueries); + }); + }); +}); From a2cb03b9fa613d5bd0b8e960583e9f1b2831b408 Mon Sep 17 00:00:00 2001 From: Philippe Oberti Date: Thu, 15 Feb 2024 17:13:49 -0600 Subject: [PATCH 26/40] [Security Solution][Expandable flyout] add multi flyout support to kbn-expandable-flyout package (#176457) --- packages/kbn-expandable-flyout/README.md | 37 +- packages/kbn-expandable-flyout/index.ts | 4 +- packages/kbn-expandable-flyout/src/actions.ts | 91 ++- .../kbn-expandable-flyout/src/constants.ts | 5 +- .../kbn-expandable-flyout/src/context.tsx | 63 ++ .../src/hooks/use_expandable_flyout_api.ts | 42 +- .../src/hooks/use_expandable_flyout_state.ts | 11 +- .../kbn-expandable-flyout/src/index.test.tsx | 70 ++- .../src/provider.test.tsx | 105 ++++ .../kbn-expandable-flyout/src/provider.tsx | 69 ++- .../kbn-expandable-flyout/src/reducer.test.ts | 585 ++++++++++++++---- packages/kbn-expandable-flyout/src/reducer.ts | 118 +++- packages/kbn-expandable-flyout/src/redux.ts | 8 +- packages/kbn-expandable-flyout/src/state.ts | 16 +- .../src/test/provider.tsx | 11 +- .../app/home/template_wrapper/index.tsx | 3 +- .../public/common/hooks/use_url_state.ts | 3 +- 17 files changed, 989 insertions(+), 252 deletions(-) create mode 100644 packages/kbn-expandable-flyout/src/context.tsx create mode 100644 packages/kbn-expandable-flyout/src/provider.test.tsx diff --git a/packages/kbn-expandable-flyout/README.md b/packages/kbn-expandable-flyout/README.md index ceac69e20722f9..2baa93ee6058b0 100644 --- a/packages/kbn-expandable-flyout/README.md +++ b/packages/kbn-expandable-flyout/README.md @@ -13,8 +13,6 @@ The flyout is composed of 3 sections: ## Design decisions -The expandable-flyout package is designed to render a single flyout for an entire plugin. While displaying multiple flyouts might be feasible, it will be a bit complicated, and we recommend instead to build multiple panels, with each their own context to manage their data (for example, take a look at the Security Solution [setup](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/flyout)). - The expandable-flyout is making some strict UI design decisions: - when in collapsed mode (i.e. when only the right/preview section is open), the flyout's width linearly grows from its minimum value of 380px to its maximum value of 750px - when in expanded mode (i.e. when the left section is opened), the flyout's width changes depending on the browser's width: @@ -23,6 +21,25 @@ The expandable-flyout is making some strict UI design decisions: > While the expandable-flyout will work on very small screens, having both the right and left sections visible at the same time will not be a good experience to the user. We recommend only showing the right panel, and therefore handling this situation when you build your panels by considering hiding the actions that could open the left panel (like the expand details button in the [FlyoutNavigation](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_navigation.tsx)). +## State persistence + +The expandable flyout offers 2 ways of managing its state: + +### Memory storage + +The default behavior saves the state of the flyout in memory. The state is internal to the package and based on an isolated redux context. Using this mode means the state will not be persisted when sharing url or reloading browser pages. + +### Url storage + +The second way (done by setting the `urlKey` prop to a string value) saves the state of the flyout in the url. This allows the flyout to be automatically reopened when users refresh the browser page, or when users share an url. The `urlKey` will be used as the url parameter. + +**_Note: the word `memory` cannot be used as an `urlKey` as it is reserved for the memory storage behavior. You can use any other string value, try to use something that should be unique._** + +> We highly recommend NOT nesting flyouts in your code, as it would cause conflicts for the url keys. We recommend instead to build multiple panels, with each their own context to manage their data (for example, take a look at the Security Solution [setup](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/flyout)). +> +> A good solution is for example to have one instance of a flyout at a page level, and then have multiple panels that can be opened in that flyout. + + ## Package API The ExpandableFlyout [React component](https://github.com/elastic/kibana/tree/main/packages/kbn-expandable-flyout/src/index.tsx) renders the UI, leveraging an [EuiFlyout](https://eui.elastic.co/#/layout/flyout). @@ -46,10 +63,15 @@ To control (or mutate) flyout's layout, you can utilize [useExpandableFlyoutApi] To use the expandable flyout in your plugin, first you need wrap your code with the [context provider](https://github.com/elastic/kibana/blob/main/packages/kbn-expandable-flyout/src/context.tsx) at a high enough level as follows: ```typescript jsx +// state stored in the url + + ... + + + +// state stored in memory - ... - ``` @@ -60,13 +82,6 @@ Then use the [React UI component](https://github.com/elastic/kibana/tree/main/pa ``` _where `myPanels` is a list of all the panels that can be rendered in the flyout_ -## State persistence - -The expandable flyout offers 2 ways of managing its state: -- the default behavior saves the state of the flyout in the url. This allows the flyout to be automatically reopened when users refresh the browser page, or when users share a url -- the second way (done by setting the `storage` prop to `memory`) stores the state of the flyout in memory. This means that the flyout will not be reopened when users refresh the browser page, or when users share a url - - ## Terminology ### Section diff --git a/packages/kbn-expandable-flyout/index.ts b/packages/kbn-expandable-flyout/index.ts index d4299d676667f9..e5eaae99c26f86 100644 --- a/packages/kbn-expandable-flyout/index.ts +++ b/packages/kbn-expandable-flyout/index.ts @@ -11,11 +11,9 @@ export { ExpandableFlyout } from './src'; export { useExpandableFlyoutApi } from './src/hooks/use_expandable_flyout_api'; export { useExpandableFlyoutState } from './src/hooks/use_expandable_flyout_state'; -export { type State as ExpandableFlyoutState } from './src/state'; +export { type FlyoutState as ExpandableFlyoutState } from './src/state'; export { ExpandableFlyoutProvider } from './src/provider'; export type { ExpandableFlyoutProps } from './src'; export type { FlyoutPanelProps, PanelPath, ExpandableFlyoutApi } from './src/types'; - -export { EXPANDABLE_FLYOUT_URL_KEY } from './src/constants'; diff --git a/packages/kbn-expandable-flyout/src/actions.ts b/packages/kbn-expandable-flyout/src/actions.ts index 56b6317032bc6d..66ba9d900720be 100644 --- a/packages/kbn-expandable-flyout/src/actions.ts +++ b/packages/kbn-expandable-flyout/src/actions.ts @@ -23,24 +23,99 @@ export enum ActionType { } export const openPanelsAction = createAction<{ + /** + * Panel to render in the right section + */ right?: FlyoutPanelProps; + /** + * Panel to render in the left section + */ left?: FlyoutPanelProps; + /** + * Panels to render in the preview section + */ preview?: FlyoutPanelProps; + /** + * Unique identifier for the flyout (either the urlKey or 'memory') + */ + id: string; }>(ActionType.openFlyout); -export const openRightPanelAction = createAction(ActionType.openRightPanel); -export const openLeftPanelAction = createAction(ActionType.openLeftPanel); -export const openPreviewPanelAction = createAction(ActionType.openPreviewPanel); +export const openRightPanelAction = createAction<{ + /** + * Panel to render in the right section + */ + right: FlyoutPanelProps; + /** + * Unique identifier for the flyout (either the urlKey or 'memory') + */ + id: string; +}>(ActionType.openRightPanel); +export const openLeftPanelAction = createAction<{ + /** + * Panel to render in the left section + */ + left: FlyoutPanelProps; + /** + * Unique identifier for the flyout (either the urlKey or 'memory') + */ + id: string; +}>(ActionType.openLeftPanel); +export const openPreviewPanelAction = createAction<{ + /** + * Panels to render in the preview section + */ + preview: FlyoutPanelProps; + id: string; +}>(ActionType.openPreviewPanel); -export const closePanelsAction = createAction(ActionType.closeFlyout); -export const closeRightPanelAction = createAction(ActionType.closeRightPanel); -export const closeLeftPanelAction = createAction(ActionType.closeLeftPanel); -export const closePreviewPanelAction = createAction(ActionType.closePreviewPanel); +export const closePanelsAction = createAction<{ + /** + * Unique identifier for the flyout (either the urlKey or 'memory') + */ + id: string; +}>(ActionType.closeFlyout); +export const closeRightPanelAction = createAction<{ + /** + * Unique identifier for the flyout (either the urlKey or 'memory') + */ + id: string; +}>(ActionType.closeRightPanel); +export const closeLeftPanelAction = createAction<{ + /** + * Unique identifier for the flyout (either the urlKey or 'memory') + */ + id: string; +}>(ActionType.closeLeftPanel); +export const closePreviewPanelAction = createAction<{ + /** + * Unique identifier for the flyout (either the urlKey or 'memory') + */ + id: string; +}>(ActionType.closePreviewPanel); -export const previousPreviewPanelAction = createAction(ActionType.previousPreviewPanel); +export const previousPreviewPanelAction = createAction<{ + /** + * Unique identifier for the flyout (either the urlKey or 'memory') + */ + id: string; +}>(ActionType.previousPreviewPanel); export const urlChangedAction = createAction<{ + /** + * Panel to render in the right section + */ right?: FlyoutPanelProps; + /** + * Panel to render in the left section + */ left?: FlyoutPanelProps; + /** + * Panels to render in the preview section + */ preview?: FlyoutPanelProps; + /** + * Unique identifier for the flyout (either the urlKey or 'memory') + */ + id: string; }>(ActionType.urlChanged); diff --git a/packages/kbn-expandable-flyout/src/constants.ts b/packages/kbn-expandable-flyout/src/constants.ts index 4ee20ebb8e8f41..7e8236d0545f79 100644 --- a/packages/kbn-expandable-flyout/src/constants.ts +++ b/packages/kbn-expandable-flyout/src/constants.ts @@ -6,4 +6,7 @@ * Side Public License, v 1. */ -export const EXPANDABLE_FLYOUT_URL_KEY = 'eventFlyout' as const; +/** + * This is a reserved word that we use as an id when no urlKey is provided and we are in memory storage mode + */ +export const REDUX_ID_FOR_MEMORY_STORAGE = 'memory'; diff --git a/packages/kbn-expandable-flyout/src/context.tsx b/packages/kbn-expandable-flyout/src/context.tsx new file mode 100644 index 00000000000000..b7c75463776d9f --- /dev/null +++ b/packages/kbn-expandable-flyout/src/context.tsx @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { createContext, memo, useContext, useMemo } from 'react'; + +export interface ExpandableFlyoutContext { + /** + * Unique key to be used as url parameter to store the state of the flyout + */ + urlKey: string | undefined; +} + +export const ExpandableFlyoutContext = createContext( + undefined +); + +export interface ExpandableFlyoutContextProviderProps { + /** + * Unique key to be used as url parameter to store the state of the flyout + */ + urlKey: string | undefined; + /** + * React components to render + */ + children: React.ReactNode; +} + +/** + * Context used to share the value of the urlKey to the rest of the expandable flyout's code + */ +export const ExpandableFlyoutContextProvider = memo( + ({ urlKey, children }) => { + const contextValue = useMemo( + () => ({ + urlKey, + }), + [urlKey] + ); + + return ( + + {children} + + ); + } +); + +ExpandableFlyoutContextProvider.displayName = 'ExpandableFlyoutContextProvider'; + +export const useExpandableFlyoutContext = () => { + const context = useContext(ExpandableFlyoutContext); + if (context === undefined) { + throw new Error( + 'ExpandableFlyoutContext can only be used within ExpandableFlyoutContext provider' + ); + } + return context; +}; diff --git a/packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_api.ts b/packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_api.ts index 9f42870a31c0ff..dcfcf429e1086d 100644 --- a/packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_api.ts +++ b/packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_api.ts @@ -7,6 +7,8 @@ */ import { useCallback, useMemo } from 'react'; +import { REDUX_ID_FOR_MEMORY_STORAGE } from '../constants'; +import { useExpandableFlyoutContext } from '../context'; import { closeLeftPanelAction, closePanelsAction, @@ -29,6 +31,10 @@ export type { ExpandableFlyoutApi }; export const useExpandableFlyoutApi = () => { const dispatch = useDispatch(); + const { urlKey } = useExpandableFlyoutContext(); + // if no urlKey is provided, we are in memory storage mode and use the reserved word 'memory' + const id = urlKey || REDUX_ID_FOR_MEMORY_STORAGE; + const openPanels = useCallback( ({ right, @@ -38,39 +44,43 @@ export const useExpandableFlyoutApi = () => { right?: FlyoutPanelProps; left?: FlyoutPanelProps; preview?: FlyoutPanelProps; - }) => dispatch(openPanelsAction({ right, left, preview })), - [dispatch] + }) => dispatch(openPanelsAction({ right, left, preview, id })), + [dispatch, id] ); const openRightPanel = useCallback( - (panel: FlyoutPanelProps) => dispatch(openRightPanelAction(panel)), - [dispatch] + (panel: FlyoutPanelProps) => dispatch(openRightPanelAction({ right: panel, id })), + [dispatch, id] ); const openLeftPanel = useCallback( - (panel: FlyoutPanelProps) => dispatch(openLeftPanelAction(panel)), - [dispatch] + (panel: FlyoutPanelProps) => dispatch(openLeftPanelAction({ left: panel, id })), + [dispatch, id] ); const openPreviewPanel = useCallback( - (panel: FlyoutPanelProps) => dispatch(openPreviewPanelAction(panel)), - [dispatch] + (panel: FlyoutPanelProps) => dispatch(openPreviewPanelAction({ preview: panel, id })), + [dispatch, id] ); - const closeRightPanel = useCallback(() => dispatch(closeRightPanelAction()), [dispatch]); + const closeRightPanel = useCallback( + () => dispatch(closeRightPanelAction({ id })), + [dispatch, id] + ); - const closeLeftPanel = useCallback(() => dispatch(closeLeftPanelAction()), [dispatch]); + const closeLeftPanel = useCallback(() => dispatch(closeLeftPanelAction({ id })), [dispatch, id]); - const closePreviewPanel = useCallback(() => dispatch(closePreviewPanelAction()), [dispatch]); + const closePreviewPanel = useCallback( + () => dispatch(closePreviewPanelAction({ id })), + [dispatch, id] + ); const previousPreviewPanel = useCallback( - () => dispatch(previousPreviewPanelAction()), - [dispatch] + () => dispatch(previousPreviewPanelAction({ id })), + [dispatch, id] ); - const closePanels = useCallback(() => { - dispatch(closePanelsAction()); - }, [dispatch]); + const closePanels = useCallback(() => dispatch(closePanelsAction({ id })), [dispatch, id]); const api: ExpandableFlyoutApi = useMemo( () => ({ diff --git a/packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_state.ts b/packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_state.ts index 3ae9d69c4d0bc6..015dfcd38f456d 100644 --- a/packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_state.ts +++ b/packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_state.ts @@ -6,11 +6,16 @@ * Side Public License, v 1. */ -import { stateSelector, useSelector } from '../redux'; +import { REDUX_ID_FOR_MEMORY_STORAGE } from '../constants'; +import { useExpandableFlyoutContext } from '../context'; +import { selectPanelsById, useSelector } from '../redux'; /** - * This hook allows you to access the flyout state, read open panels and previews. + * This hook allows you to access the flyout state, read open right, left and preview panels. */ export const useExpandableFlyoutState = () => { - return useSelector(stateSelector); + const { urlKey } = useExpandableFlyoutContext(); + // if no urlKey is provided, we are in memory storage mode and use the reserved word 'memory' + const id = urlKey || REDUX_ID_FOR_MEMORY_STORAGE; + return useSelector(selectPanelsById(id)); }; diff --git a/packages/kbn-expandable-flyout/src/index.test.tsx b/packages/kbn-expandable-flyout/src/index.test.tsx index 0b8b62ce7187a4..d08a78c7067819 100644 --- a/packages/kbn-expandable-flyout/src/index.test.tsx +++ b/packages/kbn-expandable-flyout/src/index.test.tsx @@ -18,7 +18,9 @@ import { } from './components/test_ids'; import { type State } from './state'; import { TestProvider } from './test/provider'; +import { REDUX_ID_FOR_MEMORY_STORAGE } from './constants'; +const id = REDUX_ID_FOR_MEMORY_STORAGE; const registeredPanels: Panel[] = [ { key: 'key', @@ -28,14 +30,12 @@ const registeredPanels: Panel[] = [ describe('ExpandableFlyout', () => { it(`shouldn't render flyout if no panels`, () => { - const context = { - right: undefined, - left: undefined, - preview: [], - } as unknown as State; + const state: State = { + byId: {}, + }; const result = render( - + ); @@ -44,16 +44,20 @@ describe('ExpandableFlyout', () => { }); it('should render right section', () => { - const context = { - right: { - id: 'key', + const state = { + byId: { + [id]: { + right: { + id: 'key', + }, + left: undefined, + preview: undefined, + }, }, - left: {}, - preview: [], - } as unknown as State; + }; const { getByTestId } = render( - + ); @@ -62,16 +66,20 @@ describe('ExpandableFlyout', () => { }); it('should render left section', () => { - const context = { - right: {}, - left: { - id: 'key', + const state = { + byId: { + [id]: { + right: undefined, + left: { + id: 'key', + }, + preview: undefined, + }, }, - preview: [], - } as unknown as State; + }; const { getByTestId } = render( - + ); @@ -80,18 +88,22 @@ describe('ExpandableFlyout', () => { }); it('should render preview section', () => { - const context = { - right: {}, - left: {}, - preview: [ - { - id: 'key', + const state = { + byId: { + [id]: { + right: undefined, + left: undefined, + preview: [ + { + id: 'key', + }, + ], }, - ], - } as State; + }, + }; const { getByTestId } = render( - + ); diff --git a/packages/kbn-expandable-flyout/src/provider.test.tsx b/packages/kbn-expandable-flyout/src/provider.test.tsx new file mode 100644 index 00000000000000..c6246eff9fa32a --- /dev/null +++ b/packages/kbn-expandable-flyout/src/provider.test.tsx @@ -0,0 +1,105 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import { TestProvider } from './test/provider'; +import { UrlSynchronizer } from './provider'; +import * as actions from './actions'; +import { State } from './state'; +import { of } from 'rxjs'; + +const mockGet = jest.fn(); +const mockSet = jest.fn(); +const mockChange$ = jest.fn().mockReturnValue(of({})); +jest.mock('@kbn/kibana-utils-plugin/public'); +const { createKbnUrlStateStorage } = jest.requireMock('@kbn/kibana-utils-plugin/public'); + +const urlKey = 'urlKey'; + +describe('UrlSynchronizer', () => { + it(`should not dispatch any actions or update url if urlKey isn't passed`, () => { + const urlChangedAction = jest.spyOn(actions, 'urlChangedAction'); + + const initialState: State = { + byId: { + [urlKey]: { + right: { id: 'key1' }, + left: { id: 'key11' }, + preview: undefined, + }, + }, + needsSync: true, + }; + + render( + + + + ); + + expect(urlChangedAction).not.toHaveBeenCalled(); + expect(mockSet).not.toHaveBeenCalled(); + }); + + it('should update url if no panels exist', () => { + (createKbnUrlStateStorage as jest.Mock).mockReturnValue({ + get: mockGet, + set: mockSet, + change$: mockChange$, + }); + const initialState: State = { + byId: {}, + needsSync: true, + }; + + render( + + + + ); + + expect(mockSet).toHaveBeenCalledWith('urlKey', { + left: undefined, + right: undefined, + preview: undefined, + }); + }); + + it('should dispatch action and update url with the correct value', () => { + const urlChangedAction = jest.spyOn(actions, 'urlChangedAction'); + + (createKbnUrlStateStorage as jest.Mock).mockReturnValue({ + get: mockGet, + set: mockSet, + change$: mockChange$, + }); + const initialState: State = { + byId: { + [urlKey]: { + right: { id: 'key1' }, + left: { id: 'key2' }, + preview: undefined, + }, + }, + needsSync: true, + }; + + render( + + + + ); + + expect(urlChangedAction).toHaveBeenCalledWith({ + id: urlKey, + preview: undefined, + }); + expect(mockSet).toHaveBeenCalled(); + }); +}); diff --git a/packages/kbn-expandable-flyout/src/provider.tsx b/packages/kbn-expandable-flyout/src/provider.tsx index ba18bd189f6e43..d88df39ab61eb6 100644 --- a/packages/kbn-expandable-flyout/src/provider.tsx +++ b/packages/kbn-expandable-flyout/src/provider.tsx @@ -9,21 +9,20 @@ import { createKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; import React, { FC, PropsWithChildren, useEffect, useMemo } from 'react'; import { Provider as ReduxProvider } from 'react-redux'; - import { useHistory } from 'react-router-dom'; -import { State } from './state'; +import { ExpandableFlyoutContextProvider, useExpandableFlyoutContext } from './context'; +import { FlyoutState } from './state'; import { useExpandableFlyoutState } from './hooks/use_expandable_flyout_state'; -import { EXPANDABLE_FLYOUT_URL_KEY } from './constants'; -import { Context, store, useDispatch } from './redux'; +import { Context, selectNeedsSync, store, useDispatch, useSelector } from './redux'; import { urlChangedAction } from './actions'; -export type ExpandableFlyoutStorageMode = 'memory' | 'url'; - /** * Dispatches actions when url state changes and initializes the state when the app is loaded with flyout url parameters */ -const UrlSynchronizer = () => { - const state = useExpandableFlyoutState(); +export const UrlSynchronizer = () => { + const { urlKey } = useExpandableFlyoutContext(); + const panels = useExpandableFlyoutState(); + const needsSync = useSelector(selectNeedsSync()); const dispatch = useDispatch(); const history = useHistory(); @@ -39,56 +38,64 @@ const UrlSynchronizer = () => { ); useEffect(() => { - const currentValue = urlStorage.get(EXPANDABLE_FLYOUT_URL_KEY); + if (!urlKey) { + return; + } + + const currentValue = urlStorage.get(urlKey); // Dispatch current value to redux store as it does not happen automatically if (currentValue) { - dispatch(urlChangedAction({ ...currentValue, preview: currentValue?.preview[0] })); + dispatch( + urlChangedAction({ + ...currentValue, + preview: currentValue?.preview?.[0], + id: urlKey, + }) + ); } - const subscription = urlStorage.change$(EXPANDABLE_FLYOUT_URL_KEY).subscribe((value) => { - dispatch(urlChangedAction({ ...value, preview: value?.preview?.[0] })); + const subscription = urlStorage.change$(urlKey).subscribe((value) => { + dispatch(urlChangedAction({ ...value, preview: value?.preview?.[0], id: urlKey })); }); return () => subscription.unsubscribe(); - }, [dispatch, urlStorage]); + }, [dispatch, urlKey, urlStorage]); useEffect(() => { - const { needsSync, ...stateToSync } = state; - - if (needsSync) { - urlStorage.set(EXPANDABLE_FLYOUT_URL_KEY, stateToSync); + if (!needsSync || !panels || !urlKey) { + return; } - }, [urlStorage, state]); + + const { left, right, preview } = panels; + urlStorage.set(urlKey, { left, right, preview }); + }, [needsSync, panels, urlKey, urlStorage]); return null; }; interface ExpandableFlyoutProviderProps { /** - * This allows the user to choose how the flyout storage is handled. - * Url storage syncs current values straight to the browser query string. + * Unique key to be used as url parameter to store the state of the flyout. + * Providing this will save the state of the flyout in the url. + * The word `memory` is reserved, do NOT use it! */ - storage?: ExpandableFlyoutStorageMode; + urlKey?: string; } /** * Wrap your plugin with this context for the ExpandableFlyout React component. - * Storage property allows you to specify how the flyout state works internally. - * With "url", it will be persisted into url and thus allow for deep linking & will survive webpage reloads. - * "memory" is based on an isolated redux context. The state is saved internally to the package, which means it will not be - * persisted when sharing url or reloading browser pages. */ export const ExpandableFlyoutProvider: FC> = ({ children, - storage = 'url', + urlKey, }) => { return ( - - <> - {storage === 'url' ? : null} + + + {urlKey ? : null} {children} - - + + ); }; diff --git a/packages/kbn-expandable-flyout/src/reducer.test.ts b/packages/kbn-expandable-flyout/src/reducer.test.ts index db18fbee3e2d78..df03d9277f946b 100644 --- a/packages/kbn-expandable-flyout/src/reducer.test.ts +++ b/packages/kbn-expandable-flyout/src/reducer.test.ts @@ -21,6 +21,8 @@ import { previousPreviewPanelAction, } from './actions'; +const id1 = 'id1'; +const id2 = 'id2'; const rightPanel1: FlyoutPanelProps = { id: 'right1', path: { tab: 'tab' }, @@ -54,53 +56,109 @@ describe('reducer', () => { right: rightPanel1, left: leftPanel1, preview: previewPanel1, + id: id1, }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: leftPanel1, - right: rightPanel1, - preview: [previewPanel1], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, needsSync: true, }); }); it('should override all panels in the state', () => { const state: State = { - left: leftPanel1, - right: rightPanel1, - preview: [previewPanel1, { id: 'preview' }], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1, { id: 'preview' }], + }, + }, }; const action = openPanelsAction({ right: rightPanel2, left: leftPanel2, preview: previewPanel2, + id: id1, }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: leftPanel2, - right: rightPanel2, - preview: [previewPanel2], + byId: { + [id1]: { + left: leftPanel2, + right: rightPanel2, + preview: [previewPanel2], + }, + }, needsSync: true, }); }); it('should remove all panels despite only passing a single section ', () => { const state: State = { - left: leftPanel1, - right: rightPanel1, - preview: [previewPanel1], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, }; const action = openPanelsAction({ right: rightPanel2, + id: id1, }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: undefined, + byId: { + [id1]: { + left: undefined, + right: rightPanel2, + preview: undefined, + }, + }, + needsSync: true, + }); + }); + + it('should add panels to a new key', () => { + const state: State = { + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, + }; + const action = openPanelsAction({ right: rightPanel2, - preview: [], + id: id2, + }); + const newState: State = reducer(state, action); + + expect(newState).toEqual({ + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + [id2]: { + left: undefined, + right: rightPanel2, + preview: undefined, + }, + }, needsSync: true, }); }); @@ -109,30 +167,72 @@ describe('reducer', () => { describe('should handle openRightPanel action', () => { it('should add right panel to empty state', () => { const state: State = initialState; - const action = openRightPanelAction(rightPanel1); + const action = openRightPanelAction({ right: rightPanel1, id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: undefined, - right: rightPanel1, - preview: [], + byId: { + [id1]: { + left: undefined, + right: rightPanel1, + preview: undefined, + }, + }, needsSync: true, }); }); it('should replace right panel', () => { const state: State = { - left: leftPanel1, - right: rightPanel1, - preview: [previewPanel1], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, }; - const action = openRightPanelAction(rightPanel2); + const action = openRightPanelAction({ right: rightPanel2, id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: leftPanel1, - right: rightPanel2, - preview: [previewPanel1], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel2, + preview: [previewPanel1], + }, + }, + needsSync: true, + }); + }); + + it('should add right panel to a different key', () => { + const state: State = { + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, + }; + const action = openRightPanelAction({ right: rightPanel2, id: id2 }); + const newState: State = reducer(state, action); + + expect(newState).toEqual({ + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + [id2]: { + left: undefined, + right: rightPanel2, + preview: undefined, + }, + }, needsSync: true, }); }); @@ -141,30 +241,72 @@ describe('reducer', () => { describe('should handle openLeftPanel action', () => { it('should add left panel to empty state', () => { const state: State = initialState; - const action = openLeftPanelAction(leftPanel1); + const action = openLeftPanelAction({ left: leftPanel1, id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: leftPanel1, - right: undefined, - preview: [], + byId: { + [id1]: { + left: leftPanel1, + right: undefined, + preview: undefined, + }, + }, needsSync: true, }); }); it('should replace only left panel', () => { const state: State = { - left: leftPanel1, - right: rightPanel1, - preview: [previewPanel1], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, }; - const action = openLeftPanelAction(leftPanel2); + const action = openLeftPanelAction({ left: leftPanel2, id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: leftPanel2, - right: rightPanel1, - preview: [previewPanel1], + byId: { + [id1]: { + left: leftPanel2, + right: rightPanel1, + preview: [previewPanel1], + }, + }, + needsSync: true, + }); + }); + + it('should add left panel to a different key', () => { + const state: State = { + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, + }; + const action = openLeftPanelAction({ left: leftPanel2, id: id2 }); + const newState: State = reducer(state, action); + + expect(newState).toEqual({ + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + [id2]: { + left: leftPanel2, + right: undefined, + preview: undefined, + }, + }, needsSync: true, }); }); @@ -173,30 +315,72 @@ describe('reducer', () => { describe('should handle openPreviewPanel action', () => { it('should add preview panel to empty state', () => { const state: State = initialState; - const action = openPreviewPanelAction(previewPanel1); + const action = openPreviewPanelAction({ preview: previewPanel1, id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: undefined, - right: undefined, - preview: [previewPanel1], + byId: { + [id1]: { + left: undefined, + right: undefined, + preview: [previewPanel1], + }, + }, needsSync: true, }); }); it('should add preview panel to the list of preview panels', () => { const state: State = { - left: leftPanel1, - right: rightPanel1, - preview: [previewPanel1], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, }; - const action = openPreviewPanelAction(previewPanel2); + const action = openPreviewPanelAction({ preview: previewPanel2, id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: leftPanel1, - right: rightPanel1, - preview: [previewPanel1, previewPanel2], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1, previewPanel2], + }, + }, + needsSync: true, + }); + }); + + it('should add preview panel to a different key', () => { + const state: State = { + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, + }; + const action = openPreviewPanelAction({ preview: previewPanel2, id: id2 }); + const newState: State = reducer(state, action); + + expect(newState).toEqual({ + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + [id2]: { + left: undefined, + right: undefined, + preview: [previewPanel2], + }, + }, needsSync: true, }); }); @@ -205,7 +389,7 @@ describe('reducer', () => { describe('should handle closeRightPanel action', () => { it('should return empty state when removing right panel from empty state', () => { const state: State = initialState; - const action = closeRightPanelAction(); + const action = closeRightPanelAction({ id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ ...state, needsSync: true }); @@ -213,31 +397,68 @@ describe('reducer', () => { it(`should return unmodified state when removing right panel when no right panel exist`, () => { const state: State = { - left: leftPanel1, - right: undefined, - preview: [previewPanel1], - needsSync: true, + byId: { + [id1]: { + left: leftPanel1, + right: undefined, + preview: [previewPanel1], + }, + }, }; - const action = closeRightPanelAction(); + const action = closeRightPanelAction({ id: id1 }); const newState: State = reducer(state, action); - expect(newState).toEqual(state); + expect(newState).toEqual({ ...state, needsSync: true }); }); it('should remove right panel', () => { const state: State = { - left: leftPanel1, - right: rightPanel1, - preview: [previewPanel1], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, }; - const action = closeRightPanelAction(); + const action = closeRightPanelAction({ id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: leftPanel1, - right: undefined, - preview: [previewPanel1], + byId: { + [id1]: { + left: leftPanel1, + right: undefined, + preview: [previewPanel1], + }, + }, + needsSync: true, + }); + }); + + it('should not remove right panel for a different key', () => { + const state: State = { + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, + }; + const action = closeRightPanelAction({ id: id2 }); + + const newState: State = reducer(state, action); + + expect(newState).toEqual({ + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, needsSync: true, }); }); @@ -246,7 +467,7 @@ describe('reducer', () => { describe('should handle closeLeftPanel action', () => { it('should return empty state when removing left panel on empty state', () => { const state: State = initialState; - const action = closeLeftPanelAction(); + const action = closeLeftPanelAction({ id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ ...state, needsSync: true }); @@ -254,30 +475,66 @@ describe('reducer', () => { it(`should return unmodified state when removing left panel when no left panel exist`, () => { const state: State = { - left: undefined, - right: rightPanel1, - preview: [], - needsSync: true, + byId: { + [id1]: { + left: undefined, + right: rightPanel1, + preview: [previewPanel1], + }, + }, }; - const action = closeLeftPanelAction(); + const action = closeLeftPanelAction({ id: id1 }); const newState: State = reducer(state, action); - expect(newState).toEqual(state); + expect(newState).toEqual({ ...state, needsSync: true }); }); it('should remove left panel', () => { const state: State = { - left: leftPanel1, - right: rightPanel1, - preview: [previewPanel1], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, }; - const action = closeLeftPanelAction(); + const action = closeLeftPanelAction({ id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: undefined, - right: rightPanel1, - preview: [previewPanel1], + byId: { + [id1]: { + left: undefined, + right: rightPanel1, + preview: [previewPanel1], + }, + }, + needsSync: true, + }); + }); + + it('should not remove left panel for a different key', () => { + const state: State = { + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, + }; + const action = closeLeftPanelAction({ id: id2 }); + const newState: State = reducer(state, action); + + expect(newState).toEqual({ + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, needsSync: true, }); }); @@ -285,20 +542,24 @@ describe('reducer', () => { describe('should handle closePreviewPanel action', () => { it('should return empty state when removing preview panel on empty state', () => { - const state: State = { ...initialState, needsSync: true }; - const action = closePreviewPanelAction(); + const state: State = initialState; + const action = closePreviewPanelAction({ id: id1 }); const newState: State = reducer(state, action); - expect(newState).toEqual(state); + expect(newState).toEqual({ ...state, needsSync: true }); }); it(`should return unmodified state when removing preview panel when no preview panel exist`, () => { const state: State = { - left: leftPanel1, - right: rightPanel1, - preview: [], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: undefined, + }, + }, }; - const action = closePreviewPanelAction(); + const action = closePreviewPanelAction({ id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ ...state, needsSync: true }); @@ -306,17 +567,50 @@ describe('reducer', () => { it('should remove all preview panels', () => { const state: State = { - left: rightPanel1, - right: leftPanel1, - preview: [previewPanel1, previewPanel2], + byId: { + [id1]: { + left: rightPanel1, + right: leftPanel1, + preview: [previewPanel1, previewPanel2], + }, + }, + }; + const action = closePreviewPanelAction({ id: id1 }); + const newState: State = reducer(state, action); + + expect(newState).toEqual({ + byId: { + [id1]: { + left: rightPanel1, + right: leftPanel1, + preview: undefined, + }, + }, + needsSync: true, + }); + }); + + it('should not remove preview panels for a different key', () => { + const state: State = { + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, }; - const action = closePreviewPanelAction(); + const action = closePreviewPanelAction({ id: id2 }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: rightPanel1, - right: leftPanel1, - preview: [], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, needsSync: true, }); }); @@ -325,7 +619,7 @@ describe('reducer', () => { describe('should handle previousPreviewPanel action', () => { it('should return empty state when previous preview panel on an empty state', () => { const state: State = initialState; - const action = previousPreviewPanelAction(); + const action = previousPreviewPanelAction({ id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ ...initialState, needsSync: true }); @@ -333,30 +627,66 @@ describe('reducer', () => { it(`should return unmodified state when previous preview panel when no preview panel exist`, () => { const state: State = { - left: leftPanel1, - right: rightPanel1, - preview: [], - needsSync: true, + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: undefined, + }, + }, }; - const action = previousPreviewPanelAction(); + const action = previousPreviewPanelAction({ id: id1 }); const newState: State = reducer(state, action); - expect(newState).toEqual(state); + expect(newState).toEqual({ ...state, needsSync: true }); }); it('should remove only last preview panel', () => { const state: State = { - left: leftPanel1, - right: rightPanel1, - preview: [previewPanel1, previewPanel2], + byId: { + [id1]: { + left: rightPanel1, + right: leftPanel1, + preview: [previewPanel1, previewPanel2], + }, + }, }; - const action = previousPreviewPanelAction(); + const action = previousPreviewPanelAction({ id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: leftPanel1, - right: rightPanel1, - preview: [previewPanel1], + byId: { + [id1]: { + left: rightPanel1, + right: leftPanel1, + preview: [previewPanel1], + }, + }, + needsSync: true, + }); + }); + + it('should not remove the last preview panel for a different key', () => { + const state: State = { + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, + }; + const action = previousPreviewPanelAction({ id: id2 }); + const newState: State = reducer(state, action); + + expect(newState).toEqual({ + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, needsSync: true, }); }); @@ -365,7 +695,7 @@ describe('reducer', () => { describe('should handle closeFlyout action', () => { it('should return empty state when closing flyout on an empty state', () => { const state: State = initialState; - const action = closePanelsAction(); + const action = closePanelsAction({ id: id1 }); const newState: State = reducer(state, action); expect(newState).toEqual({ ...initialState, needsSync: true }); @@ -373,17 +703,50 @@ describe('reducer', () => { it('should remove all panels', () => { const state: State = { - left: leftPanel1, - right: rightPanel1, - preview: [previewPanel1], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, + }; + const action = closePanelsAction({ id: id1 }); + const newState: State = reducer(state, action); + + expect(newState).toEqual({ + byId: { + [id1]: { + left: undefined, + right: undefined, + preview: undefined, + }, + }, + needsSync: true, + }); + }); + + it('should not remove panels for a different key', () => { + const state: State = { + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, }; - const action = closePanelsAction(); + const action = closePanelsAction({ id: id2 }); const newState: State = reducer(state, action); expect(newState).toEqual({ - left: undefined, - right: undefined, - preview: [], + byId: { + [id1]: { + left: leftPanel1, + right: rightPanel1, + preview: [previewPanel1], + }, + }, needsSync: true, }); }); diff --git a/packages/kbn-expandable-flyout/src/reducer.ts b/packages/kbn-expandable-flyout/src/reducer.ts index 198f99d2785a63..617ad5e3a7c952 100644 --- a/packages/kbn-expandable-flyout/src/reducer.ts +++ b/packages/kbn-expandable-flyout/src/reducer.ts @@ -22,61 +22,123 @@ import { import { initialState } from './state'; export const reducer = createReducer(initialState, (builder) => { - builder.addCase(openPanelsAction, (state, { payload: { preview, left, right } }) => { - state.preview = preview ? [preview] : []; - state.right = right; - state.left = left; + builder.addCase(openPanelsAction, (state, { payload: { preview, left, right, id } }) => { + if (id in state.byId) { + state.byId[id].right = right; + state.byId[id].left = left; + state.byId[id].preview = preview ? [preview] : undefined; + } else { + state.byId[id] = { + left, + right, + preview: preview ? [preview] : undefined, + }; + } + state.needsSync = true; }); - builder.addCase(openLeftPanelAction, (state, { payload }) => { - state.left = payload; + builder.addCase(openLeftPanelAction, (state, { payload: { left, id } }) => { + if (id in state.byId) { + state.byId[id].left = left; + } else { + state.byId[id] = { + left, + right: undefined, + preview: undefined, + }; + } + state.needsSync = true; }); - builder.addCase(openRightPanelAction, (state, { payload }) => { - state.right = payload; + builder.addCase(openRightPanelAction, (state, { payload: { right, id } }) => { + if (id in state.byId) { + state.byId[id].right = right; + } else { + state.byId[id] = { + right, + left: undefined, + preview: undefined, + }; + } + state.needsSync = true; }); - builder.addCase(openPreviewPanelAction, (state, { payload }) => { - state.preview.push(payload); + builder.addCase(openPreviewPanelAction, (state, { payload: { preview, id } }) => { + if (id in state.byId) { + if (state.byId[id].preview) { + state.byId[id].preview?.push(preview); + } else { + state.byId[id].preview = preview ? [preview] : undefined; + } + } else { + state.byId[id] = { + right: undefined, + left: undefined, + preview: preview ? [preview] : undefined, + }; + } + state.needsSync = true; }); - builder.addCase(previousPreviewPanelAction, (state) => { - state.preview.pop(); + builder.addCase(previousPreviewPanelAction, (state, { payload: { id } }) => { + if (id in state.byId) { + state.byId[id].preview?.pop(); + } + state.needsSync = true; }); - builder.addCase(closePanelsAction, (state) => { - state.preview = []; - state.right = undefined; - state.left = undefined; + builder.addCase(closePanelsAction, (state, { payload: { id } }) => { + if (id in state.byId) { + state.byId[id].right = undefined; + state.byId[id].left = undefined; + state.byId[id].preview = undefined; + } + state.needsSync = true; }); - builder.addCase(closeLeftPanelAction, (state) => { - state.left = undefined; + builder.addCase(closeLeftPanelAction, (state, { payload: { id } }) => { + if (id in state.byId) { + state.byId[id].left = undefined; + } + state.needsSync = true; }); - builder.addCase(closeRightPanelAction, (state) => { - state.right = undefined; + builder.addCase(closeRightPanelAction, (state, { payload: { id } }) => { + if (id in state.byId) { + state.byId[id].right = undefined; + } + state.needsSync = true; }); - builder.addCase(closePreviewPanelAction, (state) => { - state.preview = []; + builder.addCase(closePreviewPanelAction, (state, { payload: { id } }) => { + if (id in state.byId) { + state.byId[id].preview = undefined; + } + state.needsSync = true; }); - builder.addCase(urlChangedAction, (state, { payload: { preview, left, right } }) => { - state.needsSync = false; - state.preview = preview ? [preview] : []; - state.left = left; - state.right = right; + builder.addCase(urlChangedAction, (state, { payload: { preview, left, right, id } }) => { + if (id in state.byId) { + state.byId[id].right = right; + state.byId[id].left = left; + state.byId[id].preview = preview ? [preview] : undefined; + } else { + state.byId[id] = { + right, + left, + preview: preview ? [preview] : undefined, + }; + } - return state; + state.needsSync = false; }); }); diff --git a/packages/kbn-expandable-flyout/src/redux.ts b/packages/kbn-expandable-flyout/src/redux.ts index d1f9d63c8a1a78..879e812ebcbeac 100644 --- a/packages/kbn-expandable-flyout/src/redux.ts +++ b/packages/kbn-expandable-flyout/src/redux.ts @@ -9,6 +9,7 @@ import { createContext } from 'react'; import { createDispatchHook, createSelectorHook, ReactReduxContextValue } from 'react-redux'; import { configureStore } from '@reduxjs/toolkit'; +import { createSelector } from 'reselect'; import { reducer } from './reducer'; import { initialState, State } from './state'; @@ -26,4 +27,9 @@ export const Context = createContext>({ export const useDispatch = createDispatchHook(Context); export const useSelector = createSelectorHook(Context); -export const stateSelector = (state: State) => state; +const stateSelector = (state: State) => state; + +export const selectPanelsById = (id: string) => + createSelector(stateSelector, (state) => state.byId[id] || {}); + +export const selectNeedsSync = () => createSelector(stateSelector, (state) => state.needsSync); diff --git a/packages/kbn-expandable-flyout/src/state.ts b/packages/kbn-expandable-flyout/src/state.ts index 2724194759b2b0..fa2be0dd103cb4 100644 --- a/packages/kbn-expandable-flyout/src/state.ts +++ b/packages/kbn-expandable-flyout/src/state.ts @@ -8,7 +8,7 @@ import { FlyoutPanelProps } from './types'; -export interface State { +export interface FlyoutState { /** * Panel to render in the left section */ @@ -20,8 +20,16 @@ export interface State { /** * Panels to render in the preview section */ - preview: FlyoutPanelProps[]; + preview: FlyoutPanelProps[] | undefined; +} +export interface State { + /** + * Store the panels for multiple flyouts + */ + byId: { + [id: string]: FlyoutState; + }; /** * Is the flyout in sync with external storage (eg. url)? * This value can be used in useEffect for example, to control whether we should @@ -31,8 +39,6 @@ export interface State { } export const initialState: State = { - left: undefined, - right: undefined, - preview: [], + byId: {}, needsSync: false, }; diff --git a/packages/kbn-expandable-flyout/src/test/provider.tsx b/packages/kbn-expandable-flyout/src/test/provider.tsx index 448b36e0b3d305..896b563056206b 100644 --- a/packages/kbn-expandable-flyout/src/test/provider.tsx +++ b/packages/kbn-expandable-flyout/src/test/provider.tsx @@ -9,17 +9,20 @@ import { Provider as ReduxProvider } from 'react-redux'; import { configureStore } from '@reduxjs/toolkit'; import React, { FC, PropsWithChildren } from 'react'; +import { ExpandableFlyoutContextProvider } from '../context'; import { reducer } from '../reducer'; import { Context } from '../redux'; import { initialState, State } from '../state'; interface TestProviderProps { state?: State; + urlKey?: string; } export const TestProvider: FC> = ({ children, state = initialState, + urlKey, }) => { const store = configureStore({ reducer, @@ -29,8 +32,10 @@ export const TestProvider: FC> = ({ }); return ( - - {children} - + + + {children} + + ); }; diff --git a/x-pack/plugins/security_solution/public/app/home/template_wrapper/index.tsx b/x-pack/plugins/security_solution/public/app/home/template_wrapper/index.tsx index 17d482ff4c21db..5213a24172357a 100644 --- a/x-pack/plugins/security_solution/public/app/home/template_wrapper/index.tsx +++ b/x-pack/plugins/security_solution/public/app/home/template_wrapper/index.tsx @@ -12,6 +12,7 @@ import { IS_DRAGGING_CLASS_NAME } from '@kbn/securitysolution-t-grid'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import type { KibanaPageTemplateProps } from '@kbn/shared-ux-page-kibana-template'; import { ExpandableFlyoutProvider } from '@kbn/expandable-flyout'; +import { EXPANDABLE_FLYOUT_URL_KEY } from '../../../common/hooks/use_url_state'; import { SecuritySolutionFlyout } from '../../../flyout'; import { useSecuritySolutionNavigation } from '../../../common/components/navigation/use_security_solution_navigation'; import { TimelineId } from '../../../../common/types/timeline'; @@ -67,7 +68,7 @@ export const SecuritySolutionTemplateWrapper: React.FC + { useSyncGlobalQueryString(); useInitSearchBarFromUrlParams(); From 90dbc86732e51be7311d2e5f3e11681b045f5ac5 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Thu, 15 Feb 2024 19:09:48 -0800 Subject: [PATCH 27/40] [OAS] Add alert_delay alerting rule option for Stack and Observability rules (#176941) --- .../alerting/docs/openapi/bundled.json | 83 +++++++++++++++++++ .../alerting/docs/openapi/bundled.yaml | 56 +++++++++++++ .../create_index_threshold_rule_request.yaml | 2 + .../create_index_threshold_rule_response.yaml | 2 + .../components/schemas/alert_delay.yaml | 9 ++ ..._anomaly_detection_alert_rule_request.yaml | 2 + ...ly_detection_jobs_health_rule_request.yaml | 2 + .../create_apm_anomaly_rule_request.yaml | 2 + .../create_apm_error_count_rule_request.yaml | 2 + ...apm_transaction_duration_rule_request.yaml | 2 + ...m_transaction_error_rate_rule_request.yaml | 2 + .../schemas/create_es_query_rule_request.yaml | 2 + .../create_geo_containment_rule_request.yaml | 2 + .../create_index_threshold_rule_request.yaml | 2 + .../create_infra_inventory_rule_request.yaml | 2 + ...ate_infra_metric_anomaly_rule_request.yaml | 2 + ...e_infra_metric_threshold_rule_request.yaml | 2 + .../create_log_threshold_rule_request.yaml | 2 + .../create_slo_burn_rate_rule_request.yaml | 2 + ...ynthetics_monitor_status_rule_request.yaml | 2 + ..._uptime_duration_anomaly_rule_request.yaml | 2 + ...s_uptime_tls_certificate_rule_request.yaml | 2 + .../create_transform_health_rule_request.yaml | 2 + ...te_uptime_monitor_status_rule_request.yaml | 2 + .../schemas/rule_response_properties.yaml | 2 + .../schemas/update_rule_request.yaml | 2 + 26 files changed, 194 insertions(+) create mode 100644 x-pack/plugins/alerting/docs/openapi/components/schemas/alert_delay.yaml diff --git a/x-pack/plugins/alerting/docs/openapi/bundled.json b/x-pack/plugins/alerting/docs/openapi/bundled.json index 6092bfc5bf60c8..71807860d383a5 100644 --- a/x-pack/plugins/alerting/docs/openapi/bundled.json +++ b/x-pack/plugins/alerting/docs/openapi/bundled.json @@ -2592,6 +2592,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -2642,6 +2645,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -2692,6 +2698,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -2740,6 +2749,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -2788,6 +2800,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -2836,6 +2851,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -2884,6 +2902,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -2932,6 +2953,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -2982,6 +3006,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -3030,6 +3057,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -3077,6 +3107,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -3127,6 +3160,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -3225,6 +3261,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -4322,6 +4361,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -4370,6 +4412,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -4420,6 +4465,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -4517,6 +4565,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -4567,6 +4618,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -4617,6 +4671,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "consumer": { "$ref": "#/components/schemas/consumer" }, @@ -4872,6 +4929,20 @@ } } }, + "alert_delay": { + "type": "object", + "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", + "required": [ + "active" + ], + "properties": { + "active": { + "type": "number", + "description": "The number of consecutive runs that must meet the rule conditions.", + "example": 3 + } + } + }, "consumer": { "type": "string", "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.\n" @@ -6566,6 +6637,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "api_key_created_by_user": { "type": "boolean", "description": "Indicates whether the API key that is associated with the rule was created by the user.", @@ -6857,6 +6931,9 @@ "actions": { "$ref": "#/components/schemas/actions" }, + "alert_delay": { + "$ref": "#/components/schemas/alert_delay" + }, "name": { "type": "string", "description": "The name of the rule.", @@ -7254,6 +7331,9 @@ } } ], + "alert_delay": { + "active": 3 + }, "consumer": "alerts", "name": "my rule", "params": { @@ -7500,6 +7580,9 @@ } } ], + "alert_delay": { + "active": 3 + }, "api_key_created_by_user": false, "api_key_owner": "elastic", "consumer": "alerts", diff --git a/x-pack/plugins/alerting/docs/openapi/bundled.yaml b/x-pack/plugins/alerting/docs/openapi/bundled.yaml index f847686a2ccedf..e029e8550020f2 100644 --- a/x-pack/plugins/alerting/docs/openapi/bundled.yaml +++ b/x-pack/plugins/alerting/docs/openapi/bundled.yaml @@ -1691,6 +1691,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -1728,6 +1730,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -1764,6 +1768,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -1798,6 +1804,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -1832,6 +1840,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -1866,6 +1876,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -1901,6 +1913,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -1936,6 +1950,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -1972,6 +1988,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -2007,6 +2025,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -2040,6 +2060,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -2077,6 +2099,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -2147,6 +2171,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -2943,6 +2969,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -2977,6 +3005,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -3014,6 +3044,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -3084,6 +3116,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -3121,6 +3155,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -3157,6 +3193,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' consumer: $ref: '#/components/schemas/consumer' enabled: @@ -3341,6 +3379,16 @@ components: description: A universally unique identifier (UUID) for the action. examples: - 1c7a1280-f28c-4e06-96b2-e4e5f05d1d61 + alert_delay: + type: object + description: Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions. + required: + - active + properties: + active: + type: number + description: The number of consecutive runs that must meet the rule conditions. + example: 3 consumer: type: string description: | @@ -4526,6 +4574,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' api_key_created_by_user: type: boolean description: Indicates whether the API key that is associated with the rule was created by the user. @@ -4729,6 +4779,8 @@ components: properties: actions: $ref: '#/components/schemas/actions' + alert_delay: + $ref: '#/components/schemas/alert_delay' name: type: string description: The name of the rule. @@ -5018,6 +5070,8 @@ components: - Value: {{context.value}} - Conditions Met: {{context.conditions}} over {{rule.params.timeWindowSize}}{{rule.params.timeWindowUnit}} - Timestamp: {{context.date}} + alert_delay: + active: 3 consumer: alerts name: my rule params: @@ -5223,6 +5277,8 @@ components: - Value: {{context.value}} - Conditions Met: {{context.conditions}} over {{rule.params.timeWindowSize}}{{rule.params.timeWindowUnit}} - Timestamp: {{context.date}} + alert_delay: + active: 3 api_key_created_by_user: false api_key_owner: elastic consumer: alerts diff --git a/x-pack/plugins/alerting/docs/openapi/components/examples/create_index_threshold_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/examples/create_index_threshold_rule_request.yaml index 801d298c5f9222..53859628f57a17 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/examples/create_index_threshold_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/examples/create_index_threshold_rule_request.yaml @@ -9,6 +9,8 @@ value: params: level: info message: "Rule '{{rule.name}}' is active for group '{{context.group}}':\n\n- Value: {{context.value}}\n- Conditions Met: {{context.conditions}} over {{rule.params.timeWindowSize}}{{rule.params.timeWindowUnit}}\n- Timestamp: {{context.date}}" + alert_delay: + active: 3 consumer: alerts name: my rule params: diff --git a/x-pack/plugins/alerting/docs/openapi/components/examples/create_index_threshold_rule_response.yaml b/x-pack/plugins/alerting/docs/openapi/components/examples/create_index_threshold_rule_response.yaml index cf755e08d3bfdd..da172f5df9ff7a 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/examples/create_index_threshold_rule_response.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/examples/create_index_threshold_rule_response.yaml @@ -12,6 +12,8 @@ value: params: level: info message: "Rule {{rule.name}} is active for group {{context.group} :\n\n- Value: {{context.value}}\n- Conditions Met: {{context.conditions}} over {{rule.params.timeWindowSize}}{{rule.params.timeWindowUnit}}\n- Timestamp: {{context.date}}" + alert_delay: + active: 3 api_key_created_by_user: false api_key_owner: elastic consumer: alerts diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/alert_delay.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/alert_delay.yaml new file mode 100644 index 00000000000000..45fe6f6f0eb5b9 --- /dev/null +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/alert_delay.yaml @@ -0,0 +1,9 @@ +type: object +description: Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions. +required: + - active +properties: + active: + type: number + description: The number of consecutive runs that must meet the rule conditions. + example: 3 \ No newline at end of file diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_anomaly_detection_alert_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_anomaly_detection_alert_rule_request.yaml index d4bdb712f634da..27db1b6a72a53a 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_anomaly_detection_alert_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_anomaly_detection_alert_rule_request.yaml @@ -11,6 +11,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_anomaly_detection_jobs_health_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_anomaly_detection_jobs_health_rule_request.yaml index d9fd3b3a63ddb7..01a6737bb77151 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_anomaly_detection_jobs_health_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_anomaly_detection_jobs_health_rule_request.yaml @@ -11,6 +11,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_anomaly_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_anomaly_rule_request.yaml index 7b091dc1abfd26..60bb44cad45dbf 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_anomaly_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_anomaly_rule_request.yaml @@ -10,6 +10,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_error_count_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_error_count_rule_request.yaml index 9bbe46301ceeb7..482aa0e289e823 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_error_count_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_error_count_rule_request.yaml @@ -10,6 +10,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_transaction_duration_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_transaction_duration_rule_request.yaml index eaff2c48ffbfc9..f6757b188ee2c3 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_transaction_duration_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_transaction_duration_rule_request.yaml @@ -10,6 +10,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_transaction_error_rate_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_transaction_error_rate_rule_request.yaml index 505e5b69f57fd4..239ded7c3cd85a 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_transaction_error_rate_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_apm_transaction_error_rate_rule_request.yaml @@ -10,6 +10,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_es_query_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_es_query_rule_request.yaml index d8ca95e1e482d6..b3f86de78972b9 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_es_query_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_es_query_rule_request.yaml @@ -11,6 +11,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_geo_containment_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_geo_containment_rule_request.yaml index ed30fc5064f1b7..bd875097a06532 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_geo_containment_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_geo_containment_rule_request.yaml @@ -12,6 +12,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_index_threshold_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_index_threshold_rule_request.yaml index d97f2c0f78e5ce..b7fd292e5c4e8b 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_index_threshold_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_index_threshold_rule_request.yaml @@ -11,6 +11,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_infra_inventory_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_infra_inventory_rule_request.yaml index ddef0a3e4cdd1c..f5b967c559f817 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_infra_inventory_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_infra_inventory_rule_request.yaml @@ -11,6 +11,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_infra_metric_anomaly_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_infra_metric_anomaly_rule_request.yaml index 4c80967fbe26a8..0beda5b40555e9 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_infra_metric_anomaly_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_infra_metric_anomaly_rule_request.yaml @@ -9,6 +9,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_infra_metric_threshold_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_infra_metric_threshold_rule_request.yaml index 775015ca6006e6..8d37ab9defc6ee 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_infra_metric_threshold_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_infra_metric_threshold_rule_request.yaml @@ -11,6 +11,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_log_threshold_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_log_threshold_rule_request.yaml index ce4baaf78ac686..35aa5805ad9674 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_log_threshold_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_log_threshold_rule_request.yaml @@ -10,6 +10,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_slo_burn_rate_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_slo_burn_rate_rule_request.yaml index dcb6e5932a60db..e3a7467109600b 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_slo_burn_rate_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_slo_burn_rate_rule_request.yaml @@ -14,6 +14,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_synthetics_monitor_status_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_synthetics_monitor_status_rule_request.yaml index d392630259d198..4c79b44a3d869c 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_synthetics_monitor_status_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_synthetics_monitor_status_rule_request.yaml @@ -10,6 +10,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_synthetics_uptime_duration_anomaly_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_synthetics_uptime_duration_anomaly_rule_request.yaml index 76fb45e99bd9ae..e9746f14f0ecf9 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_synthetics_uptime_duration_anomaly_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_synthetics_uptime_duration_anomaly_rule_request.yaml @@ -12,6 +12,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_synthetics_uptime_tls_certificate_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_synthetics_uptime_tls_certificate_rule_request.yaml index 883342ce74619a..8c71961b4961d7 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_synthetics_uptime_tls_certificate_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_synthetics_uptime_tls_certificate_rule_request.yaml @@ -11,6 +11,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_transform_health_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_transform_health_rule_request.yaml index ebe92de8c5cf2e..a655db451ec84d 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_transform_health_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_transform_health_rule_request.yaml @@ -11,6 +11,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_uptime_monitor_status_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_uptime_monitor_status_rule_request.yaml index 95d8efd6d1c17f..70f3b5b8b05ad2 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/create_uptime_monitor_status_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/create_uptime_monitor_status_rule_request.yaml @@ -10,6 +10,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' consumer: $ref: 'consumer.yaml' enabled: diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/rule_response_properties.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/rule_response_properties.yaml index 51310c87b6c5c4..e48d316506ee0d 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/rule_response_properties.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/rule_response_properties.yaml @@ -22,6 +22,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' api_key_created_by_user: type: boolean description: Indicates whether the API key that is associated with the rule was created by the user. diff --git a/x-pack/plugins/alerting/docs/openapi/components/schemas/update_rule_request.yaml b/x-pack/plugins/alerting/docs/openapi/components/schemas/update_rule_request.yaml index 63293f76ca710b..fb6bd33aa81da6 100644 --- a/x-pack/plugins/alerting/docs/openapi/components/schemas/update_rule_request.yaml +++ b/x-pack/plugins/alerting/docs/openapi/components/schemas/update_rule_request.yaml @@ -9,6 +9,8 @@ required: properties: actions: $ref: 'actions.yaml' + alert_delay: + $ref: 'alert_delay.yaml' name: type: string description: The name of the rule. From c35dcfe41389ad06ede6592df73b3a3e15ac00ff Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Fri, 16 Feb 2024 00:58:04 -0500 Subject: [PATCH 28/40] [api-docs] 2024-02-16 Daily api_docs build (#177112) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/615 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_observability.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_manager.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 4 +- api_docs/deprecations_by_plugin.mdx | 85 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_utils.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- ...kbn_core_saved_objects_common.devdocs.json | 4 + api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- ...kbn_core_saved_objects_server.devdocs.json | 842 +++++++++++++++++- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- ...kbn_core_user_settings_server_internal.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.devdocs.json | 124 +-- api_docs/kbn_expandable_flyout.mdx | 7 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_library.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_grouping.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_explorer.devdocs.json | 158 ++++ api_docs/logs_explorer.mdx | 4 +- 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_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 | 10 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.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/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.devdocs.json | 49 + api_docs/task_manager.mdx | 4 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/text_based_languages.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.devdocs.json | 4 +- 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 +- 657 files changed, 1822 insertions(+), 763 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 9ade691a4c7509..0b7c1a124e724b 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-02-15 +date: 2024-02-16 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 69421addbaa724..ec2a51e46ea779 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_observability.mdx b/api_docs/ai_assistant_management_observability.mdx index b0118d0d5ff9d5..7cfd4aea5c33fb 100644 --- a/api_docs/ai_assistant_management_observability.mdx +++ b/api_docs/ai_assistant_management_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementObservability title: "aiAssistantManagementObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementObservability plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementObservability'] --- import aiAssistantManagementObservabilityObj from './ai_assistant_management_observability.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index 294c3c829bf56f..38336715f14bf5 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-02-15 +date: 2024-02-16 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 8ec278b67b8c24..d0fda14c342a07 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-02-15 +date: 2024-02-16 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 628c3e30cc045c..d6c85c577dc518 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-02-15 +date: 2024-02-16 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 db7a8da3b1b0b7..c731b3700983ae 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-02-15 +date: 2024-02-16 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 1166054af8c0ef..7f7c58080f95b6 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 3645e7207af30e..510092a989adc6 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 8af648312c170a..b3ceef1a15e8d5 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-02-15 +date: 2024-02-16 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 93de6031b5e1b4..cc802272bc91ff 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-02-15 +date: 2024-02-16 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 47ce0b27773f0d..2870a3e251071f 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-02-15 +date: 2024-02-16 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 ce97478dca75e2..784b5897b5e134 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-02-15 +date: 2024-02-16 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 b252d6b7abf25d..b8f192b4dca89b 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-02-15 +date: 2024-02-16 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 525adde7d20d38..d0b411b9d05a23 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-02-15 +date: 2024-02-16 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 2f4dcb3e3ba938..13df73a0ee97ca 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-02-15 +date: 2024-02-16 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 69730df706b19e..c18b85ea8def76 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index 3b2bef15963edc..cfdbd5532be876 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index ee2ac78d5b4f88..f734c924ea4a27 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-02-15 +date: 2024-02-16 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 0f32864ee83793..22ceb3647e7341 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-02-15 +date: 2024-02-16 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 3966cf7cdd3eff..a8157989afa822 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-02-15 +date: 2024-02-16 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 8abfc61a636bd8..d579d50f9a3d37 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-02-15 +date: 2024-02-16 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 bfd2b2cff9393e..cd5dc89065a726 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-02-15 +date: 2024-02-16 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 9d28d90e0a4f38..df958d579bd0c1 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-02-15 +date: 2024-02-16 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 bc24ed40466336..5f3841e8992021 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-02-15 +date: 2024-02-16 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 6e3250d27f14dd..bce0255d7ae1b4 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 562c8770ac4278..25d18a0ba77642 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-02-15 +date: 2024-02-16 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 67418efdabd1d3..37bd58275fb8dc 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 47afce22fea556..c7186530bc9797 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-02-15 +date: 2024-02-16 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 50902821ce51bd..aa294aff9d7011 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-02-15 +date: 2024-02-16 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 f4aabc61a8d4f7..cc39ecf728a2f2 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-02-15 +date: 2024-02-16 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 6ce0fdc99e226b..eba3e520199388 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-02-15 +date: 2024-02-16 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 870d9005d91ed6..b26b01c18977fb 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-02-15 +date: 2024-02-16 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 fd2a717068b021..0813ba27b8c05f 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-02-15 +date: 2024-02-16 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 b69e0509ced4ea..47948c888c5edd 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -22,6 +22,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | actions, ml, savedObjectsTagging, enterpriseSearch | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, visualizations, aiops, ml, dataVisualizer, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core, savedObjects, embeddable, visualizations, canvas, graph, ml, @kbn/core-saved-objects-common, @kbn/core-saved-objects-server, actions, alerting, savedSearch, enterpriseSearch, securitySolution, taskManager, @kbn/core-saved-objects-server-internal, @kbn/core-saved-objects-api-server | - | +| | @kbn/core-saved-objects-base-server-internal, @kbn/core-saved-objects-migration-server-internal, @kbn/core-saved-objects-server-internal, @kbn/core-ui-settings-server-internal, @kbn/core-usage-data-server-internal, taskManager, spaces, actions, @kbn/core-saved-objects-migration-server-mocks, share, dataViews, data, alerting, lens, cases, observability, apmDataAccess, ml, fleet, visualizations, apm, savedSearch, canvas, cloudSecurityPosture, logsShared, graph, infra, lists, maps, securitySolution, synthetics, uptime, dashboard, eventAnnotation, links, savedObjectsManagement, @kbn/core-test-helpers-so-type-serializer, @kbn/core-saved-objects-api-server-internal | - | | | stackAlerts, alerting, securitySolution, inputControlVis | - | | | stackAlerts, graph, inputControlVis, securitySolution, savedObjects | - | | | dashboard, dataVisualizer, stackAlerts, expressionPartitionVis | - | @@ -94,6 +95,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core-root-browser-internal, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core-saved-objects-api-server-internal | - | | | @kbn/core-saved-objects-api-server-internal | - | +| | @kbn/core-saved-objects-api-server-internal, spaces, data, visualizations, savedSearch, cloudSecurityPosture, dashboard, @kbn/core-test-helpers-so-type-serializer | - | | | visTypeTimeseries, graph, dataViewManagement, dataViews | - | | | visTypeTimeseries, graph, dataViewManagement, dataViews | - | | | visTypeTimeseries, graph, dataViewManagement | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index dd1e661f13207b..0bbb83f79a5654 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -148,6 +148,16 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [increment_counter_internal.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/internals/increment_counter_internal.ts#:~:text=migrationVersion), [increment_counter.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/increment_counter.test.ts#:~:text=migrationVersion) | - | | | [bulk_create.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/bulk_create.ts#:~:text=migrationVersion), [repository.test.common.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts#:~:text=migrationVersion) | - | | | [create.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/create.ts#:~:text=migrationVersion), [create.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/create.test.ts#:~:text=migrationVersion), [create.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/create.test.ts#:~:text=migrationVersion), [create.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/create.test.ts#:~:text=migrationVersion) | - | +| | [kibana_migrator.mock.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/mocks/kibana_migrator.mock.ts#:~:text=migrations), [repository.test.common.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts#:~:text=migrations), [repository_create_repository.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository_create_repository.test.ts#:~:text=migrations), [repository_create_repository.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository_create_repository.test.ts#:~:text=migrations), [repository_create_repository.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository_create_repository.test.ts#:~:text=migrations) | - | +| | [validation.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/validation.ts#:~:text=schemas), [validation.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/validation.ts#:~:text=schemas), [validation.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/validation.ts#:~:text=schemas), [repository.test.common.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts#:~:text=schemas), [validation_fixtures.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/validation_fixtures.ts#:~:text=schemas), [validation_fixtures.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/validation_fixtures.ts#:~:text=schemas), [validation_fixtures.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/validation_fixtures.ts#:~:text=schemas) | - | + + + +## @kbn/core-saved-objects-base-server-internal + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [version_map.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.ts#:~:text=migrations), [version_map.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.ts#:~:text=migrations), [version_map.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.ts#:~:text=migrations), [saved_objects_type_registry.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-base-server-internal/src/saved_objects_type_registry.test.ts#:~:text=migrations), [saved_objects_type_registry.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-base-server-internal/src/saved_objects_type_registry.test.ts#:~:text=migrations), [saved_objects_type_registry.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-base-server-internal/src/saved_objects_type_registry.test.ts#:~:text=migrations), [saved_objects_type_registry.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-base-server-internal/src/saved_objects_type_registry.test.ts#:~:text=migrations), [version_map.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts#:~:text=migrations), [version_map.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts#:~:text=migrations), [version_map.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts#:~:text=migrations)+ 8 more | - | @@ -246,10 +256,19 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| +| | [validate_migrations.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts#:~:text=migrations), [validate_migrations.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts#:~:text=migrations), [validate_migrations.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts#:~:text=migrations), [validate_migrations.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts#:~:text=migrations), [validate_migrations.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts#:~:text=migrations), [build_active_migrations.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.ts#:~:text=migrations), [build_active_migrations.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.ts#:~:text=migrations), [build_active_migrations.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.ts#:~:text=migrations), [kibana_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/kibana_migrator.test.ts#:~:text=migrations), [kibana_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/kibana_migrator.test.ts#:~:text=migrations)+ 62 more | - | | | [utils.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.ts#:~:text=convertToMultiNamespaceTypeVersion), [internal_transforms.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts#:~:text=convertToMultiNamespaceTypeVersion), [internal_transforms.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts#:~:text=convertToMultiNamespaceTypeVersion), [internal_transforms.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts#:~:text=convertToMultiNamespaceTypeVersion), [validate_migrations.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts#:~:text=convertToMultiNamespaceTypeVersion), [validate_migrations.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts#:~:text=convertToMultiNamespaceTypeVersion), [document_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts#:~:text=convertToMultiNamespaceTypeVersion), [document_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts#:~:text=convertToMultiNamespaceTypeVersion), [document_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts#:~:text=convertToMultiNamespaceTypeVersion), [document_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts#:~:text=convertToMultiNamespaceTypeVersion)+ 18 more | - | +## @kbn/core-saved-objects-migration-server-mocks + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [kibana_migrator.mock.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-mocks/src/kibana_migrator.mock.ts#:~:text=migrations) | - | + + + ## @kbn/core-saved-objects-server | Deprecated API | Reference location(s) | Remove By | @@ -265,6 +284,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [import_dashboards.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/import_dashboards.ts#:~:text=migrationVersion) | - | | | [import_dashboards.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/import_dashboards.ts#:~:text=migrationVersion), [import_dashboards.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/import_dashboards.ts#:~:text=migrationVersion), [import_dashboards.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/import_dashboards.ts#:~:text=migrationVersion), [import_dashboards.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/import_dashboards.ts#:~:text=migrationVersion) | - | | | [collect_references_deep.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/collect_references_deep.test.ts#:~:text=SavedObjectAttributes), [collect_references_deep.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/collect_references_deep.test.ts#:~:text=SavedObjectAttributes), [collect_references_deep.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/collect_references_deep.test.ts#:~:text=SavedObjectAttributes), [collect_references_deep.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/collect_references_deep.test.ts#:~:text=SavedObjectAttributes) | - | +| | [registration.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/object_types/registration.ts#:~:text=migrations) | - | @@ -272,6 +292,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| +| | [extract_migration_info.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts#:~:text=migrations), [extract_migration_info.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts#:~:text=migrations), [extract_migration_info.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts#:~:text=migrations), [extract_migration_info.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts#:~:text=migrations), [extract_migration_info.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts#:~:text=migrations), [extract_migration_info.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts#:~:text=migrations), [extract_migration_info.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts#:~:text=migrations), [get_migration_hash.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts#:~:text=migrations), [get_migration_hash.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts#:~:text=migrations), [get_migration_hash.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts#:~:text=migrations)+ 5 more | - | +| | [extract_migration_info.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts#:~:text=schemas), [extract_migration_info.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts#:~:text=schemas), [extract_migration_info.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts#:~:text=schemas), [extract_migration_info.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts#:~:text=schemas), [extract_migration_info.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts#:~:text=schemas), [extract_migration_info.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts#:~:text=schemas), [get_migration_hash.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts#:~:text=schemas), [get_migration_hash.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts#:~:text=schemas), [get_migration_hash.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts#:~:text=schemas), [get_migration_hash.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts#:~:text=schemas)+ 4 more | - | | | [extract_migration_info.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts#:~:text=convertToMultiNamespaceTypeVersion), [extract_migration_info.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts#:~:text=convertToMultiNamespaceTypeVersion), [get_migration_hash.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts#:~:text=convertToMultiNamespaceTypeVersion), [get_migration_hash.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -281,6 +303,15 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [transforms.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/ui-settings/core-ui-settings-server-internal/src/saved_objects/transforms.test.ts#:~:text=SavedObject), [transforms.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/ui-settings/core-ui-settings-server-internal/src/saved_objects/transforms.test.ts#:~:text=SavedObject), [transforms.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/ui-settings/core-ui-settings-server-internal/src/saved_objects/transforms.test.ts#:~:text=SavedObject) | - | +| | [ui_settings.ts](https://github.com/elastic/kibana/tree/main/packages/core/ui-settings/core-ui-settings-server-internal/src/saved_objects/ui_settings.ts#:~:text=migrations) | - | + + + +## @kbn/core-usage-data-server-internal + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [core_usage_stats.ts](https://github.com/elastic/kibana/tree/main/packages/core/usage-data/core-usage-data-server-internal/src/saved_objects/core_usage_stats.ts#:~:text=migrations) | - | @@ -338,6 +369,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/plugin.ts#:~:text=authz) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/plugin.ts#:~:text=index) | - | | | [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client/actions_client.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/types.ts#:~:text=SavedObjectAttributes)+ 10 more | - | +| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/saved_objects/index.ts#:~:text=migrations), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/saved_objects/index.ts#:~:text=migrations) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/saved_objects/index.ts#:~:text=convertToMultiNamespaceTypeVersion), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/saved_objects/index.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -368,6 +400,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/plugin.ts#:~:text=license%24), [license_state.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/lib/license_state.test.ts#:~:text=license%24), [license_state.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/lib/license_state.test.ts#:~:text=license%24) | 8.8.0 | | | [task.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/usage/task.ts#:~:text=index) | - | | | [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes)+ 56 more | - | +| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/index.ts#:~:text=migrations) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/index.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -381,6 +414,15 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode)+ 2 more | 8.8.0 | | | [license_context.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/context/license/license_context.tsx#:~:text=license%24) | 8.8.0 | | | [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode)+ 2 more | 8.8.0 | +| | [apm_service_groups.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/server/saved_objects/apm_service_groups.ts#:~:text=migrations) | - | + + + +## apmDataAccess + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [apm_indices.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm_data_access/server/saved_objects/apm_indices.ts#:~:text=migrations) | - | @@ -411,6 +453,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/custom_elements/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/custom_elements/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/workpad/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/workpad/find.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/shareable_runtime/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/shareable_runtime/types.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/custom_elements/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/custom_elements/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/workpad/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/workpad/find.ts#:~:text=SavedObjectAttributes) | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/shareable_runtime/types.ts#:~:text=SavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/shareable_runtime/types.ts#:~:text=SavedObject), [workpad.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/services/kibana/workpad.ts#:~:text=SavedObject), [workpad.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/services/kibana/workpad.ts#:~:text=SavedObject), [use_upload_workpad.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/components/home/hooks/use_upload_workpad.ts#:~:text=SavedObject), [use_upload_workpad.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/components/home/hooks/use_upload_workpad.ts#:~:text=SavedObject) | - | | | [saved_lens.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_lens.ts#:~:text=SavedObjectReference), [saved_lens.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_lens.ts#:~:text=SavedObjectReference), [saved_map.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_map.ts#:~:text=SavedObjectReference), [saved_map.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_map.ts#:~:text=SavedObjectReference), [saved_search.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_search.ts#:~:text=SavedObjectReference), [saved_search.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_search.ts#:~:text=SavedObjectReference), [saved_visualization.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_visualization.ts#:~:text=SavedObjectReference), [saved_visualization.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_visualization.ts#:~:text=SavedObjectReference), [embeddable.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/embeddable.ts#:~:text=SavedObjectReference), [embeddable.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/embeddable.ts#:~:text=SavedObjectReference) | - | +| | [workpad.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/saved_objects/workpad.ts#:~:text=migrations), [custom_element.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/saved_objects/custom_element.ts#:~:text=migrations), [workpad_template.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/saved_objects/workpad_template.ts#:~:text=migrations) | - | | | [workpad.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/saved_objects/workpad.ts#:~:text=convertToMultiNamespaceTypeVersion), [custom_element.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/saved_objects/custom_element.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -422,6 +465,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [use_cases_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/public/common/use_cases_toast.tsx#:~:text=toMountPoint), [use_cases_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/public/common/use_cases_toast.tsx#:~:text=toMountPoint), [use_cases_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/public/common/use_cases_toast.tsx#:~:text=toMountPoint), [add_to_new_case.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/public/components/visualizations/actions/add_to_new_case.tsx#:~:text=toMountPoint), [add_to_new_case.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/public/components/visualizations/actions/add_to_new_case.tsx#:~:text=toMountPoint), [add_to_existing_case.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/public/components/visualizations/actions/add_to_existing_case.tsx#:~:text=toMountPoint), [add_to_existing_case.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/public/components/visualizations/actions/add_to_existing_case.tsx#:~:text=toMountPoint) | - | | | [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/public/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/public/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/public/application.tsx#:~:text=KibanaThemeProvider) | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/common/ui/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/common/ui/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/common/ui/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/common/ui/types.ts#:~:text=ResolvedSimpleSavedObject) | - | +| | [cases.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/saved_object_types/cases/cases.ts#:~:text=migrations), [configure.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/saved_object_types/configure.ts#:~:text=migrations), [comments.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/saved_object_types/comments.ts#:~:text=migrations), [user_actions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/saved_object_types/user_actions.ts#:~:text=migrations), [connector_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/saved_object_types/connector_mappings.ts#:~:text=migrations) | - | | | [cases.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/saved_object_types/cases/cases.ts#:~:text=convertToMultiNamespaceTypeVersion), [configure.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/saved_object_types/configure.ts#:~:text=convertToMultiNamespaceTypeVersion), [comments.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/saved_object_types/comments.ts#:~:text=convertToMultiNamespaceTypeVersion), [user_actions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/saved_object_types/user_actions.ts#:~:text=convertToMultiNamespaceTypeVersion), [connector_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/saved_object_types/connector_mappings.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -456,6 +500,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | [overview_tab.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/overview_tab.tsx#:~:text=indexPatternId) | - | | | [take_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cloud_security_posture/public/components/take_action.tsx#:~:text=toMountPoint), [take_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cloud_security_posture/public/components/take_action.tsx#:~:text=toMountPoint), [take_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cloud_security_posture/public/components/take_action.tsx#:~:text=toMountPoint) | - | +| | [csp_benchmark_rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cloud_security_posture/server/saved_objects/csp_benchmark_rule.ts#:~:text=migrations) | - | +| | [csp_benchmark_rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cloud_security_posture/server/saved_objects/csp_benchmark_rule.ts#:~:text=schemas), [csp_settings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cloud_security_posture/server/saved_objects/csp_settings.ts#:~:text=schemas) | - | @@ -499,6 +545,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [duplicate_dashboard_panel.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/duplicate_dashboard_panel.test.ts#:~:text=find) | - | | | [duplicate_dashboard_panel.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/duplicate_dashboard_panel.test.ts#:~:text=get) | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/bwc/types.ts#:~:text=SavedObjectReference), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/bwc/types.ts#:~:text=SavedObjectReference) | - | +| | [dashboard_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.ts#:~:text=migrations) | - | +| | [dashboard_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.ts#:~:text=schemas) | - | | | [dashboard_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -525,6 +573,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [session_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/session/session_service.ts#:~:text=authc) | - | | | [data_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/utils/table_inspector_view/components/data_table.tsx#:~:text=executeTriggerActions), [data_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/utils/table_inspector_view/components/data_table.tsx#:~:text=executeTriggerActions) | - | | | [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference) | - | +| | [query.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/saved_objects/query.ts#:~:text=migrations), [search_telemetry.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/saved_objects/search_telemetry.ts#:~:text=migrations), [search_session.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/saved_objects/search_session.ts#:~:text=migrations) | - | +| | [query.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/saved_objects/query.ts#:~:text=schemas), [kql_telemetry.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/saved_objects/kql_telemetry.ts#:~:text=schemas), [search_telemetry.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/saved_objects/search_telemetry.ts#:~:text=schemas), [search_session.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/saved_objects/search_session.ts#:~:text=schemas) | - | | | [query.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/saved_objects/query.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -574,6 +624,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [delete_scripted_field.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/server/rest_api_routes/public/scripted_fields/delete_scripted_field.ts#:~:text=removeScriptedField), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=removeScriptedField) | - | | | [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getNonScriptedFields) | - | | | [data_view.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.ts#:~:text=getScriptedFields), [data_view.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.ts#:~:text=getScriptedFields), [data_views.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_views.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields) | - | +| | [data_views.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/server/saved_objects/data_views.ts#:~:text=migrations) | - | | | [data_views.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/server/saved_objects/data_views.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -667,6 +718,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | [service.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/event_annotation/public/event_annotation_service/service.test.ts#:~:text=SimpleSavedObject), [service.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/event_annotation/public/event_annotation_service/service.test.ts#:~:text=SimpleSavedObject) | - | | | [service.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/event_annotation/public/event_annotation_service/service.tsx#:~:text=SavedObjectReference), [service.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/event_annotation/public/event_annotation_service/service.tsx#:~:text=SavedObjectReference), [service.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/event_annotation/public/event_annotation_service/service.tsx#:~:text=SavedObjectReference) | - | +| | [saved_objects.ts](https://github.com/elastic/kibana/tree/main/src/plugins/event_annotation/server/saved_objects.ts#:~:text=migrations) | - | @@ -832,6 +884,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [agent_policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/services/agent_policy_config.test.ts#:~:text=mode), [agent_policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/services/agent_policy_config.test.ts#:~:text=mode), [agent_policy_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode), [agent_policy_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode), [agent_policy_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode) | 8.8.0 | | | [agent_policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/services/agent_policy_config.test.ts#:~:text=mode), [agent_policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/services/agent_policy_config.test.ts#:~:text=mode), [agent_policy_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode), [agent_policy_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode), [agent_policy_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode) | 8.8.0 | | | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/integrations/index.tsx#:~:text=appBasePath) | 8.8.0 | +| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/saved_objects/index.ts#:~:text=migrations), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/saved_objects/index.ts#:~:text=migrations), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/saved_objects/index.ts#:~:text=migrations), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/saved_objects/index.ts#:~:text=migrations), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/saved_objects/index.ts#:~:text=migrations) | - | @@ -863,6 +916,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [use_workspace_loader.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/use_workspace_loader.ts#:~:text=ResolvedSimpleSavedObject), [use_workspace_loader.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/use_workspace_loader.ts#:~:text=ResolvedSimpleSavedObject), [use_workspace_loader.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/use_workspace_loader.ts#:~:text=ResolvedSimpleSavedObject), [use_workspace_loader.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/use_workspace_loader.ts#:~:text=ResolvedSimpleSavedObject) | - | | | [saved_workspace_references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/services/persistence/saved_workspace_references.ts#:~:text=SavedObjectAttributes), [saved_workspace_references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/services/persistence/saved_workspace_references.ts#:~:text=SavedObjectAttributes), [saved_workspace_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_workspace_utils.ts#:~:text=SavedObjectAttributes), [saved_workspace_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_workspace_utils.ts#:~:text=SavedObjectAttributes) | - | | | [saved_workspace_references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/services/persistence/saved_workspace_references.ts#:~:text=SavedObjectReference), [saved_workspace_references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/services/persistence/saved_workspace_references.ts#:~:text=SavedObjectReference), [saved_workspace_references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/services/persistence/saved_workspace_references.ts#:~:text=SavedObjectReference), [persistence.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/types/persistence.ts#:~:text=SavedObjectReference), [persistence.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/types/persistence.ts#:~:text=SavedObjectReference) | - | +| | [graph_workspace.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/server/saved_objects/graph_workspace.ts#:~:text=migrations) | - | | | [graph_workspace.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/server/saved_objects/graph_workspace.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -928,6 +982,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | [log_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts#:~:text=alertFactory), [log_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts#:~:text=alertFactory), [log_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts#:~:text=alertFactory), [inventory_metric_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts#:~:text=alertFactory) | - | | | [common_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/apps/common_providers.tsx#:~:text=KibanaThemeProvider), [common_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/apps/common_providers.tsx#:~:text=KibanaThemeProvider), [common_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/apps/common_providers.tsx#:~:text=KibanaThemeProvider) | - | +| | [saved_object_type.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/sources/saved_object_type.ts#:~:text=migrations) | - | @@ -994,6 +1049,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/types.ts#:~:text=ResolvedSimpleSavedObject) | - | | | [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/find_object_by_title.test.ts#:~:text=simpleSavedObjectMock), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/find_object_by_title.test.ts#:~:text=simpleSavedObjectMock) | - | | | [saved_object_store.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_object_store.ts#:~:text=SavedObjectReference), [saved_object_store.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_object_store.ts#:~:text=SavedObjectReference), [saved_object_store.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_object_store.ts#:~:text=SavedObjectReference), [selectors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/state_management/selectors.ts#:~:text=SavedObjectReference), [selectors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/state_management/selectors.ts#:~:text=SavedObjectReference), [selectors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/state_management/selectors.ts#:~:text=SavedObjectReference), [state_helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_helpers.ts#:~:text=SavedObjectReference), [state_helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_helpers.ts#:~:text=SavedObjectReference), [state_helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_helpers.ts#:~:text=SavedObjectReference), [state_helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_helpers.ts#:~:text=SavedObjectReference)+ 51 more | - | +| | [saved_objects.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/server/saved_objects.ts#:~:text=migrations) | - | | | [saved_objects.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/server/saved_objects.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -1020,6 +1076,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [save_to_library.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/links/public/content_management/save_to_library.tsx#:~:text=SavedObjectSaveModal), [save_to_library.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/links/public/content_management/save_to_library.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | +| | [links.ts](https://github.com/elastic/kibana/tree/main/src/plugins/links/server/saved_objects/links.ts#:~:text=migrations) | - | @@ -1030,6 +1087,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [exception_list_client.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/exception_list_client.mock.ts#:~:text=migrationVersion) | - | | | [exception_list_client.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/exception_list_client.mock.ts#:~:text=migrationVersion), [exception_list_client.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/exception_list_client.mock.ts#:~:text=migrationVersion), [exception_list_client.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/exception_list_client.mock.ts#:~:text=migrationVersion), [exception_list_client.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/exception_list_client.mock.ts#:~:text=migrationVersion) | - | | | [exception_list_client.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/exception_list_client.mock.ts#:~:text=SavedObject), [exception_list_client.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/exception_list_client.mock.ts#:~:text=SavedObject), [exception_list_client.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/exception_list_client.mock.ts#:~:text=SavedObject), [exception_list_client.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/exception_list_client.mock.ts#:~:text=SavedObject), [exception_list_client.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/exception_list_client.mock.ts#:~:text=SavedObject) | - | +| | [exception_list.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/saved_objects/exception_list.ts#:~:text=migrations), [exception_list.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/saved_objects/exception_list.ts#:~:text=migrations) | - | | | [exception_list.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/saved_objects/exception_list.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | | | [create_endpoint_trusted_apps_list.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/create_endpoint_trusted_apps_list.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [create_endpoint_trusted_apps_list.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/create_endpoint_trusted_apps_list.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [create_endpoint_trusted_apps_list.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/create_endpoint_trusted_apps_list.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/saved_objects/migrations.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/saved_objects/migrations.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/saved_objects/migrations.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [exception_list_schema.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/common/schemas/response/exception_list_schema.mock.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [exception_list_schema.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/common/schemas/response/exception_list_schema.mock.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [migrations.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/saved_objects/migrations.test.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [migrations.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/saved_objects/migrations.test.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID)+ 7 more | - | | | [create_endpoint_trusted_apps_list.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/create_endpoint_trusted_apps_list.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [create_endpoint_trusted_apps_list.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/server/services/exception_lists/create_endpoint_trusted_apps_list.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [exception_list_schema.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/common/schemas/response/exception_list_schema.mock.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [exception_list_schema.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lists/common/schemas/response/exception_list_schema.mock.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME) | - | @@ -1038,6 +1096,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## logsShared + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [log_view_saved_object.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/logs_shared/server/saved_objects/log_view/log_view_saved_object.ts#:~:text=migrations) | - | + + + ## logstash | Deprecated API | Reference location(s) | Remove By | @@ -1068,6 +1134,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [map_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/embeddable/map_embeddable.tsx#:~:text=KibanaThemeProvider), [map_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/embeddable/map_embeddable.tsx#:~:text=KibanaThemeProvider), [map_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/embeddable/map_embeddable.tsx#:~:text=KibanaThemeProvider), [render_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/render_app.tsx#:~:text=KibanaThemeProvider), [render_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/render_app.tsx#:~:text=KibanaThemeProvider), [render_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/render_app.tsx#:~:text=KibanaThemeProvider) | - | | | [map_attribute_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/map_attribute_service.ts#:~:text=ResolvedSimpleSavedObject), [map_attribute_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/map_attribute_service.ts#:~:text=ResolvedSimpleSavedObject), [map_attribute_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/map_attribute_service.ts#:~:text=ResolvedSimpleSavedObject), [map_attribute_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/map_attribute_service.ts#:~:text=ResolvedSimpleSavedObject) | - | | | [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [map_attribute_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/map_attribute_service.ts#:~:text=SavedObjectReference), [map_attribute_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/map_attribute_service.ts#:~:text=SavedObjectReference) | - | +| | [setup_saved_objects.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/server/saved_objects/setup_saved_objects.ts#:~:text=migrations) | - | | | [setup_saved_objects.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/server/saved_objects/setup_saved_objects.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -1101,6 +1168,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [initialization.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/saved_objects/initialization/initialization.ts#:~:text=authz), [sync_task.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/saved_objects/sync_task.ts#:~:text=authz), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/plugin.ts#:~:text=authz), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/plugin.ts#:~:text=authz) | - | | | [kibana.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/common/types/kibana.ts#:~:text=SimpleSavedObject), [kibana.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/common/types/kibana.ts#:~:text=SimpleSavedObject) | - | | | [modules.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/common/types/modules.ts#:~:text=SavedObjectAttributes), [modules.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/common/types/modules.ts#:~:text=SavedObjectAttributes) | - | +| | [saved_objects.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/saved_objects/saved_objects.ts#:~:text=migrations), [saved_objects.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/saved_objects/saved_objects.ts#:~:text=migrations), [saved_objects.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/saved_objects/saved_objects.ts#:~:text=migrations) | - | @@ -1128,6 +1196,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | [custom_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts#:~:text=alertFactory), [custom_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts#:~:text=alertFactory), [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.ts#:~:text=alertFactory), [executor.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.test.ts#:~:text=alertFactory) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/plugin.ts#:~:text=license%24) | 8.8.0 | +| | [slo.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/saved_objects/slo.ts#:~:text=migrations) | - | @@ -1262,6 +1331,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [find_relationships.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects_management/server/lib/find_relationships.test.ts#:~:text=SavedObject), [find_relationships.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects_management/server/lib/find_relationships.test.ts#:~:text=SavedObject), [find_relationships.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects_management/server/lib/find_relationships.test.ts#:~:text=SavedObject), [find_relationships.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects_management/server/lib/find_relationships.test.ts#:~:text=SavedObject) | - | | | [record.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects_management/public/services/types/record.ts#:~:text=SavedObjectReference), [record.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects_management/public/services/types/record.ts#:~:text=SavedObjectReference) | - | | | [resolve_import_errors.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects_management/public/lib/resolve_import_errors.ts#:~:text=createNewCopy) | - | +| | [management.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects_management/server/services/management.test.ts#:~:text=migrations) | - | @@ -1294,6 +1364,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/types.ts#:~:text=ResolvedSimpleSavedObject) | - | | | [search_migrations.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search_migrations.ts#:~:text=SavedObjectAttributes), [search_migrations.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search_migrations.ts#:~:text=SavedObjectAttributes), [search_migrations.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search_migrations.ts#:~:text=SavedObjectAttributes), [search_migrations.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search_migrations.ts#:~:text=SavedObjectAttributes) | - | +| | [search.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search.ts#:~:text=migrations) | - | +| | [search.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search.ts#:~:text=schemas) | - | | | [search.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -1361,6 +1433,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/types.ts#:~:text=SimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/types.ts#:~:text=SimpleSavedObject) | - | | | [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes), [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes) | - | | | [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=SavedObject), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=SavedObject), [user_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/user_risk_score_dashboards.ts#:~:text=SavedObject), [user_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/user_risk_score_dashboards.ts#:~:text=SavedObject) | - | +| | [timelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts#:~:text=migrations), [notes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/notes.ts#:~:text=migrations), [pinned_events.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/pinned_events.ts#:~:text=migrations), [legacy_saved_object_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_saved_object_mappings.ts#:~:text=migrations), [saved_object_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/saved_object_mappings.ts#:~:text=migrations) | - | | | [timelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts#:~:text=convertToMultiNamespaceTypeVersion), [notes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/notes.ts#:~:text=convertToMultiNamespaceTypeVersion), [pinned_events.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/pinned_events.ts#:~:text=convertToMultiNamespaceTypeVersion), [legacy_saved_object_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_saved_object_mappings.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | | | [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [trusted_app_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [trusted_app_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID)+ 25 more | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME) | - | @@ -1390,6 +1463,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [share_menu_manager.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/share/public/services/share_menu_manager.tsx#:~:text=KibanaThemeProvider), [share_menu_manager.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/share/public/services/share_menu_manager.tsx#:~:text=KibanaThemeProvider), [share_menu_manager.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/share/public/services/share_menu_manager.tsx#:~:text=KibanaThemeProvider) | - | +| | [register_url_service_saved_object_type.ts](https://github.com/elastic/kibana/tree/main/src/plugins/share/server/url_service/saved_objects/register_url_service_saved_object_type.ts#:~:text=migrations), [register_url_service_saved_object_type.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/share/server/url_service/saved_objects/register_url_service_saved_object_type.test.ts#:~:text=migrations), [register_url_service_saved_object_type.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/share/server/url_service/saved_objects/register_url_service_saved_object_type.test.ts#:~:text=migrations) | - | @@ -1411,6 +1485,8 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [spaces_usage_collector.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/spaces/server/usage_collection/spaces_usage_collector.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/spaces/server/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/spaces/server/plugin.ts#:~:text=license%24), [spaces_usage_collector.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/spaces/server/usage_collection/spaces_usage_collector.test.ts#:~:text=license%24) | 8.8.0 | | | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/spaces/public/legacy_urls/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/spaces/public/legacy_urls/types.ts#:~:text=ResolvedSimpleSavedObject) | - | | | [copy_to_space_flyout_internal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout_internal.tsx#:~:text=createNewCopy) | - | +| | [saved_objects_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts#:~:text=migrations), [saved_objects_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts#:~:text=migrations) | - | +| | [saved_objects_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts#:~:text=schemas) | - | @@ -1434,6 +1510,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [stderr_logs.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/stderr_logs.tsx#:~:text=indexPatternId) | - | | | [toast_title.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/state/monitor_list/toast_title.tsx#:~:text=toMountPoint), [toast_title.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/state/monitor_list/toast_title.tsx#:~:text=toMountPoint), [browser_test_results.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/manual_test_run_mode/browser_test_results.tsx#:~:text=toMountPoint), [browser_test_results.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/manual_test_run_mode/browser_test_results.tsx#:~:text=toMountPoint), [delete_monitor.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/delete_monitor.tsx#:~:text=toMountPoint), [delete_monitor.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/delete_monitor.tsx#:~:text=toMountPoint), [delete_monitor.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/delete_monitor.tsx#:~:text=toMountPoint), [delete_param.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/components/settings/global_params/delete_param.tsx#:~:text=toMountPoint), [delete_param.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/components/settings/global_params/delete_param.tsx#:~:text=toMountPoint), [delete_param.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/components/settings/global_params/delete_param.tsx#:~:text=toMountPoint)+ 6 more | - | | | [synthetics_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/synthetics_app.tsx#:~:text=KibanaThemeProvider), [synthetics_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/synthetics_app.tsx#:~:text=KibanaThemeProvider), [synthetics_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/public/apps/synthetics/synthetics_app.tsx#:~:text=KibanaThemeProvider) | - | +| | [synthetics_monitor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/synthetics/server/saved_objects/synthetics_monitor.ts#:~:text=migrations) | - | @@ -1442,6 +1519,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [task_store.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/task_manager/server/task_store.test.ts#:~:text=SavedObjectAttributes), [task_store.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/task_manager/server/task_store.test.ts#:~:text=SavedObjectAttributes), [task_store.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/task_manager/server/task_store.test.ts#:~:text=SavedObjectAttributes), [task_store.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/task_manager/server/task_store.test.ts#:~:text=SavedObjectAttributes), [task_store.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/task_manager/server/task_store.test.ts#:~:text=SavedObjectAttributes), [task_store.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/task_manager/server/task_store.test.ts#:~:text=SavedObjectAttributes) | - | +| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/task_manager/server/saved_objects/index.ts#:~:text=migrations) | - | @@ -1479,7 +1557,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [bulk_get_maintenance_windows.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/apis/bulk_get_maintenance_windows.ts#:~:text=MaintenanceWindow), [bulk_get_maintenance_windows.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/apis/bulk_get_maintenance_windows.ts#:~:text=MaintenanceWindow), [bulk_get_maintenance_windows.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/apis/bulk_get_maintenance_windows.ts#:~:text=MaintenanceWindow), [bulk_get_maintenance_windows.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/apis/bulk_get_maintenance_windows.ts#:~:text=MaintenanceWindow), [bulk_get_maintenance_windows.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/apis/bulk_get_maintenance_windows.ts#:~:text=MaintenanceWindow), [use_bulk_get_maintenance_windows.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_maintenance_windows.tsx#:~:text=MaintenanceWindow), [use_bulk_get_maintenance_windows.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_maintenance_windows.tsx#:~:text=MaintenanceWindow), [tooltip_content.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/maintenance_windows/tooltip_content.tsx#:~:text=MaintenanceWindow), [tooltip_content.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/maintenance_windows/tooltip_content.tsx#:~:text=MaintenanceWindow), [cell.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/maintenance_windows/cell.tsx#:~:text=MaintenanceWindow)+ 11 more | - | | | [use_bulk_edit_response.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_response.tsx#:~:text=toMountPoint), [use_bulk_edit_response.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_response.tsx#:~:text=toMountPoint), [use_bulk_edit_response.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_response.tsx#:~:text=toMountPoint), [use_bulk_operation_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx#:~:text=toMountPoint), [use_bulk_operation_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx#:~:text=toMountPoint), [use_bulk_operation_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx#:~:text=toMountPoint), [rule_add.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx#:~:text=toMountPoint), [rule_add.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx#:~:text=toMountPoint), [rule_edit.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx#:~:text=toMountPoint), [rule_edit.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx#:~:text=toMountPoint)+ 6 more | - | | | [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/app.tsx#:~:text=KibanaThemeProvider), [connectors_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/connectors_app.tsx#:~:text=KibanaThemeProvider), [connectors_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/connectors_app.tsx#:~:text=KibanaThemeProvider), [connectors_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/connectors_app.tsx#:~:text=KibanaThemeProvider), [alerts_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/alerts_app.tsx#:~:text=KibanaThemeProvider), [alerts_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/alerts_app.tsx#:~:text=KibanaThemeProvider), [alerts_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/alerts_app.tsx#:~:text=KibanaThemeProvider), [test_utils.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/test_utils.tsx#:~:text=KibanaThemeProvider)+ 2 more | - | -| | [rule_reducer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts#:~:text=SavedObjectAttribute), [rule_reducer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts#:~:text=SavedObjectAttribute), [rule_reducer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts#:~:text=SavedObjectAttribute), [rule_reducer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts#:~:text=SavedObjectAttribute) | - | +| | [rule_reducer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts#:~:text=SavedObjectAttribute), [rule_reducer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts#:~:text=SavedObjectAttribute), [rule_reducer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts#:~:text=SavedObjectAttribute), [rule_reducer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts#:~:text=SavedObjectAttribute), [rule_reducer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts#:~:text=SavedObjectAttribute) | - | @@ -1528,6 +1606,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [common.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/uptime/server/legacy_uptime/lib/alerts/common.ts#:~:text=alertFactory), [status_check.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/uptime/server/legacy_uptime/lib/alerts/status_check.ts#:~:text=alertFactory), [tls.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/uptime/server/legacy_uptime/lib/alerts/tls.ts#:~:text=alertFactory), [duration_anomaly.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/uptime/server/legacy_uptime/lib/alerts/duration_anomaly.ts#:~:text=alertFactory) | - | | | [alert_messages.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/uptime/public/legacy_uptime/lib/alert_types/alert_messages.tsx#:~:text=toMountPoint), [alert_messages.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/uptime/public/legacy_uptime/lib/alert_types/alert_messages.tsx#:~:text=toMountPoint), [ml_flyout_container.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx#:~:text=toMountPoint), [ml_flyout_container.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx#:~:text=toMountPoint), [ml_flyout_container.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx#:~:text=toMountPoint) | - | | | [uptime_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/uptime/public/legacy_uptime/app/uptime_app.tsx#:~:text=KibanaThemeProvider), [uptime_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/uptime/public/legacy_uptime/app/uptime_app.tsx#:~:text=KibanaThemeProvider), [uptime_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/uptime/public/legacy_uptime/app/uptime_app.tsx#:~:text=KibanaThemeProvider) | - | +| | [uptime_settings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/uptime/server/legacy_uptime/lib/saved_objects/uptime_settings.ts#:~:text=migrations) | - | @@ -1626,6 +1705,8 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [saved_visualization_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualization_references/saved_visualization_references.ts#:~:text=SavedObjectAttribute), [saved_visualization_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualization_references/saved_visualization_references.ts#:~:text=SavedObjectAttribute) | - | | | [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectAttributes), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectAttributes), [visualize_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx#:~:text=SavedObjectAttributes), [visualize_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx#:~:text=SavedObjectAttributes), [visualize_embeddable_factory.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.tsx#:~:text=SavedObjectAttributes), [visualize_embeddable_factory.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.tsx#:~:text=SavedObjectAttributes) | - | | | [saved_visualization_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualization_references/saved_visualization_references.ts#:~:text=SavedObjectReference), [saved_visualization_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualization_references/saved_visualization_references.ts#:~:text=SavedObjectReference), [saved_visualization_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualization_references/saved_visualization_references.ts#:~:text=SavedObjectReference), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectReference), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectReference), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectReference), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectReference), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectReference), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectReference), [visualize_embeddable_factory.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.tsx#:~:text=SavedObjectReference)+ 10 more | - | +| | [visualization.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/server/saved_objects/visualization.ts#:~:text=migrations) | - | +| | [visualization.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/server/saved_objects/visualization.ts#:~:text=schemas) | - | | | [visualization.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/server/saved_objects/visualization.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index dffc9f83801577..a866a642fc42a8 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index c67fb89c8a731d..e5117fe5c7dcfd 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-02-15 +date: 2024-02-16 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 5849ec7869fb29..22d4c9dba66971 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-02-15 +date: 2024-02-16 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 d991d67af540e3..16495b49bafd54 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 0e0644ba99626e..26bebc9cbacd91 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-02-15 +date: 2024-02-16 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 981817a9a13c54..2cda3a63c593d3 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-02-15 +date: 2024-02-16 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 f03da923ab2390..43408e599e6dac 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-02-15 +date: 2024-02-16 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 f1f85e9fccc4e2..b4323c8b302217 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-02-15 +date: 2024-02-16 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 488dc13423b3f0..18c4dd654310ea 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-02-15 +date: 2024-02-16 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 5de8923e06cb23..86291bb90656bb 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 0e36ad12a78dd5..71263d7e09be4b 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index ea09195bf4911d..a5d677aedd1df9 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-02-15 +date: 2024-02-16 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 631266a21e0a93..16ebdcb12cf43a 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-02-15 +date: 2024-02-16 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 ca2d32014b5d79..b21f7fa056374b 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-02-15 +date: 2024-02-16 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 afd9a83e22fbe1..d87f1d87898c77 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-02-15 +date: 2024-02-16 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 5672f5190c5a43..1d68b5d994ded6 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-02-15 +date: 2024-02-16 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 5dead44105d84d..f53ce837b4cbf6 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-02-15 +date: 2024-02-16 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 f8dc9debed1215..eda2439ca9ddc8 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-02-15 +date: 2024-02-16 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 279ea597145eb0..5d8ebc48f212d9 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-02-15 +date: 2024-02-16 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 2610a82e45d6ad..6b56c97d0b5949 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-02-15 +date: 2024-02-16 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 1472f454acff1b..0a8b0d87cd9c10 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-02-15 +date: 2024-02-16 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 d0502b938e630f..a53ff4cc468e2a 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-02-15 +date: 2024-02-16 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 0bc04006d0cd90..e020e777a426a7 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-02-15 +date: 2024-02-16 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 9efc847172d1c3..466ae3c800c002 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-02-15 +date: 2024-02-16 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 704f4a061cb13e..7333c69d10fe82 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-02-15 +date: 2024-02-16 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 b981a9c64eeacc..536a0fc7e5f31c 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-02-15 +date: 2024-02-16 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 0ac05554194221..1b5e17ef8c976c 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-02-15 +date: 2024-02-16 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 dfaddf951955dc..fc53199cf9f501 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-02-15 +date: 2024-02-16 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 1816c4dad013b3..c2d6e143b5845f 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-02-15 +date: 2024-02-16 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 33b9b9cb64fbcd..d6377a99ffda88 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-02-15 +date: 2024-02-16 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 14ab5c103e5331..78671d4ca1edde 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 6427e3926362e6..7f7f9df12f7f3c 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-02-15 +date: 2024-02-16 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 bdb83c89324078..885fb9280e5997 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-02-15 +date: 2024-02-16 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 7ef8fb068760a2..5e68522ddeb016 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-02-15 +date: 2024-02-16 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 39eb1a842c2aba..02e4416ba99262 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-02-15 +date: 2024-02-16 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 f0f74590e196ed..3189cebc134e4c 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-02-15 +date: 2024-02-16 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 bc1d93bbcd26ab..07d1eebdf3edb7 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-02-15 +date: 2024-02-16 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 ca8e62fba2431f..e878d867f2dd6b 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-02-15 +date: 2024-02-16 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 b72fb180f3f6ee..44d015ecf236cc 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-02-15 +date: 2024-02-16 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 56ed4098d8a552..13f124c3843ce9 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-02-15 +date: 2024-02-16 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 9d1c9a7950aa8d..9204d3f82da182 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index b5085dfa7d4816..0b35e5f7721ddc 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-02-15 +date: 2024-02-16 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 00d48350d33d78..b9c7e3da3d59b2 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-02-15 +date: 2024-02-16 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 a001eb8f9d129c..e0ae1936b1164f 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index c13efd8c414f84..00269ee74fa6b4 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 4ff68bd6679a9f..56e704c139ba59 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-02-15 +date: 2024-02-16 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 714b4b1ba0a22b..49fca4eff4f97b 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-02-15 +date: 2024-02-16 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 b0266a3ae517d7..666449aa54ee5f 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 1d7c5a6216fdbb..0ba44348e03c00 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index e2933b74954cb4..25f71418db3d5c 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 50b54fd18796cc..49ad67ba52c4d8 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-02-15 +date: 2024-02-16 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 98e3d77c17bfe4..79785d7d434ad9 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-02-15 +date: 2024-02-16 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 16a71f334e691d..2b9911d72798be 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 8c169651733bdd..391dc439809ecc 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-02-15 +date: 2024-02-16 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 90cb3d702b415d..d9944a48beb764 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index fa1d6cd051e0c3..9d066c3639de3a 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index bc1be02eed5bc3..ad188a08a8f7ce 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 5f392caec79e98..4ec17e0b795daf 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index a16563f7270d49..21b89602fb0004 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 30c4cd6618a687..6562a412799eec 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index 081d30e9ffea7f..7c369bffa881d4 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 42ae89d3013fee..6e4382a2839578 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 6838b9acce73c1..b64c1a5c7c8ce3 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-02-15 +date: 2024-02-16 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 dfe6535af5d2e6..5206e507701dc1 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 05fd203761c68d..01496d66231278 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index ba8e64c5c5b8dc..0f528c06888160 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-02-15 +date: 2024-02-16 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 3a3f2465cd772e..d6d6720aabd920 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-02-15 +date: 2024-02-16 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 4ec205f65e91db..1d6b12dcbaabd5 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-02-15 +date: 2024-02-16 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 efcd486eb631a3..0994d0ebbe19d7 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-02-15 +date: 2024-02-16 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 da93157a19b9bb..30ab3823e774e3 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index e7f0ee893adbc9..915456e154e758 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-02-15 +date: 2024-02-16 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 4c5e625fd93b6a..e682954686df00 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-02-15 +date: 2024-02-16 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 83021db26095cf..95aca98a7080b4 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-02-15 +date: 2024-02-16 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 2138267e14057e..694af348c1c6e4 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-02-15 +date: 2024-02-16 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 0bff690ad46500..a204a81abea894 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-02-15 +date: 2024-02-16 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 cfbee1a9516389..33789388f5c459 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-02-15 +date: 2024-02-16 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 94d2a92d5ef692..fe664524aa12c1 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 38a0915b5665aa..b099541e5a18bb 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-02-15 +date: 2024-02-16 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 454c317eeff9e5..497be11d220ff5 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-02-15 +date: 2024-02-16 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 a3d660b063d227..680dfb9860fcb6 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-02-15 +date: 2024-02-16 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 eba938a8e1aa15..222d928441d684 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-02-15 +date: 2024-02-16 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 b57d17e9170398..6e5b20cbeda76c 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-02-15 +date: 2024-02-16 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 ea40aaaf9911e2..530a498ab71c0d 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-02-15 +date: 2024-02-16 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 0bea3c751d44b4..bfc8ff62659a6b 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-02-15 +date: 2024-02-16 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 ff76bdac9b48cc..cad29a84672bc5 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 23744201341a87..62315366780f70 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-02-15 +date: 2024-02-16 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 18cc8cb615d24f..aaf3ec5f2ef227 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-02-15 +date: 2024-02-16 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 94739ccb1928a3..0d8fc9957b3d21 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-02-15 +date: 2024-02-16 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 c54065c6c1a06e..028139cce14e48 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index fd813a6a7c7ae3..062da2de3a638c 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-02-15 +date: 2024-02-16 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 62933a759a56f2..3fa5cc0b6a6ebb 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-02-15 +date: 2024-02-16 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 1c420db3572d7e..9736580cf50173 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-02-15 +date: 2024-02-16 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 c5795713111c17..66f1259269dec6 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-02-15 +date: 2024-02-16 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 fcd4e27c3675e8..21ebc20f360518 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-02-15 +date: 2024-02-16 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 c6371c0b46eb7e..898cba054efb14 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-02-15 +date: 2024-02-16 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 f33ca74a2820d2..de99fdfaab0543 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-02-15 +date: 2024-02-16 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 8febffeb7497b0..35ff236e949282 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-02-15 +date: 2024-02-16 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 56e7d01d391b0d..0b8963d12d8caf 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-02-15 +date: 2024-02-16 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 e1d6863767796f..09945b6bfbc5d8 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-02-15 +date: 2024-02-16 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 0f15b4a62206ec..c49d30b5b18a58 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-02-15 +date: 2024-02-16 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 d6fd9e07da1d7b..245b6c20fc3310 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-02-15 +date: 2024-02-16 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 f509475200c6f6..02f6b11a916a95 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-02-15 +date: 2024-02-16 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 42825c3bb5f674..f36a212938afd9 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-02-15 +date: 2024-02-16 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 9ed3e752dffb3a..971f0d3bbd5ba4 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-02-15 +date: 2024-02-16 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 8d8e02c3bb07bc..c9bb1bd4fe2326 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-02-15 +date: 2024-02-16 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 739bb4e9a94f48..64d8858f5dcc38 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-02-15 +date: 2024-02-16 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 44a445e9614a88..3730c772395866 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-02-15 +date: 2024-02-16 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 706b2a11d19db1..46deab5b6c1577 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-02-15 +date: 2024-02-16 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 2535f5d99ada82..f0457ec9d3584d 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-02-15 +date: 2024-02-16 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 f3b14c2407f21b..7783fd51bf87ab 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-02-15 +date: 2024-02-16 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 52888b43c96035..b6bef0ab8ca349 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-02-15 +date: 2024-02-16 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 0e3bdbfd6cb43d..d4d8b5b980ea82 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-02-15 +date: 2024-02-16 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 701cfd00bf391d..326f412054e74a 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-02-15 +date: 2024-02-16 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 a921dad645342d..13c0236357725f 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-02-15 +date: 2024-02-16 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 304e75793c7da9..17f489f53d2fc8 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-02-15 +date: 2024-02-16 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 8cc198c8399a2c..6dcc3fe6f47eea 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-02-15 +date: 2024-02-16 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 91b21d420ce0b2..0f3c2564b68428 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-02-15 +date: 2024-02-16 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 3c778fb4527fde..fe091d8410f2bb 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-02-15 +date: 2024-02-16 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 80c8b964cd030c..e96754983054ed 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-02-15 +date: 2024-02-16 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 94da880e803079..6e51612d0a1e62 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-02-15 +date: 2024-02-16 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 f04e7147bc5130..7c9047323a3ff6 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-02-15 +date: 2024-02-16 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 660e72eebe2efe..a30d17671fbbb1 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-02-15 +date: 2024-02-16 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 47fac63927f722..e2e4174191bbc4 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-02-15 +date: 2024-02-16 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 180ad96100367f..1e4c352d6ed526 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-02-15 +date: 2024-02-16 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 cdaaca1b902cbc..a3e5facec45cf4 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-02-15 +date: 2024-02-16 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 ecfd2c746f63e2..18d676963a456f 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-02-15 +date: 2024-02-16 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 cfe65fabb34a0f..61fe178da72a5b 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-02-15 +date: 2024-02-16 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 5bf107ccdc3131..588ba3f7f5fd9c 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-02-15 +date: 2024-02-16 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 dd8bbb085f2f07..c85cef02e3de78 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-02-15 +date: 2024-02-16 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 60c0bf0d6fd93d..13009e2e0e2b70 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-02-15 +date: 2024-02-16 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 981a613a0cc992..24ddcf8db08d86 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-02-15 +date: 2024-02-16 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 ab5fa504687481..efcac4a651bb33 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-02-15 +date: 2024-02-16 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 bd6df91f44eb55..b15d741a811729 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-02-15 +date: 2024-02-16 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 a5c02b6a740d6b..524f6971805e3f 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-02-15 +date: 2024-02-16 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 bbcb356b388c3c..fd7236f5d934bc 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-02-15 +date: 2024-02-16 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 e0f6053f77d1ba..2fcac91a099cae 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-02-15 +date: 2024-02-16 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 4bb927cd1e8431..bc7af21cff64c3 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-02-15 +date: 2024-02-16 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 09810791db7d5b..1025c0ca309911 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-02-15 +date: 2024-02-16 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 af65a048a08af9..5e6480692d9023 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-02-15 +date: 2024-02-16 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 af3bfb3be8b4fd..7ae24623c30938 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-02-15 +date: 2024-02-16 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 dad0459e1a3d68..591f3a75b099e3 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-02-15 +date: 2024-02-16 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 d64ad405c25d73..1b379328302968 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-02-15 +date: 2024-02-16 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 0785bbba2d988c..bed14b882f54bc 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-02-15 +date: 2024-02-16 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 e46467bda298f7..378e0b329c887d 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-02-15 +date: 2024-02-16 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 4176000c6441c8..b73772025c9859 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-02-15 +date: 2024-02-16 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 0f079d477b6bad..32046b046798e8 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-02-15 +date: 2024-02-16 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 adc8f7c2690d0c..3ef00431962c8d 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-02-15 +date: 2024-02-16 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 afe7f0353e6b1b..f6b44165272bcb 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 92e5ffffc5dded..b504a2c005a693 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-02-15 +date: 2024-02-16 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 dc093152ad85a2..842cd2c7e8b1b5 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-02-15 +date: 2024-02-16 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 7145d8710458d6..be0a03176eb763 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-02-15 +date: 2024-02-16 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 f0475d72adafac..3d0df580ee7406 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-02-15 +date: 2024-02-16 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 ebbae55c36af06..46a3532296f806 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-02-15 +date: 2024-02-16 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 06746049c6bcf9..f006dc1d2a777b 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-02-15 +date: 2024-02-16 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 f4f325fce82f8c..04c3ead2e66240 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-02-15 +date: 2024-02-16 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 39ea86be880cd8..83fb77f8027586 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-02-15 +date: 2024-02-16 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 fdf0aff578a853..0d483599ad7276 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-02-15 +date: 2024-02-16 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 658af25f713be4..8c72aaeb5d7c4b 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-02-15 +date: 2024-02-16 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 f028e80ee03bb2..d8288cf410d2b0 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-02-15 +date: 2024-02-16 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 5d23c698883f21..38715039c1e0aa 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-02-15 +date: 2024-02-16 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 5c01f67c223c2b..582da0d722f872 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-02-15 +date: 2024-02-16 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 f5a90cc8ec7e50..e64474f354b8a1 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-02-15 +date: 2024-02-16 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 c1c8b3727e305c..6cfb8a3b6ca21f 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-02-15 +date: 2024-02-16 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 f8c7e7909b6c27..99c5352511ebf3 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-02-15 +date: 2024-02-16 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 b0080fa61a2ac7..bed12d3946d21b 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-02-15 +date: 2024-02-16 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 2b959a02597043..aae996d8ad9d89 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-02-15 +date: 2024-02-16 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 6aef3a253bf53d..44f017a61a7a29 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-02-15 +date: 2024-02-16 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 b936e53b0a3a0e..6069ab28e65f63 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-02-15 +date: 2024-02-16 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 4a194391e0c64a..1921e7aa0fc291 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-02-15 +date: 2024-02-16 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 8676a3525658f2..2701f94783fb12 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-02-15 +date: 2024-02-16 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 a2a4b16742b410..0f257a75f442bc 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-02-15 +date: 2024-02-16 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 7d9a4acb5f02ea..46c38ca8d039f7 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-02-15 +date: 2024-02-16 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 e0e172e4c7fe18..904ebfe3c81e58 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-02-15 +date: 2024-02-16 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 146f20ad68fc06..ae6ee97de26ca0 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-02-15 +date: 2024-02-16 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 cad214afd264ee..ba13d8e62d50de 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-02-15 +date: 2024-02-16 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 50cff0d1eb2253..e6f4126b454ea5 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-02-15 +date: 2024-02-16 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 d21aad8adc2e7c..9b87984af94584 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-02-15 +date: 2024-02-16 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 3bb43a78b310ac..b81984a990fcd5 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-02-15 +date: 2024-02-16 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 b02e175571f2cc..cdfcd53a413683 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-02-15 +date: 2024-02-16 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 e585d5ce2ebc04..83c63d8e039d22 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-02-15 +date: 2024-02-16 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 106d2e5a887244..6d57bca5b327c8 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-02-15 +date: 2024-02-16 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 36bdc2d3b6869f..339ab34cdb23b0 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-02-15 +date: 2024-02-16 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 ecffa3cae9d722..d0173f6b5c1a19 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-02-15 +date: 2024-02-16 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 2bc4be4904f7b9..4e90594a2fbf8b 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-02-15 +date: 2024-02-16 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 1e8b4c7faf41f6..20d6a5cd3bcd69 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-02-15 +date: 2024-02-16 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 a47ed55ef2902c..bc8ed9ff3b1638 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-02-15 +date: 2024-02-16 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 650a91648eb228..b99ae735c158b9 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-02-15 +date: 2024-02-16 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 518d9793c8826c..0439d02cd5ec37 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-02-15 +date: 2024-02-16 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 75925e246ef28f..2c2792a2992354 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-02-15 +date: 2024-02-16 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 7cf70af4cc81c6..13bdfa2ed044c1 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-02-15 +date: 2024-02-16 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 14614a225822ce..84cce78f47850d 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-02-15 +date: 2024-02-16 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 e9d4923725dd18..55aaef76ba2de4 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-02-15 +date: 2024-02-16 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 90554097aeae17..ee1b05775045aa 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-02-15 +date: 2024-02-16 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 93be8292fd49d2..7149628a8d3f49 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-02-15 +date: 2024-02-16 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 54ea43d61ee30c..5fd6b259d6f12e 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-02-15 +date: 2024-02-16 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 3534ff8d8dc6a7..22d01171a94ceb 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-02-15 +date: 2024-02-16 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 7bc59495c30d5f..c8abf9a4a4f758 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-02-15 +date: 2024-02-16 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 526a5ee67c8293..54489d27c2fccc 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-02-15 +date: 2024-02-16 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 3b1de3a0c7d0e3..7f0dc5e5405c1a 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-02-15 +date: 2024-02-16 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 70ab77cc62f733..324ac5d4610f53 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-02-15 +date: 2024-02-16 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 c5682c0f9128af..3b737a4b58128f 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-02-15 +date: 2024-02-16 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 975b414e4c1e8f..afccd6075ea4d7 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-02-15 +date: 2024-02-16 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 11cf4e29395039..dbf1ff53fb160b 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-02-15 +date: 2024-02-16 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 779d34b362cf78..c4da7b59e078e7 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-02-15 +date: 2024-02-16 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 2c9dfa0adf1435..d3c87e72d7b796 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-02-15 +date: 2024-02-16 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 727cfb49307dca..74d0bd7b720e71 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-02-15 +date: 2024-02-16 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 fe49b5099378bc..69525194a193e5 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-02-15 +date: 2024-02-16 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 505829795e4fd7..84dc89ee141865 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-02-15 +date: 2024-02-16 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 3d85746341fc2b..74299b20887aea 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-02-15 +date: 2024-02-16 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 79f9691df8fb8f..22cca0e5d4c9e3 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-02-15 +date: 2024-02-16 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 8fa786faff54d4..12b828a3baf9f8 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-02-15 +date: 2024-02-16 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 e634c3de6987ad..ec0d7965bde540 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-02-15 +date: 2024-02-16 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 5cb9881397b12a..1339ca5ba3a4b5 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-02-15 +date: 2024-02-16 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 87e4a259f35870..d19ab38eb3e5d0 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-02-15 +date: 2024-02-16 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.devdocs.json b/api_docs/kbn_core_saved_objects_common.devdocs.json index 2475968f454ab7..750acc4e09dc1c 100644 --- a/api_docs/kbn_core_saved_objects_common.devdocs.json +++ b/api_docs/kbn_core_saved_objects_common.devdocs.json @@ -1547,6 +1547,10 @@ "plugin": "triggersActionsUi", "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts" }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts" + }, { "plugin": "@kbn/core", "path": "src/core/types/index.ts" diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index fde34f79231cf9..9d4cd112f2ae1d 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-02-15 +date: 2024-02-16 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 5a4724711cf9d5..65a74f1c31a587 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-02-15 +date: 2024-02-16 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 db5f39c3d04f98..82330f04148dc7 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-02-15 +date: 2024-02-16 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 7b5857b8598de6..3bf73f656cd513 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-02-15 +date: 2024-02-16 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 b32c477a461b00..9d5a8ffc1be03f 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.devdocs.json b/api_docs/kbn_core_saved_objects_server.devdocs.json index 9bcb155c4e2bba..3581cd6f7ff239 100644 --- a/api_docs/kbn_core_saved_objects_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_server.devdocs.json @@ -10408,38 +10408,712 @@ "parentPluginId": "@kbn/core-saved-objects-server", "id": "def-common.SavedObjectsType.migrations", "type": "CompoundType", - "tags": [], + "tags": [ + "deprecated" + ], "label": "migrations", "description": [ "\nAn optional map of {@link SavedObjectMigrationFn | migrations} or a function returning a map of {@link SavedObjectMigrationFn | migrations} to be used to migrate the type." ], "signature": [ { - "pluginId": "@kbn/core-saved-objects-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectMigrationMap", - "text": "SavedObjectMigrationMap" + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.SavedObjectMigrationMap", + "text": "SavedObjectMigrationMap" + }, + " | (() => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.SavedObjectMigrationMap", + "text": "SavedObjectMigrationMap" + }, + ") | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_type.ts", + "deprecated": true, + "trackAdoption": false, + "references": [ + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.ts" + }, + { + "plugin": "@kbn/core-saved-objects-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/object_types/registration.ts" + }, + { + "plugin": "@kbn/core-ui-settings-server-internal", + "path": "packages/core/ui-settings/core-ui-settings-server-internal/src/saved_objects/ui_settings.ts" + }, + { + "plugin": "@kbn/core-usage-data-server-internal", + "path": "packages/core/usage-data/core-usage-data-server-internal/src/saved_objects/core_usage_stats.ts" + }, + { + "plugin": "taskManager", + "path": "x-pack/plugins/task_manager/server/saved_objects/index.ts" + }, + { + "plugin": "spaces", + "path": "x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts" + }, + { + "plugin": "spaces", + "path": "x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/saved_objects/index.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/saved_objects/index.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-mocks", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-mocks/src/kibana_migrator.mock.ts" + }, + { + "plugin": "share", + "path": "src/plugins/share/server/url_service/saved_objects/register_url_service_saved_object_type.ts" + }, + { + "plugin": "dataViews", + "path": "src/plugins/data_views/server/saved_objects/data_views.ts" + }, + { + "plugin": "data", + "path": "src/plugins/data/server/saved_objects/query.ts" + }, + { + "plugin": "data", + "path": "src/plugins/data/server/saved_objects/search_telemetry.ts" + }, + { + "plugin": "data", + "path": "src/plugins/data/server/search/saved_objects/search_session.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/saved_objects/index.ts" + }, + { + "plugin": "lens", + "path": "x-pack/plugins/lens/server/saved_objects.ts" + }, + { + "plugin": "cases", + "path": "x-pack/plugins/cases/server/saved_object_types/cases/cases.ts" + }, + { + "plugin": "cases", + "path": "x-pack/plugins/cases/server/saved_object_types/configure.ts" + }, + { + "plugin": "cases", + "path": "x-pack/plugins/cases/server/saved_object_types/comments.ts" + }, + { + "plugin": "cases", + "path": "x-pack/plugins/cases/server/saved_object_types/user_actions.ts" + }, + { + "plugin": "cases", + "path": "x-pack/plugins/cases/server/saved_object_types/connector_mappings.ts" + }, + { + "plugin": "observability", + "path": "x-pack/plugins/observability/server/saved_objects/slo.ts" + }, + { + "plugin": "apmDataAccess", + "path": "x-pack/plugins/apm_data_access/server/saved_objects/apm_indices.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/saved_objects/saved_objects.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/saved_objects/saved_objects.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/saved_objects/saved_objects.ts" + }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/server/saved_objects/index.ts" + }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/server/saved_objects/index.ts" + }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/server/saved_objects/index.ts" + }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/server/saved_objects/index.ts" + }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/server/saved_objects/index.ts" + }, + { + "plugin": "visualizations", + "path": "src/plugins/visualizations/server/saved_objects/visualization.ts" + }, + { + "plugin": "apm", + "path": "x-pack/plugins/apm/server/saved_objects/apm_service_groups.ts" + }, + { + "plugin": "savedSearch", + "path": "src/plugins/saved_search/server/saved_objects/search.ts" + }, + { + "plugin": "canvas", + "path": "x-pack/plugins/canvas/server/saved_objects/workpad.ts" + }, + { + "plugin": "canvas", + "path": "x-pack/plugins/canvas/server/saved_objects/custom_element.ts" + }, + { + "plugin": "canvas", + "path": "x-pack/plugins/canvas/server/saved_objects/workpad_template.ts" + }, + { + "plugin": "cloudSecurityPosture", + "path": "x-pack/plugins/cloud_security_posture/server/saved_objects/csp_benchmark_rule.ts" + }, + { + "plugin": "logsShared", + "path": "x-pack/plugins/logs_shared/server/saved_objects/log_view/log_view_saved_object.ts" + }, + { + "plugin": "graph", + "path": "x-pack/plugins/graph/server/saved_objects/graph_workspace.ts" + }, + { + "plugin": "infra", + "path": "x-pack/plugins/infra/server/lib/sources/saved_object_type.ts" + }, + { + "plugin": "lists", + "path": "x-pack/plugins/lists/server/saved_objects/exception_list.ts" + }, + { + "plugin": "lists", + "path": "x-pack/plugins/lists/server/saved_objects/exception_list.ts" + }, + { + "plugin": "maps", + "path": "x-pack/plugins/maps/server/saved_objects/setup_saved_objects.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/notes.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/pinned_events.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_saved_object_mappings.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/endpoint/lib/artifacts/saved_object_mappings.ts" + }, + { + "plugin": "synthetics", + "path": "x-pack/plugins/synthetics/server/saved_objects/synthetics_monitor.ts" + }, + { + "plugin": "uptime", + "path": "x-pack/plugins/uptime/server/legacy_uptime/lib/saved_objects/uptime_settings.ts" + }, + { + "plugin": "dashboard", + "path": "src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.ts" + }, + { + "plugin": "eventAnnotation", + "path": "src/plugins/event_annotation/server/saved_objects.ts" + }, + { + "plugin": "links", + "path": "src/plugins/links/server/saved_objects/links.ts" + }, + { + "plugin": "savedObjectsManagement", + "path": "src/plugins/saved_objects_management/server/services/management.test.ts" + }, + { + "plugin": "share", + "path": "src/plugins/share/server/url_service/saved_objects/register_url_service_saved_object_type.test.ts" + }, + { + "plugin": "share", + "path": "src/plugins/share/server/url_service/saved_objects/register_url_service_saved_object_type.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts" + }, + { + "plugin": "@kbn/core-saved-objects-api-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-api-server-internal/src/mocks/kibana_migrator.mock.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/saved_objects_type_registry.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/saved_objects_type_registry.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/saved_objects_type_registry.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/saved_objects_type_registry.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/kibana_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/kibana_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/kibana_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/kibana_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/kibana_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/run_resilient_migrator.fixtures.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/run_resilient_migrator.fixtures.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-api-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts" + }, + { + "plugin": "@kbn/core-saved-objects-api-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository_create_repository.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-api-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository_create_repository.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-api-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository_create_repository.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-base-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/version_map.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/core/build_index_map.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" }, - " | (() => ", { - "pluginId": "@kbn/core-saved-objects-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectMigrationMap", - "text": "SavedObjectMigrationMap" + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" }, - ") | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_type.ts", - "deprecated": false, - "trackAdoption": false + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/zdt/utils/generate_additive_mapping_diff.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/zdt/utils/outdated_documents_query.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/zdt/utils/outdated_documents_query.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/zdt/utils/outdated_documents_query.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/zdt/utils/outdated_documents_query.test.ts" + } + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", "id": "def-common.SavedObjectsType.schemas", "type": "CompoundType", - "tags": [], + "tags": [ + "deprecated" + ], "label": "schemas", "description": [ "\nAn optional schema that can be used to validate the attributes of the type.\n\nWhen provided, calls to {@link SavedObjectsClient.create | create} will be validated against this schema.\n\nSee {@link SavedObjectsValidationMap} for more details." @@ -10463,8 +11137,134 @@ ") | undefined" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_type.ts", - "deprecated": false, - "trackAdoption": false + "deprecated": true, + "trackAdoption": false, + "references": [ + { + "plugin": "@kbn/core-saved-objects-api-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/validation.ts" + }, + { + "plugin": "@kbn/core-saved-objects-api-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/validation.ts" + }, + { + "plugin": "@kbn/core-saved-objects-api-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/validation.ts" + }, + { + "plugin": "spaces", + "path": "x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts" + }, + { + "plugin": "data", + "path": "src/plugins/data/server/saved_objects/query.ts" + }, + { + "plugin": "data", + "path": "src/plugins/data/server/saved_objects/kql_telemetry.ts" + }, + { + "plugin": "data", + "path": "src/plugins/data/server/saved_objects/search_telemetry.ts" + }, + { + "plugin": "data", + "path": "src/plugins/data/server/search/saved_objects/search_session.ts" + }, + { + "plugin": "visualizations", + "path": "src/plugins/visualizations/server/saved_objects/visualization.ts" + }, + { + "plugin": "savedSearch", + "path": "src/plugins/saved_search/server/saved_objects/search.ts" + }, + { + "plugin": "cloudSecurityPosture", + "path": "x-pack/plugins/cloud_security_posture/server/saved_objects/csp_benchmark_rule.ts" + }, + { + "plugin": "cloudSecurityPosture", + "path": "x-pack/plugins/cloud_security_posture/server/saved_objects/csp_settings.ts" + }, + { + "plugin": "dashboard", + "path": "src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-test-helpers-so-type-serializer", + "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/get_migration_hash.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-api-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts" + }, + { + "plugin": "@kbn/core-saved-objects-api-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/validation_fixtures.ts" + }, + { + "plugin": "@kbn/core-saved-objects-api-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/validation_fixtures.ts" + }, + { + "plugin": "@kbn/core-saved-objects-api-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/validation_fixtures.ts" + } + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", @@ -10771,7 +11571,7 @@ "tags": [], "label": "switchToModelVersionAt", "description": [ - "\nAllows to opt-in to the new model version API.\n\nMust be a valid semver version (with the patch version being necessarily 0)\n\nWhen specified, the type will switch from using the {@link SavedObjectsType.migrations | legacy migration API}\nto use the {@link SavedObjectsType.modelVersions | modelVersion API} after the specified version.\n\nOnce opted in, it will no longer be possible to use the legacy migration API after the specified version.\n" + "\nAllows to opt-in to the model version API.\n\nMust be a valid semver version (with the patch version being necessarily 0)\n\nWhen specified, the type will switch from using the {@link SavedObjectsType.migrations | legacy migration API}\nto use the {@link SavedObjectsType.modelVersions | modelVersion API} after the specified version.\n\nOnce opted in, it will no longer be possible to use the legacy migration API after the specified version.\n" ], "signature": [ "string | undefined" diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index 2ca13882c62e3a..78ae498b7b0768 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-02-15 +date: 2024-02-16 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 9174459ddbe95d..77f807bfa997e5 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-02-15 +date: 2024-02-16 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 6d1cff6efc6892..8cd4c426ae38c8 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-02-15 +date: 2024-02-16 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 49e4962d9d1779..a159ddb16f3990 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 7432700898657c..d6fb89d0be550f 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-02-15 +date: 2024-02-16 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 87f00769b211bf..ee97a4711e495e 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-02-15 +date: 2024-02-16 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 d81f707e8bef5c..4224700c8d33bd 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-02-15 +date: 2024-02-16 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 f12f196b69ec18..93ce998b7d3e50 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-02-15 +date: 2024-02-16 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 edfe60230a97f0..e1ab9bf040363e 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-02-15 +date: 2024-02-16 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 ff86a40eb77f58..bfbdf3fae6523d 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-02-15 +date: 2024-02-16 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 236f4906704a38..d866be7ada32be 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-02-15 +date: 2024-02-16 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 04301269bb1bce..a71e9a1b07eefb 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-02-15 +date: 2024-02-16 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 8ad4068eccf2b2..5f9faa529cc852 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-02-15 +date: 2024-02-16 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 5a3df5ca16af82..0e89dc451c66df 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-02-15 +date: 2024-02-16 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 4cee980ab848a3..5ff2ae602d75fa 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-02-15 +date: 2024-02-16 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 43248055b24fbe..1ed55967bb0960 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-02-15 +date: 2024-02-16 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 7ba648e8fc4456..fe2bda39bdbced 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-02-15 +date: 2024-02-16 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 1cf207056dc66f..33e308a8fe2a1a 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-02-15 +date: 2024-02-16 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 cbb2326c5b1543..0594c44fa4aac8 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-02-15 +date: 2024-02-16 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 7774f113c6974c..0ad2b7067af2f7 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-02-15 +date: 2024-02-16 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 8ff382f659bf7a..238e554c41ff4b 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-02-15 +date: 2024-02-16 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 db2423b0e66c83..a515d9d292189c 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-02-15 +date: 2024-02-16 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 0830f3b7fa50c1..3d94181152acf2 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-02-15 +date: 2024-02-16 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 6befa72663173e..230e713e00f1fa 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-02-15 +date: 2024-02-16 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 ab16b46fa2685d..a8feefc8b5aaab 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-02-15 +date: 2024-02-16 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 e4c10697c4cce7..ebd1808abf1754 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-02-15 +date: 2024-02-16 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 5a3e5402a3d3f8..eb299a042c0441 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 14f6d00ba3afe1..e3c6184212e923 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index 69c743c768d665..a0c85d2c03d3e9 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal'] --- import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 3a468203aced7a..b881d1eb51597c 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-02-15 +date: 2024-02-16 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 a0284cfc7ffecd..84e9f6c5d34648 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-02-15 +date: 2024-02-16 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 4c5a6d8e6f0aa5..950a977a0ccabc 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-02-15 +date: 2024-02-16 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 4a34121a6bae7d..9600136860bdbd 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-02-15 +date: 2024-02-16 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 5f91cce7c6364a..c10afaec79b86b 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-02-15 +date: 2024-02-16 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 c56e7ebef38676..4aa793654af609 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-02-15 +date: 2024-02-16 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 fe1365daa05c6c..c7a066910726ab 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-02-15 +date: 2024-02-16 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 864978aadd16d9..c8590e840bbc57 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-02-15 +date: 2024-02-16 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 17733940b703c9..727c09fdf63033 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-02-15 +date: 2024-02-16 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 8d6a2638689a51..a74e4a94336768 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-02-15 +date: 2024-02-16 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 b74cd3bcafec02..a45d6cf4f7d2f6 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-02-15 +date: 2024-02-16 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 bff0185d0be4b0..5093195f61abf0 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-02-15 +date: 2024-02-16 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 bb360772e1d1fd..62d65369c48e31 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index e038544fc4f55b..37329e8082bf20 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-02-15 +date: 2024-02-16 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 0ee919b84414ed..e95af16458fa65 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-02-15 +date: 2024-02-16 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 27562dcb4867b2..03c1d668a8dbc1 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-02-15 +date: 2024-02-16 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 980b40dd05b5b1..386066f81f0763 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index cf970339a5f0e1..be079e457690eb 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-02-15 +date: 2024-02-16 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 90f8b0da74a50c..df077283753ae7 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-02-15 +date: 2024-02-16 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 9c4fadabcbd3f5..a1faa3730cedc3 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-02-15 +date: 2024-02-16 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 ab93c9f39f22e3..ca3fa884cd6c0d 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-02-15 +date: 2024-02-16 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 145b7fa69247d7..f18500a58301b1 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-02-15 +date: 2024-02-16 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 74f3ff45abe7b9..41509953c7f9ce 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-02-15 +date: 2024-02-16 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 ead2f6be8671e1..bb9f72c5a33536 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-02-15 +date: 2024-02-16 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 1dd5d23156bc97..a748c898a477c6 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-02-15 +date: 2024-02-16 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 60d27dc295919d..aeec6b7f201478 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-02-15 +date: 2024-02-16 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 c5515546f79354..d93d6c06b7969f 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-02-15 +date: 2024-02-16 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 d4ee2459cfe81a..3e919f96d9094d 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-02-15 +date: 2024-02-16 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 e950de09706752..b4f409c8aa87b6 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-02-15 +date: 2024-02-16 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 e0e00ecdd02378..bd4bdd7e3e3a43 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-02-15 +date: 2024-02-16 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 9c956c4a3394e7..44a9d6a48ab839 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-02-15 +date: 2024-02-16 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 50920fee7d4add..0aaaff55b30700 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-02-15 +date: 2024-02-16 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 6ab0b200e2cf0b..52f12389cdba13 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-02-15 +date: 2024-02-16 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 a762959d409647..e27e509c870b9f 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 405e9ebc84ae81..051c9d02be72a3 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-02-15 +date: 2024-02-16 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 26273eaf569f6e..082943635e046f 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-02-15 +date: 2024-02-16 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 94e7476bf7fb63..0448e58dc48e32 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-02-15 +date: 2024-02-16 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 6c09359d91868f..e39cd8c906a62e 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-02-15 +date: 2024-02-16 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 a77a53f402df47..6e5b40c9ea3cd4 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-02-15 +date: 2024-02-16 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 d2d42d777ed6db..a361654e2100a5 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index e58c13b684b7c7..1cea66d427353f 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index e58ab0ea71b548..cce51a1dba51e1 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-02-15 +date: 2024-02-16 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 b2f418785f094b..136da179bc4a97 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-02-15 +date: 2024-02-16 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.devdocs.json b/api_docs/kbn_expandable_flyout.devdocs.json index fda9da45ad6e0f..f3f7f1d35646b4 100644 --- a/api_docs/kbn_expandable_flyout.devdocs.json +++ b/api_docs/kbn_expandable_flyout.devdocs.json @@ -61,10 +61,10 @@ "tags": [], "label": "ExpandableFlyoutProvider", "description": [ - "\nWrap your plugin with this context for the ExpandableFlyout React component.\nStorage property allows you to specify how the flyout state works internally.\nWith \"url\", it will be persisted into url and thus allow for deep linking & will survive webpage reloads.\n\"memory\" is based on an isolated redux context. The state is saved internally to the package, which means it will not be\npersisted when sharing url or reloading browser pages." + "\nWrap your plugin with this context for the ExpandableFlyout React component." ], "signature": [ - "({ children, storage, }: React.PropsWithChildren>) => JSX.Element" + "({ children, urlKey, }: React.PropsWithChildren>) => JSX.Element" ], "path": "packages/kbn-expandable-flyout/src/provider.tsx", "deprecated": false, @@ -75,7 +75,7 @@ "id": "def-public.ExpandableFlyoutProvider.$1", "type": "CompoundType", "tags": [], - "label": "{\n children,\n storage = 'url',\n}", + "label": "{\n children,\n urlKey,\n}", "description": [], "signature": [ "React.PropsWithChildren>" @@ -122,7 +122,7 @@ "tags": [], "label": "useExpandableFlyoutState", "description": [ - "\nThis hook allows you to access the flyout state, read open panels and previews." + "\nThis hook allows you to access the flyout state, read open right, left and preview panels." ], "signature": [ "() => ", @@ -130,8 +130,8 @@ "pluginId": "@kbn/expandable-flyout", "scope": "public", "docId": "kibKbnExpandableFlyoutPluginApi", - "section": "def-public.State", - "text": "State" + "section": "def-public.FlyoutState", + "text": "FlyoutState" } ], "path": "packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_state.ts", @@ -637,53 +637,10 @@ }, { "parentPluginId": "@kbn/expandable-flyout", - "id": "def-public.PanelPath", - "type": "Interface", - "tags": [], - "label": "PanelPath", - "description": [], - "path": "packages/kbn-expandable-flyout/src/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/expandable-flyout", - "id": "def-public.PanelPath.tab", - "type": "string", - "tags": [], - "label": "tab", - "description": [ - "\nTop level tab that to be displayed" - ], - "path": "packages/kbn-expandable-flyout/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/expandable-flyout", - "id": "def-public.PanelPath.subTab", - "type": "string", - "tags": [], - "label": "subTab", - "description": [ - "\nOptional secondary level to be displayed under top level tab" - ], - "signature": [ - "string | undefined" - ], - "path": "packages/kbn-expandable-flyout/src/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/expandable-flyout", - "id": "def-public.State", + "id": "def-public.FlyoutState", "type": "Interface", "tags": [], - "label": "State", + "label": "FlyoutState", "description": [], "path": "packages/kbn-expandable-flyout/src/state.ts", "deprecated": false, @@ -691,7 +648,7 @@ "children": [ { "parentPluginId": "@kbn/expandable-flyout", - "id": "def-public.State.left", + "id": "def-public.FlyoutState.left", "type": "Object", "tags": [], "label": "left", @@ -714,7 +671,7 @@ }, { "parentPluginId": "@kbn/expandable-flyout", - "id": "def-public.State.right", + "id": "def-public.FlyoutState.right", "type": "Object", "tags": [], "label": "right", @@ -737,7 +694,7 @@ }, { "parentPluginId": "@kbn/expandable-flyout", - "id": "def-public.State.preview", + "id": "def-public.FlyoutState.preview", "type": "Array", "tags": [], "label": "preview", @@ -752,25 +709,52 @@ "section": "def-public.FlyoutPanelProps", "text": "FlyoutPanelProps" }, - "[]" + "[] | undefined" ], "path": "packages/kbn-expandable-flyout/src/state.ts", "deprecated": false, "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/expandable-flyout", + "id": "def-public.PanelPath", + "type": "Interface", + "tags": [], + "label": "PanelPath", + "description": [], + "path": "packages/kbn-expandable-flyout/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/expandable-flyout", + "id": "def-public.PanelPath.tab", + "type": "string", + "tags": [], + "label": "tab", + "description": [ + "\nTop level tab that to be displayed" + ], + "path": "packages/kbn-expandable-flyout/src/types.ts", + "deprecated": false, + "trackAdoption": false }, { "parentPluginId": "@kbn/expandable-flyout", - "id": "def-public.State.needsSync", - "type": "CompoundType", + "id": "def-public.PanelPath.subTab", + "type": "string", "tags": [], - "label": "needsSync", + "label": "subTab", "description": [ - "\nIs the flyout in sync with external storage (eg. url)?\nThis value can be used in useEffect for example, to control whether we should\ncall an external state sync method." + "\nOptional secondary level to be displayed under top level tab" ], "signature": [ - "boolean | undefined" + "string | undefined" ], - "path": "packages/kbn-expandable-flyout/src/state.ts", + "path": "packages/kbn-expandable-flyout/src/types.ts", "deprecated": false, "trackAdoption": false } @@ -779,23 +763,7 @@ } ], "enums": [], - "misc": [ - { - "parentPluginId": "@kbn/expandable-flyout", - "id": "def-public.EXPANDABLE_FLYOUT_URL_KEY", - "type": "string", - "tags": [], - "label": "EXPANDABLE_FLYOUT_URL_KEY", - "description": [], - "signature": [ - "\"eventFlyout\"" - ], - "path": "packages/kbn-expandable-flyout/src/constants.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - } - ], + "misc": [], "objects": [] }, "server": { diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index ea5e7491b309b6..08a4ee3702eaa8 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-threat-hunting-investigations](https://github.com/org | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 39 | 0 | 15 | 1 | +| 37 | 0 | 14 | 1 | ## Client @@ -31,6 +31,3 @@ Contact [@elastic/security-threat-hunting-investigations](https://github.com/org ### Interfaces -### Consts, variables and types - - diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index df59afba8328b2..051a3818d2d933 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-02-15 +date: 2024-02-16 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 5d2f447d900729..6966bcb5958162 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-02-15 +date: 2024-02-16 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 a56884af7a0de7..4bde6ef9274e86 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-02-15 +date: 2024-02-16 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 05af0b08261ff0..e864d4123ff8a9 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-02-15 +date: 2024-02-16 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 7d6c6abf2adb70..699eacbcceaf6b 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-02-15 +date: 2024-02-16 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 439f496ac0b2a9..3ae40b00dbc6d7 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-02-15 +date: 2024-02-16 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 a102157c56ef50..474eb330b5f5a8 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-02-15 +date: 2024-02-16 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 9836a0f58f8345..334b3affa134c5 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-02-15 +date: 2024-02-16 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 6b11c676aadd00..785315017df3de 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 1e921f552b1d3e..9e07f98f9c2188 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-02-15 +date: 2024-02-16 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 a3ef6e246a2e47..50cbe6a0f4bdba 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-02-15 +date: 2024-02-16 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 e02363bf7a4a42..afc7bdfeedbc20 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-02-15 +date: 2024-02-16 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 37f1e538c53345..22971e949b5320 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-02-15 +date: 2024-02-16 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 44504896bb7b2a..f9fdfa23e0a532 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-02-15 +date: 2024-02-16 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 a86d01bda95593..f347a780e56354 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-02-15 +date: 2024-02-16 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 3b4c1f20adda38..b2f13f52cde5ef 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-02-15 +date: 2024-02-16 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 8161c873fe3ce4..681835b5b2884f 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-02-15 +date: 2024-02-16 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 7cfe9738ee8fd5..49e145af8265d3 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index e043ec7baeed41..171dca32d00919 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-02-15 +date: 2024-02-16 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 f9038c4a9bc10e..4a24609259b708 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index b387112f30589e..a3e99e3a038ca4 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 7073622725dea2..aff58c93c917f0 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-02-15 +date: 2024-02-16 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 4910129acfd5cd..0af4664f728e50 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-02-15 +date: 2024-02-16 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 cb735c52492091..bfbf8891a8f0a3 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 220de159021c46..da3c69c40126a2 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index 4a2b53315626fd..edd475d528c922 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index b15da85056c00d..104e8edb0f57a7 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-02-15 +date: 2024-02-16 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 bd921bf39b382d..0f25b8bdc79931 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-02-15 +date: 2024-02-16 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 166b74e713af76..6c293c97605183 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-02-15 +date: 2024-02-16 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 967321d06c6b93..c88df0da4da4a5 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-02-15 +date: 2024-02-16 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 e45596ff783f48..f445f51010d985 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-02-15 +date: 2024-02-16 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 e23ab7aa65969d..c1531b83d7d989 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-02-15 +date: 2024-02-16 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 75df83ddde23a1..37febb3fc561d4 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-02-15 +date: 2024-02-16 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 2ea1f3e1039ffa..b617e4499b3042 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-02-15 +date: 2024-02-16 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 7e6a3165b079f1..330be7c28cf844 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-02-15 +date: 2024-02-16 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 9d0f1fe0fdb67f..f704a18c476fd7 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-02-15 +date: 2024-02-16 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 a8903e992c4a44..ee678fb1a25552 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-02-15 +date: 2024-02-16 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 2b37099cd23b4f..f2776e1514918f 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-02-15 +date: 2024-02-16 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 8419e991c949c6..d373ab47801fa1 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-02-15 +date: 2024-02-16 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 3d878e7edb5309..e07be4a5b075f9 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-02-15 +date: 2024-02-16 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 db16f882e0effb..dc07cf9bf32028 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-02-15 +date: 2024-02-16 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 38a1975a43e831..9c4f7e54b8f251 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-02-15 +date: 2024-02-16 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 ba818848d2c616..e13c1d6ec1a69c 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-02-15 +date: 2024-02-16 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 e1b0b21bb7f885..1af3249b0e69e4 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-02-15 +date: 2024-02-16 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 4c131b8b3d1d0d..b443dcc1a03849 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-02-15 +date: 2024-02-16 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 9690ae38c273fd..dd0ee5d5831da6 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-02-15 +date: 2024-02-16 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 b1f6acda064d45..535c39f6fa2ca8 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-02-15 +date: 2024-02-16 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 b9f584c24ca88e..f9070ce558ebd0 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-02-15 +date: 2024-02-16 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 3a829773dd548b..1ae61a3a8d065d 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-02-15 +date: 2024-02-16 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 2ed429baf66174..901e4d0ac698d1 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-02-15 +date: 2024-02-16 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 57ae4a513b2245..b6c2459e6d495e 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-02-15 +date: 2024-02-16 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 f8cffad49a6abc..20e1f89d18196d 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-02-15 +date: 2024-02-16 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 6f0cb03bea867d..1a4c6e279baf2f 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-02-15 +date: 2024-02-16 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 95f2a5a80d138b..db9e757f789189 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-02-15 +date: 2024-02-16 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 cd6c371182f3b6..5cecc426b8fd29 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-02-15 +date: 2024-02-16 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 e285496d2e259a..20ec4546a3ae63 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index f28c246bd52f4e..bf74026067409b 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-02-15 +date: 2024-02-16 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 7a52a5942eb221..286d44fa2ddc78 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-02-15 +date: 2024-02-16 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 fceb0d020d4feb..64eb34adf2ece8 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-02-15 +date: 2024-02-16 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 a9383e71dfc90d..55c788be72820c 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-02-15 +date: 2024-02-16 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 32a65dfc7f126c..e463e49759ea2e 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-02-15 +date: 2024-02-16 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 d23cc74c8eab95..6cf30efa903892 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-02-15 +date: 2024-02-16 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 5f1c66ea4d9e4d..52ac6bb528b3ba 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 23351087c526fe..a07212fc524a08 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-02-15 +date: 2024-02-16 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 ceae4698f3957b..7646ea710084e7 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-02-15 +date: 2024-02-16 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 5f5915888565f1..662561d038eea7 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-02-15 +date: 2024-02-16 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 fc3c39eebf82f1..265f2c9a2d3244 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-02-15 +date: 2024-02-16 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 43172092ddc59f..28ae07878f0cfd 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 8f4ee7b8b88e8d..252d230ed580cc 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-02-15 +date: 2024-02-16 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 bbdc599a4f562e..656654aa4e158b 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-02-15 +date: 2024-02-16 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 f2ef58120a02a5..67c42f19f5e096 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 787bb3f9907876..e96b0d8d365570 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-02-15 +date: 2024-02-16 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 3847b30c4ebdf6..50273c46833307 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-02-15 +date: 2024-02-16 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 405508f7852363..f2bfe75fd8e642 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 977d326bef59fe..a224c7e334d215 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 5ea0a4f02fa13f..d597ec046ee431 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-02-15 +date: 2024-02-16 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 534c159568113e..a4249a2316f0a6 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-02-15 +date: 2024-02-16 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 67559242ca2d92..a3b66b956659a5 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-02-15 +date: 2024-02-16 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 00f118276396a6..465fcd31c67d6a 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-02-15 +date: 2024-02-16 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 3765f78ff1aaa0..756931202211ce 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-02-15 +date: 2024-02-16 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 403ecd1c5dc047..3e1fec64daa3a5 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-02-15 +date: 2024-02-16 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 c4b05522016cbd..e4148681d0de9f 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-02-15 +date: 2024-02-16 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 6a5ffff0edce56..e61e9cd53f3fe7 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-02-15 +date: 2024-02-16 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 dd5b3400ed338e..6e5e63d492bb50 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-02-15 +date: 2024-02-16 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 ef2fccf83f730d..1a127e855795c9 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-02-15 +date: 2024-02-16 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 f55e0c3afa0319..940eec0c01369c 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-02-15 +date: 2024-02-16 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 8dd47a6fcf287f..252d43daec1416 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-02-15 +date: 2024-02-16 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 91881ead4513a5..30901c0e090b5f 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_library.mdx b/api_docs/kbn_presentation_library.mdx index 0ae3ffda57fa4d..1db641a74cec5d 100644 --- a/api_docs/kbn_presentation_library.mdx +++ b/api_docs/kbn_presentation_library.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-library title: "@kbn/presentation-library" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-library plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-library'] --- import kbnPresentationLibraryObj from './kbn_presentation_library.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 9d6fe28b19194e..b886356d9a7c52 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-02-15 +date: 2024-02-16 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 d89f69adaceb59..9baacae12518e2 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-02-15 +date: 2024-02-16 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 b65c5c0237a727..8c9fb7724a9de1 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-02-15 +date: 2024-02-16 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 1cf62b3abc347f..36cd13a24c2db2 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index d747be3e2f2e2e..4b42e1dbb3d932 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-02-15 +date: 2024-02-16 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 37892878cafe54..05561c0b5ccb95 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-02-15 +date: 2024-02-16 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 994d252415e120..cf04c72c8622ac 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-02-15 +date: 2024-02-16 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 431d523783a582..16114b162fa86f 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-02-15 +date: 2024-02-16 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 195db574dd9709..5fba1d2f7be2fd 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-02-15 +date: 2024-02-16 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 668e41ab69003c..da943b9dbdcf99 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index fb6c5310e38990..83fabb5dbde7e0 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-02-15 +date: 2024-02-16 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 07fcab727f2428..6105645f940952 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-02-15 +date: 2024-02-16 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 248d6bfafa74a1..dee4f408395185 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-02-15 +date: 2024-02-16 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 67248fc24f219b..5fd01a8c518b91 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-02-15 +date: 2024-02-16 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 ab17378cc856a5..f2c1e01fdd9890 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 058522027a2eb3..ceb55033a57842 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-02-15 +date: 2024-02-16 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 dd669ba5a1beb0..ec79848baa4ae7 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-02-15 +date: 2024-02-16 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 e9dcd0a84ce0e7..1f311738c84c56 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-02-15 +date: 2024-02-16 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 0d2327c871f51d..259b7d1291ec2a 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-02-15 +date: 2024-02-16 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 953dc6ba7f2356..c0815f295370c5 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-02-15 +date: 2024-02-16 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 e0521d51c93c21..7a9b3e767646ad 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-02-15 +date: 2024-02-16 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 921a86317a938d..f497612407e555 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-02-15 +date: 2024-02-16 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 bd5534a81525ef..d7eb2bdb1a60f3 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-02-15 +date: 2024-02-16 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 2ca63756bae99c..1fa0cf7c7290d5 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-02-15 +date: 2024-02-16 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 278affebeeaadf..2d51d61d5bdf7d 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index a7248e4835dfdf..ecd35e5a80ade4 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 5a956e654d5345..d82c5c049fe2ed 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-02-15 +date: 2024-02-16 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 614a232be78e4c..3a33e5a5a804d7 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-02-15 +date: 2024-02-16 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 224cc15a38d48b..eecf8b95dc858c 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-02-15 +date: 2024-02-16 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 c22a39e03f65b9..a18ebfa7893b98 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index e2c67fec64ab86..f7bba86abdec07 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-02-15 +date: 2024-02-16 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 5077924c8cbe28..01740b58d01cb4 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-02-15 +date: 2024-02-16 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 72ff7630ef3875..252c47ecd56ac4 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-02-15 +date: 2024-02-16 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 db8aa1284f18d1..db6ce4ebaf8259 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-02-15 +date: 2024-02-16 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 e9f8cc5886d391..a6dc6155fd1c18 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 188957017e296b..09c443507f52d6 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-02-15 +date: 2024-02-16 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 90d6d1c6de97c4..f17e75b6cf4efd 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-02-15 +date: 2024-02-16 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 66b09f1df6501c..2208e357ce0067 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-02-15 +date: 2024-02-16 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 edd20e2a526112..dccbcf0d6fcea0 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 2c37d73ba5fb65..a12e600a1a1a1e 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-02-15 +date: 2024-02-16 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 3c457fd45664d3..7aad1a27afde6b 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-02-15 +date: 2024-02-16 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 5be435dcaba44c..738bbf08149583 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-02-15 +date: 2024-02-16 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 0e733843f33f2d..a235d7d1b6ca60 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 95d24ee39702a1..aea37c96691f57 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-02-15 +date: 2024-02-16 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 fabc52cd4f7f88..597f8821ea3433 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-02-15 +date: 2024-02-16 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 93ab3624d88e01..772d92f28e9a1d 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-02-15 +date: 2024-02-16 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 deb64a430f7681..2de6d9ec3f0182 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-02-15 +date: 2024-02-16 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 b668ddd1c682a2..bb33e834ada26d 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index f4af2e3ae04fb2..18e892c249ab87 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index c88bc0670e4719..026990ad741715 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-02-15 +date: 2024-02-16 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 07046d58c3bda5..4cf80f33a5bfb9 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-02-15 +date: 2024-02-16 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 0fe1f375bee827..6e1557d1f9062a 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-02-15 +date: 2024-02-16 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 406b520a56ab14..958af400713191 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-02-15 +date: 2024-02-16 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 b21b15f08bc070..eb02d878c9f0c7 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-02-15 +date: 2024-02-16 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 8ee6f78dcef09b..edd1a224799e49 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-02-15 +date: 2024-02-16 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 aaaf6ad0311b62..db8f097ac284c6 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-02-15 +date: 2024-02-16 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 bdef14b38660dd..60c53092adffc3 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-02-15 +date: 2024-02-16 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 6979f722e44f85..cab3d5827ee019 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-02-15 +date: 2024-02-16 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 bdff4a7a38ffc1..43bab93e1e00c5 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-02-15 +date: 2024-02-16 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 bb402c84c369bb..9af470c8e83376 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-02-15 +date: 2024-02-16 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 6fde4f7e3bb5a2..7ee87bea867355 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-02-15 +date: 2024-02-16 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 ff8df3905f17c6..ddc3d51f8d8f5d 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-02-15 +date: 2024-02-16 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 8dfaaf23f3f588..dd100c71488d13 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 1ce6b5e5701856..f76f429ed3d2f6 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-02-15 +date: 2024-02-16 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 2d734fe94374a7..4abbf9f3d017db 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-02-15 +date: 2024-02-16 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 e290854f908b1f..b46f4a7830ebdc 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-02-15 +date: 2024-02-16 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 6638018fb13881..9fb7cd52827f9d 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-02-15 +date: 2024-02-16 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 e3eed5853ee021..efe724d9d2dbb1 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-02-15 +date: 2024-02-16 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 d51acb9d6c3fd7..0f610183c651e6 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-02-15 +date: 2024-02-16 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 a0660396e2d19d..616e732a8d96dc 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-02-15 +date: 2024-02-16 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 532ab4338dc98b..34420d758256d1 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-02-15 +date: 2024-02-16 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 ac06d232ad3ddc..e40292299834c9 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-02-15 +date: 2024-02-16 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 26c7d8be965229..5846cd99313b02 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-02-15 +date: 2024-02-16 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 f6a893fa6666ab..7b436db7c1fdbf 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-02-15 +date: 2024-02-16 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 ebe90973fd15ca..61f8ea7ebb99a5 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-02-15 +date: 2024-02-16 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 a808e477a1825a..856a2fd1d0e061 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-02-15 +date: 2024-02-16 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 8c9f3832d35290..31c514703012c4 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-02-15 +date: 2024-02-16 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 b90348f8f5c1d1..cbadb21f3c11aa 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-02-15 +date: 2024-02-16 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 f6e0e0ef6e121f..28c0be09fa7454 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-02-15 +date: 2024-02-16 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 426982b2755cb1..a96d4be1ff86e4 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-02-15 +date: 2024-02-16 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 96960a3bd7382f..b11bb0382a8dae 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-02-15 +date: 2024-02-16 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 ef803fe3881003..43c8e8e6bd7a97 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-02-15 +date: 2024-02-16 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 4bd02b322ca984..f92d7b417d22b2 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-02-15 +date: 2024-02-16 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 65b64a0c316e40..2073f4dc66de7d 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-02-15 +date: 2024-02-16 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 d3ef30bf1a5ff4..c32af8ac68943f 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-02-15 +date: 2024-02-16 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 53c91513d98377..5f10067e8368ed 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-02-15 +date: 2024-02-16 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 0d82d49eb86f74..fd9fadce09090c 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-02-15 +date: 2024-02-16 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 1326866b1cd1e9..ad2c7edf6756dd 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-02-15 +date: 2024-02-16 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 9f0ad5e3b63649..b4be1da76b4132 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-02-15 +date: 2024-02-16 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 b072fd78463d90..b456be3e2597b1 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-02-15 +date: 2024-02-16 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 353c3251ced583..0ca90f685d190d 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-02-15 +date: 2024-02-16 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 5c4d684a25e4c7..357d99d864d2e8 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-02-15 +date: 2024-02-16 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 124fb99a5de4de..906f5068af94ad 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-02-15 +date: 2024-02-16 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 e7b73ec8ce9493..4c95733f276ea1 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-02-15 +date: 2024-02-16 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 d49ac1697e82ad..2a6e5527ab773d 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-02-15 +date: 2024-02-16 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 8b7121ac47d8cf..ba5210b87311d5 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-02-15 +date: 2024-02-16 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 41bbc2b37045ad..5f08006390c2af 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-02-15 +date: 2024-02-16 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 fdc28e77ff78e1..5a680a0aedef9b 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-02-15 +date: 2024-02-16 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 20d2997a269876..10de2da137f2d6 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-02-15 +date: 2024-02-16 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 e13f91df087981..068b6ad9d6c64d 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-02-15 +date: 2024-02-16 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 8e8aa40890a902..f3e4c821865aac 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-02-15 +date: 2024-02-16 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 26222594482dd8..1765813bc222f4 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-02-15 +date: 2024-02-16 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 9546781b522598..f699709f5cf7bc 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-02-15 +date: 2024-02-16 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 b61547c2ea922a..f16f8970e8eba6 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-02-15 +date: 2024-02-16 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 7b0e6f5942402b..c494eaf922b286 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-02-15 +date: 2024-02-16 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 0672c3957bf85b..18d1110f606b87 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-02-15 +date: 2024-02-16 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 bf24757905d296..b7d7a7862dc375 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index c260687e94ef97..e8a5b7adcd7aa5 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-02-15 +date: 2024-02-16 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 8e20e12b969b68..67e3cd96761e55 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-02-15 +date: 2024-02-16 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 2c4668f62ec5c2..117cc9e371ea3e 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-02-15 +date: 2024-02-16 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 3ad43bf145cd1a..dba89512be4424 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index a030f48f1a46de..a8a9a4896e3eb8 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-02-15 +date: 2024-02-16 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 392d3b6adcf408..a3d517e6c83d58 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-02-15 +date: 2024-02-16 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 eaf0b82677515a..f48bd619b5f4c1 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index c6be4b349ca5d8..1f925cd03a61e8 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-02-15 +date: 2024-02-16 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 733e3cd4c9f95d..c76dc5175d6cae 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-02-15 +date: 2024-02-16 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 70eef63a7347f5..fddd812cc31ba0 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-02-15 +date: 2024-02-16 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 02f2ee92efe945..628057a123bd3c 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-02-15 +date: 2024-02-16 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 20bec1478505e0..d5ab305dc5a859 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index 0a0b6bd71a214b..b0b0d657c0641e 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 6162f5792ac7a3..dc25b6370ac740 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-02-15 +date: 2024-02-16 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 59fe991c17d941..7e914a9007c376 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 4f69199461a733..728094988b1c8f 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-02-15 +date: 2024-02-16 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 22da1606df8414..d5a452ada9ebc1 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-02-15 +date: 2024-02-16 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 8f502305d5a123..b9ee31108b7dcb 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-02-15 +date: 2024-02-16 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 2da7c4cf67c705..9644d54b2be9d1 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-02-15 +date: 2024-02-16 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 cac1fb6f3c4137..6b69eb944408a9 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-02-15 +date: 2024-02-16 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 455e835ab6b1b5..fe96ce9105a10c 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-02-15 +date: 2024-02-16 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 cfeb7bd6f72a7e..8d92c3eb28030f 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-02-15 +date: 2024-02-16 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 818b50589743e6..0337bf7e5589af 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-02-15 +date: 2024-02-16 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 2e90ecb7633527..6a53ea3aedac99 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 0685311104109c..cd2fb62e96a084 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-02-15 +date: 2024-02-16 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 3e931a09dbed09..a362f08f579ea1 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-02-15 +date: 2024-02-16 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 3b36d4eb56798a..d44b4980125b57 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-02-15 +date: 2024-02-16 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 57be56661a2ae1..e8663d10645c71 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-02-15 +date: 2024-02-16 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 d671f8f3ede674..7800595721783a 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-02-15 +date: 2024-02-16 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 cf63ec00a2e9d5..dc3a6987919e43 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-02-15 +date: 2024-02-16 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 07cf5f6baeff35..585435c969ea60 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-02-15 +date: 2024-02-16 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 b717e575d7e16a..cf8c64a6ac7339 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-02-15 +date: 2024-02-16 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 f0f32d41d999c1..c21917b1a590e2 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index f94333babd9769..f66c5cb5faa50d 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-02-15 +date: 2024-02-16 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 806a33f8970311..97f23584360d01 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-02-15 +date: 2024-02-16 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 22defc10670caa..77d9f3426cd8ac 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-02-15 +date: 2024-02-16 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 2d724d8086b132..05aa2cf297aad8 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-02-15 +date: 2024-02-16 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 bc8deb79851010..34bee0d228e68d 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-02-15 +date: 2024-02-16 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 7ef7a3ce17961f..f4a09a08ef403d 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-02-15 +date: 2024-02-16 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 50d748db82844b..766fe60d587435 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-02-15 +date: 2024-02-16 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 d936136e8cc790..4e9e1cb3cc7d22 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-02-15 +date: 2024-02-16 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 1a829487734dd9..0e001cd6efaf30 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-02-15 +date: 2024-02-16 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 f390e559ccd9b3..9571660c344d5c 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-02-15 +date: 2024-02-16 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 9a69835ff0f633..c1aca6608be4f6 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_explorer.devdocs.json b/api_docs/logs_explorer.devdocs.json index a12d78ba193f32..143de97ecd90a4 100644 --- a/api_docs/logs_explorer.devdocs.json +++ b/api_docs/logs_explorer.devdocs.json @@ -613,6 +613,35 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "logsExplorer", + "id": "def-public.LogsExplorerCustomizationEvents", + "type": "Interface", + "tags": [], + "label": "LogsExplorerCustomizationEvents", + "description": [], + "path": "x-pack/plugins/observability_solution/logs_explorer/public/customizations/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logsExplorer", + "id": "def-public.LogsExplorerCustomizationEvents.onUknownDataViewSelection", + "type": "Function", + "tags": [], + "label": "onUknownDataViewSelection", + "description": [], + "signature": [ + "OnUknownDataViewSelectionHandler", + " | undefined" + ], + "path": "x-pack/plugins/observability_solution/logs_explorer/public/customizations/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "logsExplorer", "id": "def-public.LogsExplorerCustomizations", @@ -647,6 +676,27 @@ "path": "x-pack/plugins/observability_solution/logs_explorer/public/customizations/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "logsExplorer", + "id": "def-public.LogsExplorerCustomizations.events", + "type": "Object", + "tags": [], + "label": "events", + "description": [], + "signature": [ + { + "pluginId": "logsExplorer", + "scope": "public", + "docId": "kibLogsExplorerPluginApi", + "section": "def-public.LogsExplorerCustomizationEvents", + "text": "LogsExplorerCustomizationEvents" + }, + " | undefined" + ], + "path": "x-pack/plugins/observability_solution/logs_explorer/public/customizations/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -1483,6 +1533,114 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "logsExplorer", + "id": "def-common.isDatasetSelection", + "type": "Function", + "tags": [], + "label": "isDatasetSelection", + "description": [], + "signature": [ + "(input: any) => input is ", + "DatasetSelection" + ], + "path": "x-pack/plugins/observability_solution/logs_explorer/common/dataset_selection/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logsExplorer", + "id": "def-common.isDatasetSelection.$1", + "type": "Any", + "tags": [], + "label": "input", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/observability_solution/logs_explorer/common/dataset_selection/index.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "logsExplorer", + "id": "def-common.isDataViewSelection", + "type": "Function", + "tags": [], + "label": "isDataViewSelection", + "description": [], + "signature": [ + "(input: any) => input is ", + "DataViewSelection" + ], + "path": "x-pack/plugins/observability_solution/logs_explorer/common/dataset_selection/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logsExplorer", + "id": "def-common.isDataViewSelection.$1", + "type": "Any", + "tags": [], + "label": "input", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/observability_solution/logs_explorer/common/dataset_selection/index.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "logsExplorer", + "id": "def-common.isUnresolvedDatasetSelection", + "type": "Function", + "tags": [], + "label": "isUnresolvedDatasetSelection", + "description": [], + "signature": [ + "(input: any) => input is ", + { + "pluginId": "logsExplorer", + "scope": "common", + "docId": "kibLogsExplorerPluginApi", + "section": "def-common.UnresolvedDatasetSelection", + "text": "UnresolvedDatasetSelection" + } + ], + "path": "x-pack/plugins/observability_solution/logs_explorer/common/dataset_selection/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logsExplorer", + "id": "def-common.isUnresolvedDatasetSelection.$1", + "type": "Any", + "tags": [], + "label": "input", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/observability_solution/logs_explorer/common/dataset_selection/index.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [ diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 6c9ef93b53cabd..9994705a170401 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 101 | 0 | 101 | 20 | +| 110 | 3 | 110 | 22 | ## Client diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 465e6021b3b6b6..cf32fed75e713f 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-02-15 +date: 2024-02-16 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 59aac9419db6f5..3e18875bd4addd 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-02-15 +date: 2024-02-16 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 1a694847e4e0a3..ef2162bfb8ed24 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-02-15 +date: 2024-02-16 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 c0dd5788b958b8..2c16ebfdb6bc40 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-02-15 +date: 2024-02-16 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 0bed93f1d1a55c..b47a56b09e2036 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-02-15 +date: 2024-02-16 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 0693182e89b6dd..2b0f049d02950b 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-02-15 +date: 2024-02-16 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 813e8e1646de67..f54dad1b33a934 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-02-15 +date: 2024-02-16 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 d92340bd3768b5..dae523bddee60d 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-02-15 +date: 2024-02-16 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 a5a8d81024728c..920bfdf1f14a4e 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-02-15 +date: 2024-02-16 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 a69f715069d437..d102e85cca5ee6 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-02-15 +date: 2024-02-16 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 a3119e2cc137b6..32192c1dab7cf9 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-02-15 +date: 2024-02-16 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 fb36b05515f779..e148cd7d28afcc 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-02-15 +date: 2024-02-16 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 4739bb568e7058..2daa972e3f4b69 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-02-15 +date: 2024-02-16 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 83147c181fcaab..0dd9541e3381ad 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-02-15 +date: 2024-02-16 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 02061edc746ed6..e82e8fd7dd5bb4 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 6ab231087f212b..6ef18aa1164b69 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-02-15 +date: 2024-02-16 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 2eeb8d987b375e..6d8e42f1415ecb 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-02-15 +date: 2024-02-16 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 f241d37dcf47e7..0bbd546aa6ad52 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-02-15 +date: 2024-02-16 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 a0b3eda9b5ad5c..e1150121b9dbed 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-02-15 +date: 2024-02-16 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 32fd0bc9f9ebfd..ae9dae32288f09 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-02-15 +date: 2024-02-16 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 a17b9570bf2381..67f3129e0b5ae3 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 45083 | 228 | 34025 | 1744 | +| 45093 | 231 | 34035 | 1746 | ## Plugin Directory @@ -125,7 +125,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 117 | 0 | 42 | 10 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | A dashboard panel for creating links to dashboards or external links. | 57 | 0 | 57 | 6 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 226 | 0 | 97 | 52 | -| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin provides a LogsExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. | 101 | 0 | 101 | 20 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin provides a LogsExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. | 110 | 3 | 110 | 22 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes the shared components and APIs to access and visualize logs. | 302 | 0 | 276 | 32 | | logstash | [@elastic/logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 45 | 0 | 45 | 7 | @@ -179,7 +179,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 23 | 0 | 23 | 3 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 4 | 0 | 4 | 1 | | synthetics | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | This plugin visualizes data from Synthetics and Heartbeat, and integrates with other Observability solutions. | 0 | 0 | 0 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 105 | 0 | 62 | 5 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 108 | 0 | 64 | 5 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 45 | 0 | 1 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 31 | 0 | 26 | 6 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 1 | 0 | 1 | 0 | @@ -467,7 +467,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 14 | 0 | 13 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 39 | 0 | 39 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 0 | 52 | 1 | -| | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 39 | 0 | 15 | 1 | +| | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 37 | 0 | 14 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 22 | 0 | 18 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 38 | 0 | 30 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 0 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 23c0119c5b2586..e458e5861636a1 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-02-15 +date: 2024-02-16 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 c8bc5650f18548..f22614bdeeb2d0 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-02-15 +date: 2024-02-16 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 14b1b22faa6206..2c763e57da0d4c 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-02-15 +date: 2024-02-16 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 421001e383469f..30325572a010ee 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-02-15 +date: 2024-02-16 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 5868b5d46d80d7..f0414182f9da40 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-02-15 +date: 2024-02-16 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 cc971154f36e7a..de93d4513ef785 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-02-15 +date: 2024-02-16 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 99cd8699282edf..465d30a62044d5 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-02-15 +date: 2024-02-16 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 d8e4afe896f82b..d7db1a5749f389 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-02-15 +date: 2024-02-16 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 c2d8bc72e9f241..799cef10ae69dd 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-02-15 +date: 2024-02-16 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 f0f0f483341229..bdf93018dcdd8a 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-02-15 +date: 2024-02-16 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 75065550128850..724c45bad50954 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-02-15 +date: 2024-02-16 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 1e63208255ab34..fa4b71c9fd35f7 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-02-15 +date: 2024-02-16 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 f9506780e418ab..47c709317e746b 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-02-15 +date: 2024-02-16 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 bcc02637e39e34..dc5e0f98e01c8e 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-02-15 +date: 2024-02-16 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 f8947c2364e3bb..91dbd45d32d65f 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-02-15 +date: 2024-02-16 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 3f6db35d4d8056..b3766e982db419 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-02-15 +date: 2024-02-16 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 6db9427440fdaf..256e37f25dd8e1 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 62e82aff7767a4..a952be1139c5b5 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-02-15 +date: 2024-02-16 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 6411724b4475ea..64f41d64cdb60b 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-02-15 +date: 2024-02-16 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 49d12eff825a11..f87343b329ff4f 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-02-15 +date: 2024-02-16 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 e6b2a4725f46f4..bf9acd05891b16 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-02-15 +date: 2024-02-16 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 a604248ebc0900..c38858e43d6cfa 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-02-15 +date: 2024-02-16 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 64b1775ff2b889..f052b29c3f5a39 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-02-15 +date: 2024-02-16 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 d1c7aad0802038..8fa34297805255 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-02-15 +date: 2024-02-16 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 6ae50b9e7a31d4..01801e80b73526 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-02-15 +date: 2024-02-16 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 c73820b67a7549..7f6ca4a066c2fb 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index c18e496a7e9ebc..81fd954a14afed 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-02-15 +date: 2024-02-16 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 a677b9f3e34dbb..20b18d32111e51 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-02-15 +date: 2024-02-16 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 2ce6d440ff48a1..7712328c66068f 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-02-15 +date: 2024-02-16 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 34f3e23f45276e..d6121852ba4132 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.devdocs.json b/api_docs/task_manager.devdocs.json index 23398830c4a278..fd3ad76b483112 100644 --- a/api_docs/task_manager.devdocs.json +++ b/api_docs/task_manager.devdocs.json @@ -1378,6 +1378,20 @@ "path": "x-pack/plugins/task_manager/server/task.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "taskManager", + "id": "def-server.TaskInstance.timeoutOverride", + "type": "string", + "tags": [], + "label": "timeoutOverride", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/task_manager/server/task.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -1427,6 +1441,29 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "taskManager", + "id": "def-server.TaskRegisterDefinition.priority", + "type": "CompoundType", + "tags": [], + "label": "priority", + "description": [ + "\nAn optional definition of task priority. Tasks will be sorted by priority prior to claiming\nso high priority tasks will always be claimed before normal priority, which will always be\nclaimed before low priority" + ], + "signature": [ + { + "pluginId": "taskManager", + "scope": "server", + "docId": "kibTaskManagerPluginApi", + "section": "def-server.TaskPriority", + "text": "TaskPriority" + }, + " | undefined" + ], + "path": "x-pack/plugins/task_manager/server/task_type_dictionary.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "taskManager", "id": "def-server.TaskRegisterDefinition.description", @@ -1613,6 +1650,18 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "taskManager", + "id": "def-server.TaskPriority", + "type": "Enum", + "tags": [], + "label": "TaskPriority", + "description": [], + "path": "x-pack/plugins/task_manager/server/task.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "taskManager", "id": "def-server.TaskStatus", diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 5b78b8da3afb34..ba314dcced1847 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 105 | 0 | 62 | 5 | +| 108 | 0 | 64 | 5 | ## Server diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 3b1bcce3dc58d3..41bacca406277b 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-02-15 +date: 2024-02-16 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 7dfca07b802773..4ca7b03008f582 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-02-15 +date: 2024-02-16 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 c44c88c6c0667e..9d42ebe96a89ae 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-02-15 +date: 2024-02-16 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 0d54257a471b1b..4177c804098775 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index 3da7cec3ff782c..0c861230ce660c 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2024-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 847939d4395f9a..63c9171caafc6e 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-02-15 +date: 2024-02-16 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 7eab324153839d..36b95a6d82a854 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-02-15 +date: 2024-02-16 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 2ab64fc19c7477..d79e9939f748de 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index 7e62bbf35f6095..6bf18d583b50e9 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -1715,7 +1715,7 @@ "label": "transformRule", "description": [], "signature": [ - "({ rule_type_id: ruleTypeId, created_by: createdBy, updated_by: updatedBy, created_at: createdAt, updated_at: updatedAt, api_key_owner: apiKeyOwner, api_key_created_by_user: apiKeyCreatedByUser, notify_when: notifyWhen, mute_all: muteAll, muted_alert_ids: mutedInstanceIds, scheduled_task_id: scheduledTaskId, execution_status: executionStatus, actions: actions, snooze_schedule: snoozeSchedule, is_snoozed_until: isSnoozedUntil, active_snoozes: activeSnoozes, last_run: lastRun, next_run: nextRun, ...rest }: any) => any" + "({ rule_type_id: ruleTypeId, created_by: createdBy, updated_by: updatedBy, created_at: createdAt, updated_at: updatedAt, api_key_owner: apiKeyOwner, api_key_created_by_user: apiKeyCreatedByUser, notify_when: notifyWhen, mute_all: muteAll, muted_alert_ids: mutedInstanceIds, scheduled_task_id: scheduledTaskId, execution_status: executionStatus, actions: actions, snooze_schedule: snoozeSchedule, is_snoozed_until: isSnoozedUntil, active_snoozes: activeSnoozes, last_run: lastRun, next_run: nextRun, alert_delay: alertDelay, ...rest }: any) => any" ], "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/common_transformations.ts", "deprecated": false, @@ -1726,7 +1726,7 @@ "id": "def-public.transformRule.$1", "type": "Any", "tags": [], - "label": "{\n rule_type_id: ruleTypeId,\n created_by: createdBy,\n updated_by: updatedBy,\n created_at: createdAt,\n updated_at: updatedAt,\n api_key_owner: apiKeyOwner,\n api_key_created_by_user: apiKeyCreatedByUser,\n notify_when: notifyWhen,\n mute_all: muteAll,\n muted_alert_ids: mutedInstanceIds,\n scheduled_task_id: scheduledTaskId,\n execution_status: executionStatus,\n actions: actions,\n snooze_schedule: snoozeSchedule,\n is_snoozed_until: isSnoozedUntil,\n active_snoozes: activeSnoozes,\n last_run: lastRun,\n next_run: nextRun,\n ...rest\n}", + "label": "{\n rule_type_id: ruleTypeId,\n created_by: createdBy,\n updated_by: updatedBy,\n created_at: createdAt,\n updated_at: updatedAt,\n api_key_owner: apiKeyOwner,\n api_key_created_by_user: apiKeyCreatedByUser,\n notify_when: notifyWhen,\n mute_all: muteAll,\n muted_alert_ids: mutedInstanceIds,\n scheduled_task_id: scheduledTaskId,\n execution_status: executionStatus,\n actions: actions,\n snooze_schedule: snoozeSchedule,\n is_snoozed_until: isSnoozedUntil,\n active_snoozes: activeSnoozes,\n last_run: lastRun,\n next_run: nextRun,\n alert_delay: alertDelay,\n ...rest\n}", "description": [], "signature": [ "any" diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 3043e11cfdd437..c39c4e98366826 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-02-15 +date: 2024-02-16 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 740429ba72f8a4..f61e39a7178315 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-02-15 +date: 2024-02-16 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 0c139cd6b550d5..8dbab07042f3a4 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-02-15 +date: 2024-02-16 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 e990757274c3d3..dbc2842c5c1be7 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-02-15 +date: 2024-02-16 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 545d015b06ca4a..4d4b633c61e745 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-02-15 +date: 2024-02-16 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 d403835ca8a715..97c3c7d505e89e 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-02-15 +date: 2024-02-16 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 00769f1894ecc0..2c8d6f00850457 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-02-15 +date: 2024-02-16 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 23d36fa7982831..1b625d6d87d6c2 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-02-15 +date: 2024-02-16 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 8f50f20c3f9328..2578a718c69cdf 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-02-15 +date: 2024-02-16 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 bcf27bc9a70b18..25c185d86082b1 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-02-15 +date: 2024-02-16 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 e1fa68e11c3a27..a683206753400f 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-02-15 +date: 2024-02-16 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 397c72573612ba..c948cd2cab0374 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-02-15 +date: 2024-02-16 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 28589f0c4dac25..f787785e9ca8d1 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-02-15 +date: 2024-02-16 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 ef55e0fb9ddd14..a84cbfe18df08b 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-02-15 +date: 2024-02-16 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 0b20fe1ebbc493..d0f9dd4f06d410 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-02-15 +date: 2024-02-16 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 5ede594a9f88ee..4f5111f7be30a8 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-02-15 +date: 2024-02-16 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 f57459f8c00478..044965280ca536 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-02-15 +date: 2024-02-16 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 07944273068755..8d857f21bcb51e 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-02-15 +date: 2024-02-16 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 848453e5add5c1..3d4098afce3a19 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-02-15 +date: 2024-02-16 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 f147f918535933..9a22546e091147 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-02-15 +date: 2024-02-16 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 36e060481b833d..66b705625d6352 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-02-15 +date: 2024-02-16 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 a2f2cca227d323..56c715fb1d0f65 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-02-15 +date: 2024-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 1f93119b862089e81b5c33d65f0450ad6eac75e0 Mon Sep 17 00:00:00 2001 From: Matthias Wilhelm Date: Fri, 16 Feb 2024 08:52:24 +0100 Subject: [PATCH 29/40] [Lens] Unskip functional test error (#176885) --- .../apps/lens/group2/fields_list.ts | 19 +++++++++++++------ .../apps/lens/group4/show_underlying_data.ts | 15 +++++++++++---- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/x-pack/test/functional/apps/lens/group2/fields_list.ts b/x-pack/test/functional/apps/lens/group2/fields_list.ts index 743a26d3f20ee6..cb29eb74b96d1e 100644 --- a/x-pack/test/functional/apps/lens/group2/fields_list.ts +++ b/x-pack/test/functional/apps/lens/group2/fields_list.ts @@ -9,7 +9,14 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header', 'timePicker']); + const PageObjects = getPageObjects([ + 'visualize', + 'lens', + 'common', + 'header', + 'timePicker', + 'unifiedFieldList', + ]); const find = getService('find'); const log = getService('log'); const testSubjects = getService('testSubjects'); @@ -19,8 +26,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const es = getService('es'); const queryBar = getService('queryBar'); - // Failing: See https://github.com/elastic/kibana/issues/176837 - describe.skip('lens fields list tests', () => { + describe('lens fields list tests', () => { for (const datasourceType of ['form-based', 'ad-hoc', 'ad-hoc-no-timefield']) { describe(`${datasourceType} datasource`, () => { before(async () => { @@ -263,16 +269,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show new fields Available fields', async () => { await es.transport.request({ - path: '/field-update-test/_doc', + path: '/field-update-test/_doc?refresh=true', method: 'POST', body: { '@timestamp': new Date().toISOString(), - oldField: 10, + oldField: 20, newField: 20, }, }); + await PageObjects.lens.waitForField('oldField'); - await queryBar.setQuery('oldField: 10'); + await queryBar.setQuery('oldField: 20'); await queryBar.submitQuery(); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.lens.waitForField('newField'); diff --git a/x-pack/test/functional/apps/lens/group4/show_underlying_data.ts b/x-pack/test/functional/apps/lens/group4/show_underlying_data.ts index 06716c54ac0e30..fee3756e11759f 100644 --- a/x-pack/test/functional/apps/lens/group4/show_underlying_data.ts +++ b/x-pack/test/functional/apps/lens/group4/show_underlying_data.ts @@ -8,7 +8,14 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header', 'discover']); + const PageObjects = getPageObjects([ + 'visualize', + 'lens', + 'common', + 'header', + 'discover', + 'unifiedFieldList', + ]); const queryBar = getService('queryBar'); const filterBar = getService('filterBar'); const listingTable = getService('listingTable'); @@ -16,8 +23,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const find = getService('find'); const browser = getService('browser'); - // Failing: See https://github.com/elastic/kibana/issues/176828 - describe.skip('show underlying data', () => { + describe('show underlying data', () => { it('should show the open button for a compatible saved visualization', async () => { await PageObjects.visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); @@ -126,7 +132,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show the open button for a compatible saved visualization with a lucene query', async () => { - // Make the breakdown dimention contribute to filters again + // Make the breakdown dimension contribute to filters again await PageObjects.lens.openDimensionEditor( 'lnsXY_splitDimensionPanel > lns-dimensionTrigger' ); @@ -155,6 +161,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const [lensWindowHandler, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); await testSubjects.existOrFail('unifiedHistogramChart'); // check the query expect(await queryBar.getQueryString()).be.eql( From 9db8d2558c04d712105a9917a811d2b427f45c86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loix?= Date: Fri, 16 Feb 2024 18:06:33 +0000 Subject: [PATCH 30/40] [Core] Deprecate nav link status (#176383) --- examples/bfetch_explorer/public/plugin.tsx | 4 +- .../public/plugin.ts | 3 +- .../content_management_examples/tsconfig.json | 1 - examples/controls_example/public/plugin.tsx | 10 +- .../public/plugin.tsx | 4 +- .../public/plugin.tsx | 10 +- .../embeddable_explorer/public/plugin.tsx | 4 +- .../expressions_explorer/public/plugin.tsx | 4 +- .../field_formats_example/public/plugin.tsx | 10 +- examples/files_example/public/plugin.ts | 3 +- examples/files_example/tsconfig.json | 1 - examples/locator_examples/public/plugin.tsx | 4 +- examples/locator_explorer/public/plugin.tsx | 4 +- .../partial_results_example/public/plugin.tsx | 4 +- .../public/plugin.tsx | 10 +- .../public/plugin.tsx | 4 +- examples/response_stream/public/plugin.ts | 4 +- examples/routing_example/public/plugin.tsx | 10 +- .../screenshot_mode_example/public/plugin.ts | 10 +- examples/search_examples/public/plugin.ts | 10 +- .../public/plugin.ts | 8 +- .../ui_actions_explorer/public/plugin.tsx | 4 +- .../public/plugin.ts | 10 +- .../index.ts | 2 + .../src/application_service.test.ts | 83 ++++---- .../src/application_service.tsx | 9 +- .../src/utils/constants.ts | 13 ++ .../src/utils/get_app_info.test.ts | 197 +++--------------- .../src/utils/get_app_info.ts | 29 +-- .../src/utils/index.ts | 1 + .../core-application-browser/index.ts | 3 +- .../src/application.ts | 76 +++---- .../src/core_app.ts | 6 +- .../src/nav_links/nav_links_service.test.ts | 92 ++++++-- .../src/nav_links/nav_links_service.ts | 14 +- .../src/nav_links/to_nav_link.test.ts | 139 ++---------- .../src/nav_links/to_nav_link.ts | 22 +- .../project_navigation_service.test.ts | 13 ++ .../src/project_navigation/utils.test.ts | 1 + .../src/project_navigation/utils.ts | 2 - .../src/ui/header/collapsible_nav.test.tsx | 3 + .../src/ui/header/collapsible_nav.tsx | 2 +- .../src/ui/header/header.test.tsx | 10 +- .../src/ui/header/header_logo.tsx | 6 - .../src/ui/header/nav_link.tsx | 6 +- .../core-chrome-browser/src/nav_links.ts | 21 +- .../chrome/core-chrome-browser/tsconfig.json | 3 +- .../kbn-mock-idp-plugin/public/plugin.tsx | 3 +- packages/kbn-mock-idp-plugin/tsconfig.json | 1 - .../navigation/__jest__/active_node.test.tsx | 4 + .../ui/components/navigation_section_ui.tsx | 4 +- src/core/public/index.ts | 3 +- src/plugins/dev_tools/public/index.ts | 5 +- src/plugins/dev_tools/public/plugin.ts | 21 +- src/plugins/dev_tools/public/types.ts | 4 +- src/plugins/discover/public/plugin.tsx | 1 + .../home/public/application/application.tsx | 6 +- src/plugins/home/public/plugin.ts | 3 +- .../kibana_overview/public/application.tsx | 6 +- src/plugins/kibana_overview/public/plugin.ts | 11 +- src/plugins/management/public/plugin.tsx | 9 +- src/plugins/management/public/types.ts | 3 +- .../public/forward_app/forward_app.ts | 3 +- .../core_plugin_deep_links/public/plugin.tsx | 11 +- .../core_plugin_deep_links/tsconfig.json | 3 +- .../core_plugins/application_status.ts | 9 +- .../alerting_example/public/plugin.tsx | 4 +- .../embedded_lens_example/public/plugin.ts | 4 +- .../exploratory_view_example/public/plugin.ts | 4 +- .../public/plugin.tsx | 4 +- .../public/plugin.ts | 4 +- .../reporting_example/public/plugin.ts | 10 +- .../screenshotting_example/public/plugin.tsx | 3 +- .../testing_embedded_lens/public/plugin.ts | 4 +- .../public/plugin.ts | 4 +- .../public/plugin.ts | 4 +- .../public/plugin.tsx | 10 +- .../public/plugin.ts | 4 +- x-pack/plugins/apm/public/plugin.ts | 15 +- .../common/navigation/deep_links.test.ts | 9 +- .../enterprise_search/public/plugin.ts | 18 +- .../plugins/exploratory_view/public/plugin.ts | 7 +- x-pack/plugins/exploratory_view/tsconfig.json | 1 - x-pack/plugins/fleet/public/plugin.ts | 4 +- .../public/providers/application.test.ts | 11 +- .../public/providers/get_app_results.test.ts | 41 ++-- .../public/providers/get_app_results.ts | 6 +- x-pack/plugins/graph/public/plugin.ts | 10 +- x-pack/plugins/infra/public/plugin.ts | 12 +- x-pack/plugins/lens/public/plugin.ts | 3 +- x-pack/plugins/licensing/README.md | 2 +- x-pack/plugins/ml/public/plugin.ts | 2 +- .../register_search_links.ts | 4 +- .../search_deep_links.ts | 131 +++++------- x-pack/plugins/observability/public/plugin.ts | 21 +- .../public/plugin.tsx | 3 +- .../e2e/cypress/e2e/logs/system_logs.cy.ts | 4 +- .../observability_onboarding/public/plugin.ts | 6 +- .../update_global_navigation.test.tsx | 46 ++-- .../services/update_global_navigation.tsx | 79 +++---- .../public/plugin.ts | 10 +- x-pack/plugins/reporting/public/plugin.ts | 4 +- .../reporting/public/shared_imports.ts | 2 - .../plugins/screenshotting/public/plugin.tsx | 3 +- .../account_management_app.test.tsx | 3 +- .../account_management_app.tsx | 3 +- .../public/common/links/deep_links.ts | 42 ++-- .../public/common/links/types.ts | 5 + .../security_solution/public/plugin.tsx | 8 +- .../public/navigation/links/deep_links.ts | 37 ++-- .../public/navigation/links/nav.links.test.ts | 2 + .../side_navigation/navigation_tree.test.ts | 3 + .../tsconfig.json | 3 +- .../serverless_search/public/plugin.ts | 2 +- x-pack/plugins/synthetics/public/plugin.ts | 5 +- x-pack/plugins/ux/public/plugin.ts | 3 - 116 files changed, 640 insertions(+), 988 deletions(-) create mode 100644 packages/core/application/core-application-browser-internal/src/utils/constants.ts diff --git a/examples/bfetch_explorer/public/plugin.tsx b/examples/bfetch_explorer/public/plugin.tsx index cc97a5a95ce72c..fce8fec9b223e2 100644 --- a/examples/bfetch_explorer/public/plugin.tsx +++ b/examples/bfetch_explorer/public/plugin.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { Plugin, CoreSetup, AppNavLinkStatus } from '@kbn/core/public'; +import { Plugin, CoreSetup } from '@kbn/core/public'; import { BfetchPublicSetup, BfetchPublicStart } from '@kbn/bfetch-plugin/public'; import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; import { mount } from './mount'; @@ -40,7 +40,7 @@ export class BfetchExplorerPlugin implements Plugin { core.application.register({ id: 'bfetch-explorer', title: 'bfetch explorer', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount: mount(core, explorer), }); diff --git a/examples/content_management_examples/public/plugin.ts b/examples/content_management_examples/public/plugin.ts index fddb1ff657c49d..59dac695dac727 100644 --- a/examples/content_management_examples/public/plugin.ts +++ b/examples/content_management_examples/public/plugin.ts @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -import { AppNavLinkStatus } from '@kbn/core-application-browser'; import { AppMountParameters, CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import { StartDeps, SetupDeps } from './types'; @@ -23,7 +22,7 @@ export class ContentManagementExamplesPlugin core.application.register({ id: `contentManagementExamples`, title: `Content Management Examples`, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], async mount(params: AppMountParameters) { const { renderApp } = await import('./examples'); const [coreStart, deps] = await core.getStartServices(); diff --git a/examples/content_management_examples/tsconfig.json b/examples/content_management_examples/tsconfig.json index 76c8aacbdaee9d..938648544d0677 100644 --- a/examples/content_management_examples/tsconfig.json +++ b/examples/content_management_examples/tsconfig.json @@ -18,7 +18,6 @@ "@kbn/core", "@kbn/developer-examples-plugin", "@kbn/content-management-plugin", - "@kbn/core-application-browser", "@kbn/shared-ux-link-redirect-app", "@kbn/content-management-table-list-view", "@kbn/content-management-table-list-view-table", diff --git a/examples/controls_example/public/plugin.tsx b/examples/controls_example/public/plugin.tsx index 7b79d0f415d6e8..235613afda7449 100644 --- a/examples/controls_example/public/plugin.tsx +++ b/examples/controls_example/public/plugin.tsx @@ -6,13 +6,7 @@ * Side Public License, v 1. */ -import { - AppMountParameters, - AppNavLinkStatus, - CoreSetup, - CoreStart, - Plugin, -} from '@kbn/core/public'; +import { AppMountParameters, CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; @@ -35,7 +29,7 @@ export class ControlsExamplePlugin core.application.register({ id: PLUGIN_ID, title: 'Controls examples', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], async mount(params: AppMountParameters) { const [, depsStart] = await core.getStartServices(); const { renderApp } = await import('./app'); diff --git a/examples/data_view_field_editor_example/public/plugin.tsx b/examples/data_view_field_editor_example/public/plugin.tsx index 087dd2ca8572b2..270c878b9c67c6 100644 --- a/examples/data_view_field_editor_example/public/plugin.tsx +++ b/examples/data_view_field_editor_example/public/plugin.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { Plugin, CoreSetup, AppMountParameters, AppNavLinkStatus } from '@kbn/core/public'; +import { Plugin, CoreSetup, AppMountParameters } from '@kbn/core/public'; import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { IndexPatternFieldEditorStart } from '@kbn/data-view-field-editor-plugin/public'; @@ -25,7 +25,7 @@ export class DataViewFieldEditorPlugin implements Plugin { ReactDOM.render( diff --git a/examples/portable_dashboards_example/public/plugin.tsx b/examples/portable_dashboards_example/public/plugin.tsx index d5447346ce3ecf..83a7fd53dbc5dc 100644 --- a/examples/portable_dashboards_example/public/plugin.tsx +++ b/examples/portable_dashboards_example/public/plugin.tsx @@ -6,13 +6,7 @@ * Side Public License, v 1. */ -import { - AppMountParameters, - AppNavLinkStatus, - CoreSetup, - CoreStart, - Plugin, -} from '@kbn/core/public'; +import { AppMountParameters, CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import type { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; @@ -41,7 +35,7 @@ export class PortableDashboardsExamplePlugin core.application.register({ id: PLUGIN_ID, title: 'Portable dashboard examples', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], async mount(params: AppMountParameters) { const [, depsStart] = await core.getStartServices(); const { renderApp } = await import('./app'); diff --git a/examples/resizable_layout_examples/public/plugin.tsx b/examples/resizable_layout_examples/public/plugin.tsx index b1f3bcbb2e2681..53636d872ad693 100644 --- a/examples/resizable_layout_examples/public/plugin.tsx +++ b/examples/resizable_layout_examples/public/plugin.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { AppMountParameters, AppNavLinkStatus, CoreSetup, Plugin } from '@kbn/core/public'; +import { AppMountParameters, CoreSetup, Plugin } from '@kbn/core/public'; import type { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; import image from './resizable_layout_examples.png'; @@ -22,7 +22,7 @@ export class ResizableLayoutExamplesPlugin implements Plugin { core.application.register({ id: PLUGIN_ID, title: PLUGIN_NAME, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount: async (params: AppMountParameters) => { // Load application bundle const { renderApp } = await import('./application'); diff --git a/examples/response_stream/public/plugin.ts b/examples/response_stream/public/plugin.ts index e2b3e08d9e2d94..aab2d6cbc62706 100644 --- a/examples/response_stream/public/plugin.ts +++ b/examples/response_stream/public/plugin.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { Plugin, CoreSetup, AppNavLinkStatus } from '@kbn/core/public'; +import { Plugin, CoreSetup } from '@kbn/core/public'; import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; import { PLUGIN_ID, PLUGIN_NAME } from '../common/constants'; import { mount } from './mount'; @@ -26,7 +26,7 @@ export class ResponseStreamPlugin implements Plugin { core.application.register({ id: PLUGIN_ID, title: PLUGIN_NAME, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount: mount(core), }); diff --git a/examples/routing_example/public/plugin.tsx b/examples/routing_example/public/plugin.tsx index 4fbe00333b9a27..624b32b21fb2c2 100644 --- a/examples/routing_example/public/plugin.tsx +++ b/examples/routing_example/public/plugin.tsx @@ -6,13 +6,7 @@ * Side Public License, v 1. */ -import { - CoreStart, - Plugin, - CoreSetup, - AppMountParameters, - AppNavLinkStatus, -} from '@kbn/core/public'; +import { CoreStart, Plugin, CoreSetup, AppMountParameters } from '@kbn/core/public'; import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; import { getServices } from './services'; @@ -25,7 +19,7 @@ export class RoutingExamplePlugin implements Plugin<{}, {}, SetupDeps, {}> { core.application.register({ id: 'routingExample', title: 'Routing', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], async mount(params: AppMountParameters) { const [coreStart] = await core.getStartServices(); const startServices = getServices(coreStart); diff --git a/examples/screenshot_mode_example/public/plugin.ts b/examples/screenshot_mode_example/public/plugin.ts index 788e31e2e0e511..35978466689b87 100644 --- a/examples/screenshot_mode_example/public/plugin.ts +++ b/examples/screenshot_mode_example/public/plugin.ts @@ -6,13 +6,7 @@ * Side Public License, v 1. */ -import { - AppMountParameters, - CoreSetup, - CoreStart, - Plugin, - AppNavLinkStatus, -} from '@kbn/core/public'; +import { AppMountParameters, CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import { AppPluginSetupDependencies, AppPluginStartDependencies } from './types'; import { MetricsTracking } from './services'; import { PLUGIN_NAME } from '../common'; @@ -33,7 +27,7 @@ export class ScreenshotModeExamplePlugin implements Plugin { core.application.register({ id: 'screenshotModeExample', title: PLUGIN_NAME, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], async mount(params: AppMountParameters) { // Load application bundle const { renderApp } = await import('./application'); diff --git a/examples/search_examples/public/plugin.ts b/examples/search_examples/public/plugin.ts index f3c23167da63cd..b412d8d09d050f 100644 --- a/examples/search_examples/public/plugin.ts +++ b/examples/search_examples/public/plugin.ts @@ -6,13 +6,7 @@ * Side Public License, v 1. */ -import { - AppMountParameters, - AppNavLinkStatus, - CoreSetup, - CoreStart, - Plugin, -} from '@kbn/core/public'; +import { AppMountParameters, CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import { AppPluginSetupDependencies, AppPluginStartDependencies, @@ -40,7 +34,7 @@ export class SearchExamplesPlugin core.application.register({ id: 'searchExamples', title: PLUGIN_NAME, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount: async (params: AppMountParameters) => { // Load application bundle const { renderApp } = await import('./application'); diff --git a/examples/state_containers_examples/public/plugin.ts b/examples/state_containers_examples/public/plugin.ts index e3c5f4138df067..daf5c3216ef380 100644 --- a/examples/state_containers_examples/public/plugin.ts +++ b/examples/state_containers_examples/public/plugin.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { AppMountParameters, CoreSetup, Plugin, AppNavLinkStatus } from '@kbn/core/public'; +import { AppMountParameters, CoreSetup, Plugin } from '@kbn/core/public'; import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; import { AppPluginDependencies } from './with_data_services/types'; import image from './state_sync.png'; @@ -37,7 +37,7 @@ export class StateContainersExamplesPlugin implements Plugin { core.application.register({ id: 'stateContainersExampleBrowserHistory', title: examples.stateContainersExampleBrowserHistory.title, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], async mount(params: AppMountParameters) { const { renderApp, History } = await import('./todo/app'); const [coreStart] = await core.getStartServices(); @@ -54,7 +54,7 @@ export class StateContainersExamplesPlugin implements Plugin { core.application.register({ id: 'stateContainersExampleHashHistory', title: examples.stateContainersExampleHashHistory.title, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], async mount(params: AppMountParameters) { const { renderApp, History } = await import('./todo/app'); const [coreStart] = await core.getStartServices(); @@ -72,7 +72,7 @@ export class StateContainersExamplesPlugin implements Plugin { core.application.register({ id: 'stateContainersExampleWithDataServices', title: examples.stateContainersExampleWithDataServices.title, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], async mount(params: AppMountParameters) { const { renderApp } = await import('./with_data_services/application'); const [coreStart, depsStart] = await core.getStartServices(); diff --git a/examples/ui_actions_explorer/public/plugin.tsx b/examples/ui_actions_explorer/public/plugin.tsx index 369c827f3af973..fdb2357f40cdd0 100644 --- a/examples/ui_actions_explorer/public/plugin.tsx +++ b/examples/ui_actions_explorer/public/plugin.tsx @@ -7,7 +7,7 @@ */ import { UiActionsStart, UiActionsSetup } from '@kbn/ui-actions-plugin/public'; -import { Plugin, CoreSetup, AppMountParameters, AppNavLinkStatus } from '@kbn/core/public'; +import { Plugin, CoreSetup, AppMountParameters } from '@kbn/core/public'; import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; import { PHONE_TRIGGER, @@ -64,7 +64,7 @@ export class UiActionsExplorerPlugin implements Plugin { // Load application bundle const { renderApp } = await import('./application'); diff --git a/packages/core/application/core-application-browser-internal/index.ts b/packages/core/application/core-application-browser-internal/index.ts index 191df5a4ce5d9c..5e5b2334c07b7b 100644 --- a/packages/core/application/core-application-browser-internal/index.ts +++ b/packages/core/application/core-application-browser-internal/index.ts @@ -20,4 +20,6 @@ export { parseAppUrl, relativeToAbsolute, removeSlashes, + DEFAULT_APP_VISIBILITY, + DEFAULT_LINK_VISIBILITY, } from './src/utils'; diff --git a/packages/core/application/core-application-browser-internal/src/application_service.test.ts b/packages/core/application/core-application-browser-internal/src/application_service.test.ts index d58856c4f49c55..9cadadb5504f7f 100644 --- a/packages/core/application/core-application-browser-internal/src/application_service.test.ts +++ b/packages/core/application/core-application-browser-internal/src/application_service.test.ts @@ -30,12 +30,12 @@ import { ApplicationService } from './application_service'; import { App, AppDeepLink, - AppNavLinkStatus, AppStatus, AppUpdater, PublicAppInfo, } from '@kbn/core-application-browser'; import { act } from 'react-dom/test-utils'; +import { DEFAULT_APP_VISIBILITY } from './utils'; const createApp = (props: Partial): App => { return { @@ -109,7 +109,17 @@ describe('#setup()', () => { setup.register(pluginId, createApp({ id: 'app1', updater$ })); setup.register( pluginId, - createApp({ id: 'app2', deepLinks: [{ id: 'subapp1', title: 'Subapp', path: '/subapp' }] }) + createApp({ + id: 'app2', + deepLinks: [ + { + id: 'subapp1', + title: 'Subapp', + path: '/subapp', + visibleIn: undefined, // not specified + }, + ], + }) ); const { applications$ } = await service.start(startDeps); @@ -118,18 +128,18 @@ describe('#setup()', () => { expect(applications.get('app1')).toEqual( expect.objectContaining({ id: 'app1', - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: DEFAULT_APP_VISIBILITY, status: AppStatus.accessible, }) ); expect(applications.get('app2')).toEqual( expect.objectContaining({ id: 'app2', - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: DEFAULT_APP_VISIBILITY, status: AppStatus.accessible, deepLinks: [ expect.objectContaining({ - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: ['globalSearch'], // if not specified, deep links are visible in globalSearch }), ], }) @@ -147,20 +157,23 @@ describe('#setup()', () => { expect(applications.get('app1')).toEqual( expect.objectContaining({ id: 'app1', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], status: AppStatus.inaccessible, defaultPath: 'foo/bar', tooltip: 'App inaccessible due to reason', - deepLinks: [ - expect.objectContaining({ id: 'subapp2', title: 'Subapp 2', path: '/subapp2' }), - ], + deepLinks: [], // deep links are removed when the app is inaccessible }) ); expect(applications.get('app2')).toEqual( expect.objectContaining({ id: 'app2', - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: DEFAULT_APP_VISIBILITY, status: AppStatus.accessible, + deepLinks: [ + expect.objectContaining({ + visibleIn: ['globalSearch'], + }), + ], }) ); }); @@ -212,7 +225,7 @@ describe('#setup()', () => { if (app.id === 'app1') { return { status: AppStatus.inaccessible, - navLinkStatus: AppNavLinkStatus.disabled, + visibleIn: [], tooltip: 'App inaccessible due to reason', }; } @@ -228,7 +241,7 @@ describe('#setup()', () => { expect(applications.get('app1')).toEqual( expect.objectContaining({ id: 'app1', - navLinkStatus: AppNavLinkStatus.disabled, + visibleIn: [], status: AppStatus.inaccessible, tooltip: 'App inaccessible due to reason', }) @@ -236,7 +249,7 @@ describe('#setup()', () => { expect(applications.get('app2')).toEqual( expect.objectContaining({ id: 'app2', - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: DEFAULT_APP_VISIBILITY, status: AppStatus.accessible, tooltip: 'App accessible', }) @@ -248,7 +261,7 @@ describe('#setup()', () => { const pluginId = Symbol('plugin'); const appStatusUpdater$ = new BehaviorSubject((app) => ({ status: AppStatus.inaccessible, - navLinkStatus: AppNavLinkStatus.disabled, + visibleIn: [], })); setup.register(pluginId, createApp({ id: 'app1', updater$: appStatusUpdater$ })); setup.register(pluginId, createApp({ id: 'app2' })); @@ -263,7 +276,7 @@ describe('#setup()', () => { } return { status: AppStatus.inaccessible, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }; }) ); @@ -275,7 +288,7 @@ describe('#setup()', () => { expect(applications.get('app1')).toEqual( expect.objectContaining({ id: 'app1', - navLinkStatus: AppNavLinkStatus.disabled, + visibleIn: [], status: AppStatus.inaccessible, tooltip: 'App inaccessible due to reason', }) @@ -284,7 +297,7 @@ describe('#setup()', () => { expect.objectContaining({ id: 'app2', status: AppStatus.inaccessible, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }) ); }); @@ -298,7 +311,7 @@ describe('#setup()', () => { new BehaviorSubject((app) => { return { status: AppStatus.inaccessible, - navLinkStatus: AppNavLinkStatus.disabled, + visibleIn: ['globalSearch'], // passing "globalSearch" but as the app is inaccessible it will be removed }; }) ); @@ -306,7 +319,7 @@ describe('#setup()', () => { new BehaviorSubject((app) => { return { status: AppStatus.accessible, - navLinkStatus: AppNavLinkStatus.default, + visibleIn: DEFAULT_APP_VISIBILITY, }; }) ); @@ -318,7 +331,7 @@ describe('#setup()', () => { expect(applications.get('app1')).toEqual( expect.objectContaining({ id: 'app1', - navLinkStatus: AppNavLinkStatus.disabled, + visibleIn: [], status: AppStatus.inaccessible, }) ); @@ -333,7 +346,7 @@ describe('#setup()', () => { const statusUpdater = new BehaviorSubject((app) => { return { status: AppStatus.inaccessible, - navLinkStatus: AppNavLinkStatus.disabled, + visibleIn: [], }; }); setup.registerAppUpdater(statusUpdater); @@ -348,14 +361,14 @@ describe('#setup()', () => { expect.objectContaining({ id: 'app1', status: AppStatus.inaccessible, - navLinkStatus: AppNavLinkStatus.disabled, + visibleIn: [], }) ); statusUpdater.next((app) => { return { status: AppStatus.accessible, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }; }); @@ -363,7 +376,7 @@ describe('#setup()', () => { expect.objectContaining({ id: 'app1', status: AppStatus.accessible, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }) ); }); @@ -408,15 +421,13 @@ describe('#setup()', () => { { id: 'foo', title: 'Foo', - searchable: true, - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: ['globalSearch'], path: '/foo', }, { id: 'bar', title: 'Bar', - searchable: false, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], path: '/bar', }, ]; @@ -434,18 +445,16 @@ describe('#setup()', () => { deepLinks: [], id: 'foo', keywords: [], - navLinkStatus: 1, + visibleIn: ['globalSearch'], path: '/foo', - searchable: true, title: 'Foo', }, { deepLinks: [], id: 'bar', keywords: [], - navLinkStatus: 3, + visibleIn: [], path: '/bar', - searchable: false, title: 'Bar', }, ]); @@ -455,8 +464,7 @@ describe('#setup()', () => { { id: 'bar', title: 'Bar', - searchable: false, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], path: '/bar', }, ], @@ -469,9 +477,8 @@ describe('#setup()', () => { deepLinks: [], id: 'bar', keywords: [], - navLinkStatus: 3, + visibleIn: [], path: '/bar', - searchable: false, title: 'Bar', }, ]); @@ -548,7 +555,7 @@ describe('#start()', () => { expect.objectContaining({ appRoute: '/app/app1', id: 'app1', - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: DEFAULT_APP_VISIBILITY, status: AppStatus.accessible, }) ); @@ -556,7 +563,7 @@ describe('#start()', () => { expect.objectContaining({ appRoute: '/app/app2', id: 'app2', - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: DEFAULT_APP_VISIBILITY, status: AppStatus.accessible, }) ); diff --git a/packages/core/application/core-application-browser-internal/src/application_service.tsx b/packages/core/application/core-application-browser-internal/src/application_service.tsx index 8e5f2643929e7a..417b36daaf9f4b 100644 --- a/packages/core/application/core-application-browser-internal/src/application_service.tsx +++ b/packages/core/application/core-application-browser-internal/src/application_service.tsx @@ -29,7 +29,7 @@ import type { NavigateToUrlOptions, } from '@kbn/core-application-browser'; import { CapabilitiesService } from '@kbn/core-capabilities-browser-internal'; -import { AppStatus, AppNavLinkStatus } from '@kbn/core-application-browser'; +import { AppStatus } from '@kbn/core-application-browser'; import type { CustomBrandingStart } from '@kbn/core-custom-branding-browser'; import { AppRouter } from './ui'; import type { InternalApplicationSetup, InternalApplicationStart, Mounter } from './types'; @@ -206,7 +206,6 @@ export class ApplicationService { this.apps.set(app.id, { ...appProps, status: app.status ?? AppStatus.accessible, - navLinkStatus: app.navLinkStatus ?? AppNavLinkStatus.default, deepLinks: populateDeepLinkDefaults(appProps.deepLinks), }); if (updater$) { @@ -468,10 +467,6 @@ const updateStatus = (app: App, statusUpdaters: AppUpdaterWrapper[]): App => { changes.status ?? AppStatus.accessible, fields.status ?? AppStatus.accessible ), - navLinkStatus: Math.max( - changes.navLinkStatus ?? AppNavLinkStatus.default, - fields.navLinkStatus ?? AppNavLinkStatus.default - ), ...(fields.deepLinks ? { deepLinks: populateDeepLinkDefaults(fields.deepLinks) } : {}), }; } @@ -489,7 +484,7 @@ const populateDeepLinkDefaults = (deepLinks?: AppDeepLink[]): AppDeepLink[] => { } return deepLinks.map((deepLink) => ({ ...deepLink, - navLinkStatus: deepLink.navLinkStatus ?? AppNavLinkStatus.default, + visibleIn: deepLink.visibleIn ?? ['globalSearch'], // by default, deepLinks are only visible in global search. deepLinks: populateDeepLinkDefaults(deepLink.deepLinks), })); }; diff --git a/packages/core/application/core-application-browser-internal/src/utils/constants.ts b/packages/core/application/core-application-browser-internal/src/utils/constants.ts new file mode 100644 index 00000000000000..81afd701ca0d4a --- /dev/null +++ b/packages/core/application/core-application-browser-internal/src/utils/constants.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { AppDeepLinkLocations } from '@kbn/core-application-browser/src/application'; + +export const DEFAULT_APP_VISIBILITY: AppDeepLinkLocations[] = ['globalSearch', 'sideNav']; + +export const DEFAULT_LINK_VISIBILITY: AppDeepLinkLocations[] = ['globalSearch']; diff --git a/packages/core/application/core-application-browser-internal/src/utils/get_app_info.test.ts b/packages/core/application/core-application-browser-internal/src/utils/get_app_info.test.ts index 37062435488459..0ec494c4973986 100644 --- a/packages/core/application/core-application-browser-internal/src/utils/get_app_info.test.ts +++ b/packages/core/application/core-application-browser-internal/src/utils/get_app_info.test.ts @@ -7,7 +7,7 @@ */ import { of } from 'rxjs'; -import { App, AppDeepLink, AppNavLinkStatus, AppStatus } from '@kbn/core-application-browser'; +import { App, AppDeepLink, AppStatus } from '@kbn/core-application-browser'; import { getAppInfo } from './get_app_info'; describe('getAppInfo', () => { @@ -17,8 +17,6 @@ describe('getAppInfo', () => { id: 'some-id', title: 'some-title', status: AppStatus.accessible, - navLinkStatus: AppNavLinkStatus.default, - searchable: true, appRoute: `/app/some-id`, ...props, }); @@ -27,8 +25,7 @@ describe('getAppInfo', () => { id: 'some-deep-link-id', title: 'my deep link', path: '/my-deep-link', - navLinkStatus: AppNavLinkStatus.default, - searchable: true, + visibleIn: ['globalSearch'], deepLinks: [], keywords: [], ...props, @@ -42,14 +39,19 @@ describe('getAppInfo', () => { id: 'some-id', title: 'some-title', status: AppStatus.accessible, - navLinkStatus: AppNavLinkStatus.visible, - searchable: true, + visibleIn: ['globalSearch', 'sideNav'], appRoute: `/app/some-id`, keywords: [], deepLinks: [], }); }); + it('does not return any deepLinks if the app is inaccessible', () => { + const app = createApp({ status: AppStatus.inaccessible, deepLinks: [createDeepLink()] }); + const info = getAppInfo(app); + expect(info.deepLinks).toEqual([]); + }); + it('populates default values for nested deepLinks', () => { const app = createApp({ deepLinks: [ @@ -66,16 +68,14 @@ describe('getAppInfo', () => { id: 'some-id', title: 'some-title', status: AppStatus.accessible, - navLinkStatus: AppNavLinkStatus.visible, - searchable: true, + visibleIn: ['globalSearch', 'sideNav'], appRoute: `/app/some-id`, keywords: [], deepLinks: [ { id: 'sub-id', title: 'sub-title', - navLinkStatus: AppNavLinkStatus.hidden, - searchable: true, + visibleIn: ['globalSearch'], // default visibleIn added keywords: [], deepLinks: [ { @@ -83,8 +83,7 @@ describe('getAppInfo', () => { title: 'sub-sub-title', path: '/sub-sub', keywords: [], - navLinkStatus: AppNavLinkStatus.hidden, - searchable: true, + visibleIn: ['globalSearch'], deepLinks: [], // default empty array added }, ], @@ -93,92 +92,41 @@ describe('getAppInfo', () => { }); }); - it('computes the navLinkStatus depending on the app status', () => { + it('computes the visibleIn depending on the app status', () => { expect( getAppInfo( createApp({ - navLinkStatus: AppNavLinkStatus.default, + visibleIn: ['globalSearch', 'sideNav'], status: AppStatus.inaccessible, }) ) ).toEqual( expect.objectContaining({ - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }) ); expect( getAppInfo( createApp({ - navLinkStatus: AppNavLinkStatus.default, + visibleIn: ['globalSearch', 'sideNav'], status: AppStatus.accessible, }) ) ).toEqual( expect.objectContaining({ - navLinkStatus: AppNavLinkStatus.visible, - }) - ); - }); - - it('computes the searchable flag depending on the navLinkStatus when needed', () => { - expect( - getAppInfo( - createApp({ - navLinkStatus: AppNavLinkStatus.default, - searchable: undefined, - }) - ) - ).toEqual( - expect.objectContaining({ - searchable: true, - }) - ); - expect( - getAppInfo( - createApp({ - navLinkStatus: AppNavLinkStatus.visible, - searchable: undefined, - }) - ) - ).toEqual( - expect.objectContaining({ - searchable: true, - }) - ); - expect( - getAppInfo( - createApp({ - navLinkStatus: AppNavLinkStatus.disabled, - searchable: undefined, - }) - ) - ).toEqual( - expect.objectContaining({ - searchable: false, + visibleIn: ['globalSearch', 'sideNav'], }) ); expect( getAppInfo( createApp({ - navLinkStatus: AppNavLinkStatus.hidden, - searchable: undefined, + // status is not set, default to accessible + visibleIn: ['globalSearch', 'sideNav'], }) ) ).toEqual( expect.objectContaining({ - searchable: false, - }) - ); - expect( - getAppInfo( - createApp({ - navLinkStatus: AppNavLinkStatus.hidden, - searchable: true, - }) - ) - ).toEqual( - expect.objectContaining({ - searchable: true, + visibleIn: ['globalSearch', 'sideNav'], }) ); }); @@ -209,8 +157,7 @@ describe('getAppInfo', () => { id: 'some-id', title: 'some-title', status: AppStatus.accessible, - navLinkStatus: AppNavLinkStatus.visible, - searchable: true, + visibleIn: ['globalSearch', 'sideNav'], appRoute: `/app/some-id`, keywords: [], order: 3, @@ -218,16 +165,14 @@ describe('getAppInfo', () => { { id: 'sub-id', title: 'sub-title', - navLinkStatus: AppNavLinkStatus.hidden, - searchable: true, + visibleIn: ['globalSearch'], order: 2, keywords: [], deepLinks: [ { id: 'sub-sub-id', title: 'sub-sub-title', - navLinkStatus: AppNavLinkStatus.hidden, - searchable: true, + visibleIn: ['globalSearch'], order: 1, path: '/sub-sub', keywords: ['sub sub'], @@ -239,32 +184,13 @@ describe('getAppInfo', () => { }); }); - it('computes the deepLinks navLinkStatus when needed', () => { - expect( - getAppInfo( - createApp({ - deepLinks: [ - createDeepLink({ - navLinkStatus: AppNavLinkStatus.visible, - }), - ], - }) - ) - ).toEqual( - expect.objectContaining({ - deepLinks: [ - expect.objectContaining({ - navLinkStatus: AppNavLinkStatus.visible, - }), - ], - }) - ); + it('computes the deepLinks visibleIn when needed', () => { expect( getAppInfo( createApp({ deepLinks: [ createDeepLink({ - navLinkStatus: AppNavLinkStatus.default, + visibleIn: ['globalSearch', 'sideNav'], }), ], }) @@ -273,7 +199,7 @@ describe('getAppInfo', () => { expect.objectContaining({ deepLinks: [ expect.objectContaining({ - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: ['globalSearch', 'sideNav'], }), ], }) @@ -281,81 +207,14 @@ describe('getAppInfo', () => { expect( getAppInfo( createApp({ - deepLinks: [ - createDeepLink({ - navLinkStatus: undefined, - }), - ], - }) - ) - ).toEqual( - expect.objectContaining({ - deepLinks: [ - expect.objectContaining({ - navLinkStatus: AppNavLinkStatus.hidden, - }), - ], - }) - ); - }); - - it('computes the deepLinks searchable depending on the navLinkStatus when needed', () => { - expect( - getAppInfo( - createApp({ - deepLinks: [ - createDeepLink({ - navLinkStatus: AppNavLinkStatus.default, - searchable: undefined, - }), - ], - }) - ) - ).toEqual( - expect.objectContaining({ - deepLinks: [ - expect.objectContaining({ - searchable: true, - }), - ], - }) - ); - expect( - getAppInfo( - createApp({ - deepLinks: [ - createDeepLink({ - navLinkStatus: AppNavLinkStatus.hidden, - searchable: undefined, - }), - ], - }) - ) - ).toEqual( - expect.objectContaining({ - deepLinks: [ - expect.objectContaining({ - searchable: false, - }), - ], - }) - ); - expect( - getAppInfo( - createApp({ - deepLinks: [ - createDeepLink({ - navLinkStatus: AppNavLinkStatus.hidden, - searchable: true, - }), - ], + deepLinks: [createDeepLink({ visibleIn: undefined })], }) ) ).toEqual( expect.objectContaining({ deepLinks: [ expect.objectContaining({ - searchable: true, + visibleIn: ['globalSearch'], }), ], }) diff --git a/packages/core/application/core-application-browser-internal/src/utils/get_app_info.ts b/packages/core/application/core-application-browser-internal/src/utils/get_app_info.ts index b0d99d64e1e44b..0a4f0d994dadec 100644 --- a/packages/core/application/core-application-browser-internal/src/utils/get_app_info.ts +++ b/packages/core/application/core-application-browser-internal/src/utils/get_app_info.ts @@ -7,31 +7,23 @@ */ import { - AppNavLinkStatus, - AppStatus, type App, + AppStatus, type AppDeepLink, type PublicAppInfo, type PublicAppDeepLinkInfo, } from '@kbn/core-application-browser'; +import { DEFAULT_APP_VISIBILITY, DEFAULT_LINK_VISIBILITY } from './constants'; export function getAppInfo(app: App): PublicAppInfo { - const { updater$, mount, navLinkStatus = AppNavLinkStatus.default, ...infos } = app; + const { updater$, mount, visibleIn = DEFAULT_APP_VISIBILITY, ...infos } = app; return { ...infos, - status: app.status!, - navLinkStatus: - navLinkStatus === AppNavLinkStatus.default - ? app.status === AppStatus.inaccessible - ? AppNavLinkStatus.hidden - : AppNavLinkStatus.visible - : navLinkStatus, - searchable: - app.searchable ?? - (navLinkStatus === AppNavLinkStatus.default || navLinkStatus === AppNavLinkStatus.visible), + status: app.status ?? AppStatus.accessible, + visibleIn: app.status === AppStatus.inaccessible ? [] : visibleIn, appRoute: app.appRoute!, keywords: app.keywords ?? [], - deepLinks: getDeepLinkInfos(app.deepLinks), + deepLinks: app.status === AppStatus.inaccessible ? [] : getDeepLinkInfos(app.deepLinks), }; } @@ -39,16 +31,11 @@ function getDeepLinkInfos(deepLinks?: AppDeepLink[]): PublicAppDeepLinkInfo[] { if (!deepLinks) return []; return deepLinks.map( - ({ navLinkStatus = AppNavLinkStatus.default, ...rawDeepLink }): PublicAppDeepLinkInfo => { + ({ visibleIn = DEFAULT_LINK_VISIBILITY, ...rawDeepLink }): PublicAppDeepLinkInfo => { return { ...rawDeepLink, keywords: rawDeepLink.keywords ?? [], - navLinkStatus: - navLinkStatus === AppNavLinkStatus.default ? AppNavLinkStatus.hidden : navLinkStatus, - searchable: - rawDeepLink.searchable ?? - (navLinkStatus === AppNavLinkStatus.default || - navLinkStatus === AppNavLinkStatus.visible), + visibleIn, deepLinks: getDeepLinkInfos(rawDeepLink.deepLinks), }; } diff --git a/packages/core/application/core-application-browser-internal/src/utils/index.ts b/packages/core/application/core-application-browser-internal/src/utils/index.ts index f22146584f70a0..88d1cb7dc13b6c 100644 --- a/packages/core/application/core-application-browser-internal/src/utils/index.ts +++ b/packages/core/application/core-application-browser-internal/src/utils/index.ts @@ -12,3 +12,4 @@ export { parseAppUrl } from './parse_app_url'; export { relativeToAbsolute } from './relative_to_absolute'; export { removeSlashes } from './remove_slashes'; export { getLocationObservable } from './get_location_observable'; +export { DEFAULT_APP_VISIBILITY, DEFAULT_LINK_VISIBILITY } from './constants'; diff --git a/packages/core/application/core-application-browser/index.ts b/packages/core/application/core-application-browser/index.ts index eaf8b24c7679fd..f5bbffb06bad8a 100644 --- a/packages/core/application/core-application-browser/index.ts +++ b/packages/core/application/core-application-browser/index.ts @@ -18,13 +18,14 @@ export type { AppMount, AppMountParameters, AppUnmount } from './src/app_mount'; export type { App, AppDeepLink, + AppDeepLinkLocations, PublicAppInfo, AppNavOptions, PublicAppDeepLinkInfo, AppUpdater, AppUpdatableFields, } from './src/application'; -export { AppNavLinkStatus, AppStatus } from './src/application'; +export { AppStatus } from './src/application'; export type { ApplicationSetup, ApplicationStart, diff --git a/packages/core/application/core-application-browser/src/application.ts b/packages/core/application/core-application-browser/src/application.ts index 3c9d82bc9f6870..26fd540d75407f 100644 --- a/packages/core/application/core-application-browser/src/application.ts +++ b/packages/core/application/core-application-browser/src/application.ts @@ -27,31 +27,6 @@ export enum AppStatus { inaccessible = 1, } -/** - * Status of the application's navLink. - * - * @public - */ -export enum AppNavLinkStatus { - /** - * The application navLink will be `visible` if the application's {@link AppStatus} is set to `accessible` - * and `hidden` if the application status is set to `inaccessible`. - */ - default = 0, - /** - * The application navLink is visible and clickable in the navigation bar. - */ - visible = 1, - /** - * The application navLink is visible but inactive and not clickable in the navigation bar. - */ - disabled = 2, - /** - * The application navLink does not appear in the navigation bar. - */ - hidden = 3, -} - /** * App navigation menu options * @public @@ -93,7 +68,7 @@ export type AppUpdater = (app: App) => Partial | undefined; */ export type AppUpdatableFields = Pick< App, - 'status' | 'navLinkStatus' | 'searchable' | 'tooltip' | 'defaultPath' | 'deepLinks' + 'status' | 'visibleIn' | 'tooltip' | 'defaultPath' | 'deepLinks' >; /** @@ -126,17 +101,20 @@ export interface App extends AppNavOptions { status?: AppStatus; /** - * The initial status of the application's navLink. - * Defaulting to `visible` if `status` is `accessible` and `hidden` if status is `inaccessible` - * See {@link AppNavLinkStatus} - */ - navLinkStatus?: AppNavLinkStatus; - - /** - * The initial flag to determine if the application is searchable in the global search. - * Defaulting to `true` if `navLinkStatus` is `visible` or omitted. + * Optional list of locations where the app is visible. + * + * Accepts the following values: + * - "globalSearch": the link will appear in the global search bar + * - "home": the link will appear on the Kibana home page + * - "kibanaOverview": the link will appear in the Kibana overview page + * - "sideNav": the link will appear in the side navigation. + * Note: "sideNav" will be deprecated when we change the navigation to "solutions" style. + * + * @default ['globalSearch', 'sideNav'] + * unless the status is marked as `inaccessible`. + * @note Set to `[]` (empty array) to hide this link */ - searchable?: boolean; + visibleIn?: AppDeepLinkLocations[]; /** * Allow to define the default path a user should be directed to when navigating to the app. @@ -172,7 +150,7 @@ export interface App extends AppNavOptions { * start() { * // later, when the navlink needs to be updated * appUpdater.next(() => { - * navLinkStatus: AppNavLinkStatus.disabled, + * visibleIn: ['globalSearch'], * }) * } * ``` @@ -268,16 +246,15 @@ export interface App extends AppNavOptions { * * @public */ -export type PublicAppDeepLinkInfo = Omit< - AppDeepLink, - 'deepLinks' | 'keywords' | 'navLinkStatus' | 'searchable' -> & { +export type PublicAppDeepLinkInfo = Omit & { deepLinks: PublicAppDeepLinkInfo[]; keywords: string[]; - navLinkStatus: AppNavLinkStatus; - searchable: boolean; + visibleIn: AppDeepLinkLocations[]; }; +/** The places in the UI where a deepLink can be shown */ +export type AppDeepLinkLocations = 'globalSearch' | 'sideNav' | 'home' | 'kibanaOverview'; + /** * Input type for registering secondary in-app locations for an application. * @@ -293,10 +270,10 @@ export type AppDeepLink = { title: string; /** Optional keywords to match with in deep links search. Omit if this part of the hierarchy does not have a page URL. */ keywords?: string[]; - /** Optional status of the chrome navigation, defaults to `hidden` */ - navLinkStatus?: AppNavLinkStatus; - /** Optional flag to determine if the link is searchable in the global search. Defaulting to `true` if `navLinkStatus` is `visible` or omitted */ - searchable?: boolean; + /** + * Optional list of locations where the deepLink is visible. By default the deepLink is visible in "globalSearch". + */ + visibleIn?: AppDeepLinkLocations[]; /** * Optional category to use instead of the parent app category. * This property is added to customize the way a deep link is rendered in the global search. @@ -326,13 +303,12 @@ export type AppDeepLink = { */ export type PublicAppInfo = Omit< App, - 'mount' | 'updater$' | 'keywords' | 'deepLinks' | 'searchable' + 'mount' | 'updater$' | 'keywords' | 'deepLinks' | 'visibleIn' > & { // remove optional on fields populated with default values status: AppStatus; - navLinkStatus: AppNavLinkStatus; appRoute: string; keywords: string[]; deepLinks: PublicAppDeepLinkInfo[]; - searchable: boolean; + visibleIn: AppDeepLinkLocations[]; }; diff --git a/packages/core/apps/core-apps-browser-internal/src/core_app.ts b/packages/core/apps/core-apps-browser-internal/src/core_app.ts index c6a8583a149306..6ea7eb8835849e 100644 --- a/packages/core/apps/core-apps-browser-internal/src/core_app.ts +++ b/packages/core/apps/core-apps-browser-internal/src/core_app.ts @@ -13,7 +13,7 @@ import type { DocLinksStart } from '@kbn/core-doc-links-browser'; import type { InternalHttpSetup, InternalHttpStart } from '@kbn/core-http-browser-internal'; import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import type { NotificationsSetup, NotificationsStart } from '@kbn/core-notifications-browser'; -import { AppNavLinkStatus, type AppMountParameters } from '@kbn/core-application-browser'; +import { type AppMountParameters } from '@kbn/core-application-browser'; import type { InternalApplicationSetup, InternalApplicationStart, @@ -49,7 +49,7 @@ export class CoreAppsService { application.register(this.coreContext.coreId, { id: 'error', title: 'App Error', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount(params: AppMountParameters) { // Do not use an async import here in order to ensure that network failures // cannot prevent the error UI from displaying. This UI is tiny so an async @@ -66,7 +66,7 @@ export class CoreAppsService { title: 'Server Status', appRoute: '/status', chromeless: true, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount(params: AppMountParameters) { return renderStatusApp(params, { http, notifications }); }, diff --git a/packages/core/chrome/core-chrome-browser-internal/src/nav_links/nav_links_service.test.ts b/packages/core/chrome/core-chrome-browser-internal/src/nav_links/nav_links_service.test.ts index 6afa62ff189f32..7baab7605f3534 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/nav_links/nav_links_service.test.ts +++ b/packages/core/chrome/core-chrome-browser-internal/src/nav_links/nav_links_service.test.ts @@ -6,13 +6,13 @@ * Side Public License, v 1. */ -import { BehaviorSubject } from 'rxjs'; +import { BehaviorSubject, lastValueFrom } from 'rxjs'; import { take, map, takeLast } from 'rxjs/operators'; -import type { App } from '@kbn/core-application-browser'; +import { type App, AppStatus } from '@kbn/core-application-browser'; import { NavLinksService } from './nav_links_service'; -const availableApps = new Map([ - ['app1', { id: 'app1', order: 0, title: 'App 1', icon: 'app1' }], +const availableApps: ReadonlyMap = new Map([ + ['app1', { id: 'app1', order: 0, title: 'App 1', icon: 'app1', mount: () => () => undefined }], [ 'app2', { @@ -20,12 +20,14 @@ const availableApps = new Map([ order: -10, title: 'App 2', euiIconType: 'canvasApp', + mount: () => () => undefined, deepLinks: [ { id: 'deepApp1', order: 50, title: 'Deep App 1', path: '/deepapp1', + visibleIn: ['sideNav'], deepLinks: [ { id: 'deepApp2', @@ -38,7 +40,42 @@ const availableApps = new Map([ ], }, ], - ['chromelessApp', { id: 'chromelessApp', order: 20, title: 'Chromless App', chromeless: true }], + [ + 'chromelessApp', + { + id: 'chromelessApp', + order: 20, + title: 'Chromless App', + chromeless: true, + mount: () => () => undefined, + }, + ], + [ + 'inaccessibleApp', // inaccessible app + { + id: 'inaccessibleApp', + order: 30, + title: 'App inaccessible', + mount: () => () => undefined, + status: AppStatus.inaccessible, + deepLinks: [ + { + id: 'deepInaccessibleApp1', + order: 50, + title: 'Deep App 3', + path: '/deepapp3', + deepLinks: [ + { + id: 'deepInaccessibleApp2', + order: 40, + title: 'Deep App 3', + path: '/deepapp3', + }, + ], + }, + ], + }, + ], ]); const mockHttp = { @@ -55,7 +92,7 @@ describe('NavLinksService', () => { beforeEach(() => { service = new NavLinksService(); mockAppService = { - applications$: new BehaviorSubject>(availableApps as any), + applications$: new BehaviorSubject>(availableApps), }; start = service.start({ application: mockAppService, http: mockHttp }); }); @@ -63,25 +100,34 @@ describe('NavLinksService', () => { describe('#getNavLinks$()', () => { it('does not include `chromeless` applications', async () => { expect( - await start - .getNavLinks$() - .pipe( + await lastValueFrom( + start.getNavLinks$().pipe( take(1), map((links) => links.map((l) => l.id)) ) - .toPromise() + ) ).not.toContain('chromelessApp'); }); + it('does not include `inaccesible` applications', async () => { + expect( + await lastValueFrom( + start.getNavLinks$().pipe( + take(1), + map((links) => links.map((l) => l.id)) + ) + ) + ).not.toContain('inaccessibleApp'); + }); + it('sorts navlinks by `order` property', async () => { expect( - await start - .getNavLinks$() - .pipe( + await lastValueFrom( + start.getNavLinks$().pipe( take(1), map((links) => links.map((l) => l.id)) ) - .toPromise() + ) ).toEqual(['app2', 'app1', 'app2:deepApp2', 'app2:deepApp1']); }); @@ -94,7 +140,7 @@ describe('NavLinksService', () => { }); it('completes when service is stopped', async () => { - const last$ = start.getNavLinks$().pipe(takeLast(1)).toPromise(); + const last$ = lastValueFrom(start.getNavLinks$().pipe(takeLast(1))); service.stop(); await expect(last$).resolves.toBeInstanceOf(Array); }); @@ -108,6 +154,10 @@ describe('NavLinksService', () => { it('returns undefined if it does not exist', () => { expect(start.get('phony')).toBeUndefined(); }); + + it('returns undefined if app is inaccessible', () => { + expect(start.get('inaccessibleApp')).toBeUndefined(); + }); }); describe('#getAll()', () => { @@ -133,15 +183,15 @@ describe('NavLinksService', () => { describe('#enableForcedAppSwitcherNavigation()', () => { it('flips #getForceAppSwitcherNavigation$()', async () => { - await expect(start.getForceAppSwitcherNavigation$().pipe(take(1)).toPromise()).resolves.toBe( - false - ); + await expect( + lastValueFrom(start.getForceAppSwitcherNavigation$().pipe(take(1))) + ).resolves.toBe(false); start.enableForcedAppSwitcherNavigation(); - await expect(start.getForceAppSwitcherNavigation$().pipe(take(1)).toPromise()).resolves.toBe( - true - ); + await expect( + lastValueFrom(start.getForceAppSwitcherNavigation$().pipe(take(1))) + ).resolves.toBe(true); }); }); }); diff --git a/packages/core/chrome/core-chrome-browser-internal/src/nav_links/nav_links_service.ts b/packages/core/chrome/core-chrome-browser-internal/src/nav_links/nav_links_service.ts index 08466a1f35fb05..04b3fa8e3e7baa 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/nav_links/nav_links_service.ts +++ b/packages/core/chrome/core-chrome-browser-internal/src/nav_links/nav_links_service.ts @@ -34,10 +34,11 @@ export class NavLinksService { [...apps] .filter(([, app]) => !app.chromeless) .reduce((navLinks: Array<[string, NavLinkWrapper]>, [appId, app]) => { - navLinks.push( - [appId, toNavLink(app, http.basePath)], - ...toNavDeepLinks(app, app.deepLinks, http.basePath) - ); + const navLink = toNavLink(app, http.basePath); + if (navLink) { + navLinks.push([appId, navLink]); + } + navLinks.push(...toNavDeepLinks(app, app.deepLinks, http.basePath)); return navLinks; }, []) ); @@ -100,7 +101,10 @@ function toNavDeepLinks( return deepLinks.reduce((navDeepLinks: Array<[string, NavLinkWrapper]>, deepLink) => { const id = `${app.id}:${deepLink.id}`; if (deepLink.path) { - navDeepLinks.push([id, toNavLink(app, basePath, { ...deepLink, id })]); + const navDeepLink = toNavLink(app, basePath, { ...deepLink, id }); + if (navDeepLink) { + navDeepLinks.push([id, navDeepLink]); + } } navDeepLinks.push(...toNavDeepLinks(app, deepLink.deepLinks, basePath)); return navDeepLinks; diff --git a/packages/core/chrome/core-chrome-browser-internal/src/nav_links/to_nav_link.test.ts b/packages/core/chrome/core-chrome-browser-internal/src/nav_links/to_nav_link.test.ts index fec003f4f6e044..797416278ffc47 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/nav_links/to_nav_link.test.ts +++ b/packages/core/chrome/core-chrome-browser-internal/src/nav_links/to_nav_link.test.ts @@ -7,7 +7,6 @@ */ import { - AppNavLinkStatus, AppStatus, type PublicAppInfo, type PublicAppDeepLinkInfo, @@ -19,8 +18,7 @@ const app = (props: Partial = {}): PublicAppInfo => ({ id: 'some-id', title: 'some-title', status: AppStatus.accessible, - navLinkStatus: AppNavLinkStatus.default, - searchable: true, + visibleIn: ['globalSearch'], appRoute: `/app/some-id`, keywords: [], deepLinks: [], @@ -31,8 +29,7 @@ const deepLink = (props: Partial = {}): PublicAppDeepLink id: 'some-deep-link-id', title: 'my deep link', path: '/my-deep-link', - navLinkStatus: AppNavLinkStatus.default, - searchable: true, + visibleIn: ['globalSearch'], deepLinks: [], keywords: [], ...props, @@ -49,16 +46,18 @@ describe('toNavLink', () => { order: 12, tooltip: 'tooltip', euiIconType: 'my-icon', + visibleIn: ['sideNav'], }), basePath ); - expect(link.properties).toEqual( + expect(link?.properties).toEqual( expect.objectContaining({ id: 'id', title: 'title', order: 12, tooltip: 'tooltip', euiIconType: 'my-icon', + visibleIn: ['sideNav'], }) ); }); @@ -70,7 +69,7 @@ describe('toNavLink', () => { }), basePath ); - expect(link.properties.baseUrl).toEqual('http://localhost/base-path/my-route/my-path'); + expect(link?.properties.baseUrl).toEqual('http://localhost/base-path/my-route/my-path'); }); it('generates the `url` property', () => { @@ -80,7 +79,7 @@ describe('toNavLink', () => { }), basePath ); - expect(link.properties.url).toEqual('/base-path/my-route/my-path'); + expect(link?.properties.url).toEqual('/base-path/my-route/my-path'); link = toNavLink( app({ @@ -89,136 +88,28 @@ describe('toNavLink', () => { }), basePath ); - expect(link.properties.url).toEqual('/base-path/my-route/my-path/some/default/path'); + expect(link?.properties.url).toEqual('/base-path/my-route/my-path/some/default/path'); }); - it('uses the application status when the navLinkStatus is set to default', () => { + it('does not return navLink if the app status is inaccessible', () => { expect( toNavLink( app({ - navLinkStatus: AppNavLinkStatus.default, - status: AppStatus.accessible, - }), - basePath - ).properties - ).toEqual( - expect.objectContaining({ - disabled: false, - hidden: false, - }) - ); - - expect( - toNavLink( - app({ - navLinkStatus: AppNavLinkStatus.default, status: AppStatus.inaccessible, }), basePath - ).properties - ).toEqual( - expect.objectContaining({ - disabled: false, - hidden: true, - }) - ); - }); - - it('uses the navLinkStatus of the application to set the hidden and disabled properties', () => { - expect( - toNavLink( - app({ - navLinkStatus: AppNavLinkStatus.visible, - }), - basePath - ).properties - ).toEqual( - expect.objectContaining({ - disabled: false, - hidden: false, - }) - ); - - expect( - toNavLink( - app({ - navLinkStatus: AppNavLinkStatus.hidden, - }), - basePath - ).properties - ).toEqual( - expect.objectContaining({ - disabled: false, - hidden: true, - }) - ); - - expect( - toNavLink( - app({ - navLinkStatus: AppNavLinkStatus.disabled, - }), - basePath - ).properties - ).toEqual( - expect.objectContaining({ - disabled: true, - hidden: false, - }) - ); + ) + ).toBe(null); }); describe('deepLink parameter', () => { - it('should be hidden and not disabled by default', () => { - expect(toNavLink(app(), basePath, deepLink()).properties).toEqual( - expect.objectContaining({ - disabled: false, - hidden: true, - }) - ); - }); - - it('should not be hidden when navLinkStatus is visible', () => { - expect( - toNavLink( - app(), - basePath, - deepLink({ - navLinkStatus: AppNavLinkStatus.visible, - }) - ).properties - ).toEqual( - expect.objectContaining({ - disabled: false, - hidden: false, - }) - ); - }); - - it('should be disabled when navLinkStatus is disabled', () => { - expect( - toNavLink( - app(), - basePath, - deepLink({ - navLinkStatus: AppNavLinkStatus.disabled, - }) - ).properties - ).toEqual( - expect.objectContaining({ - disabled: true, - hidden: false, - }) - ); - }); - it('should have href, baseUrl and url containing the path', () => { const testApp = app({ appRoute: '/app/app-id', defaultPath: '/default-path', }); - expect(toNavLink(testApp, basePath).properties).toEqual( + expect(toNavLink(testApp, basePath)?.properties).toEqual( expect.objectContaining({ baseUrl: 'http://localhost/base-path/app/app-id', url: '/base-path/app/app-id/default-path', @@ -234,7 +125,7 @@ describe('toNavLink', () => { id: 'deep-link-id', path: '/my-deep-link', }) - ).properties + )?.properties ).toEqual( expect.objectContaining({ baseUrl: 'http://localhost/base-path/app/app-id', @@ -245,10 +136,10 @@ describe('toNavLink', () => { }); it('should use the main app category', () => { - expect(toNavLink(app(), basePath, deepLink()).properties.category).toBeUndefined(); + expect(toNavLink(app(), basePath, deepLink())?.properties.category).toBeUndefined(); const category = { id: 'some-category', label: 'some category' }; - expect(toNavLink(app({ category }), basePath, deepLink()).properties.category).toEqual( + expect(toNavLink(app({ category }), basePath, deepLink())?.properties.category).toEqual( category ); }); diff --git a/packages/core/chrome/core-chrome-browser-internal/src/nav_links/to_nav_link.ts b/packages/core/chrome/core-chrome-browser-internal/src/nav_links/to_nav_link.ts index 1d47236bc04ab9..c2b2afb8f78d83 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/nav_links/to_nav_link.ts +++ b/packages/core/chrome/core-chrome-browser-internal/src/nav_links/to_nav_link.ts @@ -8,10 +8,9 @@ import type { IBasePath } from '@kbn/core-http-browser'; import { - AppNavLinkStatus, - AppStatus, type PublicAppInfo, type PublicAppDeepLinkInfo, + AppStatus, } from '@kbn/core-application-browser'; import { appendAppPath } from '@kbn/core-application-browser-internal'; import { NavLinkWrapper } from './nav_link'; @@ -20,36 +19,23 @@ export function toNavLink( app: PublicAppInfo, basePath: IBasePath, deepLink?: PublicAppDeepLinkInfo -): NavLinkWrapper { +): NavLinkWrapper | null { const relativeBaseUrl = basePath.prepend(app.appRoute!); const url = appendAppPath(relativeBaseUrl, deepLink?.path || app.defaultPath); const href = relativeToAbsolute(url); const baseUrl = relativeToAbsolute(relativeBaseUrl); + if (app.status === AppStatus.inaccessible) return null; + return new NavLinkWrapper({ ...(deepLink || app), ...(app.category ? { category: app.category } : {}), // deepLinks use the main app category - hidden: deepLink ? isDeepNavLinkHidden(deepLink) : isAppNavLinkHidden(app), - disabled: (deepLink?.navLinkStatus ?? app.navLinkStatus) === AppNavLinkStatus.disabled, baseUrl, href, url, }); } -function isAppNavLinkHidden(app: PublicAppInfo) { - return app.navLinkStatus === AppNavLinkStatus.default - ? app.status === AppStatus.inaccessible - : app.navLinkStatus === AppNavLinkStatus.hidden; -} - -function isDeepNavLinkHidden(deepLink: PublicAppDeepLinkInfo) { - return ( - deepLink.navLinkStatus === AppNavLinkStatus.default || - deepLink.navLinkStatus === AppNavLinkStatus.hidden - ); -} - /** * @param {string} url - a relative or root relative url. If a relative path is given then the * absolute url returned will depend on the current page where this function is called from. For example diff --git a/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.test.ts b/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.test.ts index 17a34944751aa7..633c15ca5fd575 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.test.ts +++ b/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.test.ts @@ -28,6 +28,7 @@ const getNavLink = (partial: Partial = {}): ChromeNavLink => ({ baseUrl: '/app', url: `/app/${partial.id ?? 'kibana'}`, href: `/app/${partial.id ?? 'kibana'}`, + visibleIn: ['globalSearch'], ...partial, }); @@ -236,6 +237,7 @@ describe('initNavigation()', () => { id: 'foo', title: 'FOO', url: '/app/foo', + visibleIn: ['globalSearch'], }, href: '/app/foo', id: 'foo', @@ -302,6 +304,9 @@ describe('initNavigation()', () => { "id": "discover", "title": "DISCOVER", "url": "/app/discover", + "visibleIn": Array [ + "globalSearch", + ], }, "href": "/app/discover", "id": "discover", @@ -317,6 +322,9 @@ describe('initNavigation()', () => { "id": "dashboards", "title": "DASHBOARDS", "url": "/app/dashboards", + "visibleIn": Array [ + "globalSearch", + ], }, "href": "/app/dashboards", "id": "dashboards", @@ -332,6 +340,9 @@ describe('initNavigation()', () => { "id": "visualize", "title": "VISUALIZE", "url": "/app/visualize", + "visibleIn": Array [ + "globalSearch", + ], }, "href": "/app/visualize", "id": "visualize", @@ -792,6 +803,7 @@ describe('getActiveNodes$()', () => { baseUrl: '/app', url: '/app/item1', href: '/app/item1', + visibleIn: ['globalSearch'], }, }, ], @@ -848,6 +860,7 @@ describe('getActiveNodes$()', () => { baseUrl: '/app', url: '/app/item1', href: '/app/item1', + visibleIn: ['globalSearch'], }, getIsActive: expect.any(Function), }, diff --git a/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/utils.test.ts b/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/utils.test.ts index d886ee3a5d6acb..263a79f7751ad7 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/utils.test.ts +++ b/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/utils.test.ts @@ -15,6 +15,7 @@ const getDeepLink = (id: string, path: string, title = ''): ChromeNavLink => ({ href: `http://mocked/kibana/foo/${path}`, title, baseUrl: '', + visibleIn: ['globalSearch'], }); describe('flattenNav', () => { diff --git a/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/utils.ts b/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/utils.ts index 436ff7fb06d803..cbc199bbca51e0 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/utils.ts +++ b/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/utils.ts @@ -233,8 +233,6 @@ function getNodeStatus( if (!hasUserAccessToCloudLink()) return 'remove'; } - if (deepLink && deepLink.hidden) return 'hidden'; - return sideNavStatus ?? 'visible'; } diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/collapsible_nav.test.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/collapsible_nav.test.tsx index 840f8b38e4678b..c5c2edffc3289b 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/collapsible_nav.test.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/collapsible_nav.test.tsx @@ -18,6 +18,8 @@ import { CollapsibleNav } from './collapsible_nav'; const { kibana, observability, security, management } = DEFAULT_APP_CATEGORIES; +const visibleIn = ['globalSearch' as const, 'sideNav' as const]; + function mockLink({ title = 'discover', category }: Partial) { return { title, @@ -28,6 +30,7 @@ function mockLink({ title = 'discover', category }: Partial) { url: '/', isActive: true, 'data-test-subj': title, + visibleIn, }; } diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/collapsible_nav.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/collapsible_nav.tsx index 886ae8599c806a..7ef007359f74d5 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/collapsible_nav.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/collapsible_nav.tsx @@ -115,7 +115,7 @@ export function CollapsibleNav({ allLinks.filter( (link) => // Filterting out hidden links, - !link.hidden && + link.visibleIn.includes('sideNav') && // and non-data overview pages !overviewIDsToHide.includes(link.id) ), diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/header.test.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/header.test.tsx index 8d2a8550db318e..ecc20cc3c1fef5 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/header.test.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/header.test.tsx @@ -60,7 +60,14 @@ describe('Header', () => { const breadcrumbs$ = new BehaviorSubject([{ text: 'test' }]); const isLocked$ = new BehaviorSubject(false); const navLinks$ = new BehaviorSubject([ - { id: 'kibana', title: 'kibana', baseUrl: '', href: '', url: '' }, + { + id: 'kibana', + title: 'kibana', + baseUrl: '', + href: '', + url: '', + visibleIn: ['globalSearch' as const], + }, ]); const headerBanner$ = new BehaviorSubject(undefined); const customNavLink$ = new BehaviorSubject({ @@ -69,6 +76,7 @@ describe('Header', () => { baseUrl: '', url: '', href: '', + visibleIn: ['globalSearch' as const], }); const recentlyAccessed$ = new BehaviorSubject([ { link: '', label: 'dashboard', id: 'dashboard' }, diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/header_logo.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/header_logo.tsx index 029c13c354d4e6..c3dd7ecf26a0d3 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/header_logo.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/header_logo.tsx @@ -44,12 +44,6 @@ function onClick( return; } - const navLink = navLinks.find((item) => item.href === anchor.href); - if (navLink && navLink.disabled) { - event.preventDefault(); - return; - } - if (event.isDefaultPrevented() || event.altKey || event.metaKey || event.ctrlKey) { return; } diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/nav_link.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/nav_link.tsx index 8795ba75902177..d343d9c6400238 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/nav_link.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/nav_link.tsx @@ -43,7 +43,7 @@ export function createEuiListItem({ externalLink = false, iconProps, }: Props): EuiListGroupItemProps { - const { href, id, title, disabled, euiIconType, icon, tooltip, url } = link; + const { href, id, title, euiIconType, icon, tooltip, url } = link; return { label: tooltip ?? title, @@ -64,7 +64,6 @@ export function createEuiListItem({ } }, isActive: !externalLink && appId === id, - isDisabled: disabled, 'data-test-subj': dataTestSubj, ...(basePath && { iconType: euiIconType, @@ -81,7 +80,7 @@ export function createEuiButtonItem({ navigateToUrl, dataTestSubj, }: Omit) { - const { href, disabled, url, id } = link; + const { href, url, id } = link; return { href, @@ -93,7 +92,6 @@ export function createEuiButtonItem({ event.preventDefault(); navigateToUrl(url); }, - isDisabled: disabled, 'data-test-subj': dataTestSubj || `collapsibleNavAppButton-${id}`, }; } diff --git a/packages/core/chrome/core-chrome-browser/src/nav_links.ts b/packages/core/chrome/core-chrome-browser/src/nav_links.ts index 4bcc225168d011..408075796cc5cc 100644 --- a/packages/core/chrome/core-chrome-browser/src/nav_links.ts +++ b/packages/core/chrome/core-chrome-browser/src/nav_links.ts @@ -8,6 +8,7 @@ import type { Observable } from 'rxjs'; import type { AppCategory } from '@kbn/core-application-common'; +import type { AppDeepLinkLocations } from '@kbn/core-application-browser'; /** * @public @@ -66,18 +67,18 @@ export interface ChromeNavLink { readonly href: string; /** - * Disables a link from being clickable. + * List of locations where the nav link should be visible. * - * @internalRemarks - * This is only used by the ML and Graph plugins currently. They use this field - * to disable the nav link when the license is expired. - */ - readonly disabled?: boolean; - - /** - * Hides a link from the navigation. + * Accepts the following values: + * - "globalSearch": the link will appear in the global search bar + * - "home": the link will appear on the Kibana home page + * - "kibanaOverview": the link will appear in the Kibana overview page + * - "sideNav": the link will appear in the side navigation. + * Note: "sideNav" will be deprecated when we change the navigation to "solutions" style. + * + * @default ['globalSearch'] */ - readonly hidden?: boolean; + readonly visibleIn: AppDeepLinkLocations[]; } /** diff --git a/packages/core/chrome/core-chrome-browser/tsconfig.json b/packages/core/chrome/core-chrome-browser/tsconfig.json index ef655cc44a14d9..5878b7d51f3bec 100644 --- a/packages/core/chrome/core-chrome-browser/tsconfig.json +++ b/packages/core/chrome/core-chrome-browser/tsconfig.json @@ -19,7 +19,8 @@ "@kbn/deeplinks-ml", "@kbn/deeplinks-management", "@kbn/deeplinks-search", - "@kbn/deeplinks-observability" + "@kbn/deeplinks-observability", + "@kbn/core-application-browser" ], "exclude": [ "target/**/*", diff --git a/packages/kbn-mock-idp-plugin/public/plugin.tsx b/packages/kbn-mock-idp-plugin/public/plugin.tsx index db61f14098a785..cd4a4358c70d73 100644 --- a/packages/kbn-mock-idp-plugin/public/plugin.tsx +++ b/packages/kbn-mock-idp-plugin/public/plugin.tsx @@ -7,7 +7,6 @@ */ import type { PluginInitializer } from '@kbn/core-plugins-browser'; -import { AppNavLinkStatus } from '@kbn/core-application-browser'; import React from 'react'; import ReactDOM from 'react-dom'; import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; @@ -39,7 +38,7 @@ export const plugin: PluginInitializer< title: 'Mock IDP', chromeless: true, appRoute: MOCK_IDP_LOGIN_PATH, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount: async (params) => { const [[coreStart], { LoginPage }] = await Promise.all([ coreSetup.getStartServices(), diff --git a/packages/kbn-mock-idp-plugin/tsconfig.json b/packages/kbn-mock-idp-plugin/tsconfig.json index 8b53ef48893f60..83c40237334044 100644 --- a/packages/kbn-mock-idp-plugin/tsconfig.json +++ b/packages/kbn-mock-idp-plugin/tsconfig.json @@ -12,7 +12,6 @@ ], "kbn_references": [ "@kbn/config-schema", - "@kbn/core-application-browser", "@kbn/core-i18n-browser", "@kbn/core-lifecycle-browser", "@kbn/core-notifications-browser", diff --git a/packages/shared-ux/chrome/navigation/__jest__/active_node.test.tsx b/packages/shared-ux/chrome/navigation/__jest__/active_node.test.tsx index 4f51af1086b209..0ce59e02064043 100644 --- a/packages/shared-ux/chrome/navigation/__jest__/active_node.test.tsx +++ b/packages/shared-ux/chrome/navigation/__jest__/active_node.test.tsx @@ -35,6 +35,8 @@ describe('Active node', () => { return activeNodes$; }; + const visibleIn = ['globalSearch' as const]; + const navigationBody: ChromeProjectNavigationNode[] = [ { id: 'group1', @@ -51,6 +53,7 @@ describe('Active node', () => { baseUrl: '', url: '', href: '', + visibleIn, }, }, { @@ -63,6 +66,7 @@ describe('Active node', () => { baseUrl: '', url: '', href: '', + visibleIn, }, }, ], diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx index b16afb27786313..2d39d704ce5791 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx +++ b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx @@ -195,7 +195,7 @@ const nodeToEuiCollapsibleNavProps = ( const dataTestSubj = getTestSubj(navNode, isSelected); let spaceBefore = navNode.spaceBefore; - if (spaceBefore === undefined && treeDepth === 1 && hasChildren) { + if (spaceBefore === undefined && treeDepth === 1 && hasChildren && !isItem) { // For groups at level 1 that don't have a space specified we default to add a "m" // space. For all other groups, unless specified, there is no vertical space. spaceBefore = DEFAULT_SPACE_BETWEEN_LEVEL_1_GROUPS; @@ -309,7 +309,7 @@ const nodeToEuiCollapsibleNavProps = ( const hasVisibleChildren = (items?.length ?? 0) > 0; const isVisible = isItem || hasVisibleChildren; - if (isVisible && spaceBefore) { + if (isVisible && Boolean(spaceBefore)) { items.unshift({ renderItem: () => , }); diff --git a/src/core/public/index.ts b/src/core/public/index.ts index 6b29603dd63f65..d9fae6f9a7ddf4 100644 --- a/src/core/public/index.ts +++ b/src/core/public/index.ts @@ -109,11 +109,12 @@ export type { TelemetryCounterType, } from '@kbn/analytics-client'; -export { AppNavLinkStatus, AppStatus } from '@kbn/core-application-browser'; +export { AppStatus } from '@kbn/core-application-browser'; export type { ApplicationSetup, ApplicationStart, App, + AppDeepLinkLocations, AppMount, AppUnmount, AppMountParameters, diff --git a/src/plugins/dev_tools/public/index.ts b/src/plugins/dev_tools/public/index.ts index 03f0981a4a845b..a2c17dda85d1c5 100644 --- a/src/plugins/dev_tools/public/index.ts +++ b/src/plugins/dev_tools/public/index.ts @@ -9,11 +9,10 @@ // TODO: https://github.com/elastic/kibana/issues/110892 /* eslint-disable @kbn/eslint/no_export_all */ -import { PluginInitializerContext } from '@kbn/core/public'; import { DevToolsPlugin } from './plugin'; export * from './plugin'; export * from '../common/constants'; -export function plugin(initializerContext: PluginInitializerContext) { - return new DevToolsPlugin(initializerContext); +export function plugin() { + return new DevToolsPlugin(); } diff --git a/src/plugins/dev_tools/public/plugin.ts b/src/plugins/dev_tools/public/plugin.ts index 7d711ca41658fd..8b50538af2d4f1 100644 --- a/src/plugins/dev_tools/public/plugin.ts +++ b/src/plugins/dev_tools/public/plugin.ts @@ -7,19 +7,14 @@ */ import { BehaviorSubject } from 'rxjs'; -import { Plugin, CoreSetup, AppMountParameters, AppDeepLink } from '@kbn/core/public'; +import { Plugin, CoreSetup, AppMountParameters, AppDeepLink, AppStatus } from '@kbn/core/public'; import { AppUpdater } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import { sortBy } from 'lodash'; -import { - PluginInitializerContext, - AppNavLinkStatus, - DEFAULT_APP_CATEGORIES, -} from '@kbn/core/public'; +import { DEFAULT_APP_CATEGORIES } from '@kbn/core/public'; import { UrlForwardingSetup } from '@kbn/url-forwarding-plugin/public'; import { deepLinkIds as devtoolsDeeplinkIds } from '@kbn/deeplinks-devtools'; -import { ConfigSchema } from './types'; import { CreateDevToolArgs, DevToolApp, createDevToolApp } from './dev_tool'; import { DocTitleService, BreadcrumbService } from './services'; @@ -50,7 +45,7 @@ export class DevToolsPlugin implements Plugin { return sortBy([...this.devTools.values()], 'order'); } - constructor(private initializerContext: PluginInitializerContext) {} + constructor() {} public setup(coreSetup: CoreSetup, { urlForwarding }: { urlForwarding: UrlForwardingSetup }) { const { application: applicationSetup, getStartServices } = coreSetup; @@ -112,12 +107,8 @@ export class DevToolsPlugin implements Plugin { public start() { if (this.getSortedDevTools().length === 0) { - this.appStateUpdater.next(() => ({ navLinkStatus: AppNavLinkStatus.hidden })); + this.appStateUpdater.next(() => ({ status: AppStatus.inaccessible })); } else { - const config = this.initializerContext.config.get(); - const navLinkStatus = - AppNavLinkStatus[config.deeplinks.navLinkStatus as keyof typeof AppNavLinkStatus]; - this.appStateUpdater.next(() => { const deepLinks: AppDeepLink[] = [...this.devTools.values()] .filter( @@ -125,11 +116,10 @@ export class DevToolsPlugin implements Plugin { (tool) => !tool.enableRouting && !tool.isDisabled() && typeof tool.title === 'string' ) .map((tool) => { - const deepLink = { + const deepLink: AppDeepLink = { id: tool.id, title: tool.title as string, path: `#/${tool.id}`, - navLinkStatus, }; if (!devtoolsDeeplinkIds.some((id) => id === deepLink.id)) { throw new Error('Deeplink must be registered in package.'); @@ -139,7 +129,6 @@ export class DevToolsPlugin implements Plugin { return { deepLinks, - navLinkStatus, }; }); } diff --git a/src/plugins/dev_tools/public/types.ts b/src/plugins/dev_tools/public/types.ts index 64e9c1f68f01ad..972afe57632053 100644 --- a/src/plugins/dev_tools/public/types.ts +++ b/src/plugins/dev_tools/public/types.ts @@ -6,10 +6,8 @@ * Side Public License, v 1. */ -import { AppNavLinkStatus } from '@kbn/core/public'; - export interface ConfigSchema { deeplinks: { - navLinkStatus: keyof typeof AppNavLinkStatus; + navLinkStatus: 'default' | 'visible'; }; } diff --git a/src/plugins/discover/public/plugin.tsx b/src/plugins/discover/public/plugin.tsx index 3ed7bd54379b59..48a65f6952c53f 100644 --- a/src/plugins/discover/public/plugin.tsx +++ b/src/plugins/discover/public/plugin.tsx @@ -296,6 +296,7 @@ export class DiscoverPlugin euiIconType: 'logoKibana', defaultPath: '#/', category: DEFAULT_APP_CATEGORIES.kibana, + visibleIn: ['globalSearch', 'sideNav', 'kibanaOverview'], mount: async (params: AppMountParameters) => { const [coreStart, discoverStartPlugins] = await core.getStartServices(); setScopedHistory(params.history); diff --git a/src/plugins/home/public/application/application.tsx b/src/plugins/home/public/application/application.tsx index 8458c0300fc75f..d289d4c54d827e 100644 --- a/src/plugins/home/public/application/application.tsx +++ b/src/plugins/home/public/application/application.tsx @@ -37,7 +37,11 @@ export const renderApp = async ( const navLinksSubscription = chrome.navLinks.getNavLinks$().subscribe((navLinks) => { const solutions = featureCatalogue .getSolutions() - .filter(({ id }) => navLinks.find(({ category, hidden }) => !hidden && category?.id === id)); + .filter(({ id }) => + navLinks.find( + ({ visibleIn, category }) => visibleIn.includes('home') && category?.id === id + ) + ); render( { const trackUiMetric = usageCollection ? usageCollection.reportUiCounter.bind(usageCollection, 'Kibana_home') diff --git a/src/plugins/kibana_overview/public/application.tsx b/src/plugins/kibana_overview/public/application.tsx index d0a0be8ab653eb..dce7573f63f530 100644 --- a/src/plugins/kibana_overview/public/application.tsx +++ b/src/plugins/kibana_overview/public/application.tsx @@ -34,7 +34,11 @@ export const renderApp = ( const solutions = home.featureCatalogue .getSolutions() .filter(({ id }) => id !== 'kibana') - .filter(({ id }) => navLinks.find(({ category, hidden }) => !hidden && category?.id === id)); + .filter(({ id }) => + navLinks.find( + ({ category, visibleIn }) => visibleIn.includes('kibanaOverview') && category?.id === id + ) + ); ReactDOM.render( diff --git a/src/plugins/kibana_overview/public/plugin.ts b/src/plugins/kibana_overview/public/plugin.ts index e5b33ed1544f24..1387d402cbe2de 100644 --- a/src/plugins/kibana_overview/public/plugin.ts +++ b/src/plugins/kibana_overview/public/plugin.ts @@ -16,7 +16,6 @@ import { Plugin, DEFAULT_APP_CATEGORIES, AppStatus, - AppNavLinkStatus, } from '@kbn/core/public'; import { KibanaOverviewPluginSetup, @@ -49,7 +48,8 @@ export class KibanaOverviewPlugin map((navLinks) => { const hasKibanaApp = Boolean( navLinks.find( - ({ id, category, hidden }) => !hidden && category?.id === 'kibana' && id !== PLUGIN_ID + ({ id, category, visibleIn }) => + visibleIn.length > 0 && category?.id === 'kibana' && id !== PLUGIN_ID ) ); @@ -58,11 +58,7 @@ export class KibanaOverviewPlugin distinct(), map((hasKibanaApp) => { return () => { - if (!hasKibanaApp) { - return { status: AppStatus.inaccessible, navLinkStatus: AppNavLinkStatus.hidden }; - } else { - return { status: AppStatus.accessible, navLinkStatus: AppNavLinkStatus.default }; - } + return { status: hasKibanaApp ? AppStatus.accessible : AppStatus.inaccessible }; }; }) ); @@ -76,6 +72,7 @@ export class KibanaOverviewPlugin order: 1, updater$: appUpdater$, appRoute: PLUGIN_PATH, + visibleIn: ['globalSearch', 'home', 'sideNav'], async mount(params: AppMountParameters) { // Load application bundle const { renderApp } = await import('./application'); diff --git a/src/plugins/management/public/plugin.tsx b/src/plugins/management/public/plugin.tsx index f3df5201cae7e8..060165e673d693 100644 --- a/src/plugins/management/public/plugin.tsx +++ b/src/plugins/management/public/plugin.tsx @@ -20,7 +20,6 @@ import { AppMountParameters, AppUpdater, AppStatus, - AppNavLinkStatus, AppDeepLink, } from '@kbn/core/public'; import { ConfigSchema, ManagementSetup, ManagementStart, NavigationCardsSubject } from './types'; @@ -55,21 +54,15 @@ export class ManagementPlugin private readonly managementSections = new ManagementSectionsService(); private readonly appUpdater = new BehaviorSubject(() => { - const config = this.initializerContext.config.get(); - const navLinkStatus = - AppNavLinkStatus[config.deeplinks.navLinkStatus as keyof typeof AppNavLinkStatus]; - const deepLinks: AppDeepLink[] = Object.values(this.managementSections.definedSections).map( (section: ManagementSection) => ({ id: section.id, title: section.title, - navLinkStatus, deepLinks: section.getAppsEnabled().map((mgmtApp) => ({ id: mgmtApp.id, title: mgmtApp.title, path: mgmtApp.basePath, keywords: mgmtApp.keywords, - navLinkStatus, })), }) ); @@ -161,7 +154,7 @@ export class ManagementPlugin this.appUpdater.next(() => { return { status: AppStatus.inaccessible, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }; }); } diff --git a/src/plugins/management/public/types.ts b/src/plugins/management/public/types.ts index 9201beeb576964..25b572ff4089ea 100644 --- a/src/plugins/management/public/types.ts +++ b/src/plugins/management/public/types.ts @@ -11,7 +11,6 @@ import { ScopedHistory, Capabilities } from '@kbn/core/public'; import type { LocatorPublic } from '@kbn/share-plugin/common'; import { ChromeBreadcrumb, CoreTheme } from '@kbn/core/public'; import type { CardsNavigationComponentProps } from '@kbn/management-cards-navigation'; -import { AppNavLinkStatus } from '@kbn/core/public'; import { ManagementSection, RegisterManagementSectionArgs } from './utils'; import type { ManagementAppLocatorParams } from '../common/locator'; @@ -101,6 +100,6 @@ export interface AppDependencies { export interface ConfigSchema { deeplinks: { - navLinkStatus: keyof typeof AppNavLinkStatus; + navLinkStatus: 'default' | 'visible'; }; } diff --git a/src/plugins/url_forwarding/public/forward_app/forward_app.ts b/src/plugins/url_forwarding/public/forward_app/forward_app.ts index 5b4d62334ffcf4..f372ff21b0c13d 100644 --- a/src/plugins/url_forwarding/public/forward_app/forward_app.ts +++ b/src/plugins/url_forwarding/public/forward_app/forward_app.ts @@ -7,7 +7,6 @@ */ import { App, AppMountParameters, CoreSetup } from '@kbn/core/public'; -import { AppNavLinkStatus } from '@kbn/core/public'; import { navigateToLegacyKibanaUrl } from './navigate_to_legacy_kibana_url'; import { ForwardDefinition, UrlForwardingStart } from '../plugin'; @@ -19,7 +18,7 @@ export const createLegacyUrlForwardApp = ( chromeless: true, title: 'Legacy URL migration', appRoute: '/app/kibana#/', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], async mount(params: AppMountParameters) { const hash = params.history.location.hash.substr(1); diff --git a/test/plugin_functional/plugins/core_plugin_deep_links/public/plugin.tsx b/test/plugin_functional/plugins/core_plugin_deep_links/public/plugin.tsx index 2c1af49e7eb6b5..58af9a58578544 100644 --- a/test/plugin_functional/plugins/core_plugin_deep_links/public/plugin.tsx +++ b/test/plugin_functional/plugins/core_plugin_deep_links/public/plugin.tsx @@ -6,8 +6,9 @@ * Side Public License, v 1. */ +import { DEFAULT_APP_VISIBILITY } from '@kbn/core-application-browser-internal'; import { Plugin, CoreSetup } from '@kbn/core/public'; -import { DEFAULT_APP_CATEGORIES, AppNavLinkStatus } from '@kbn/core/public'; +import { DEFAULT_APP_CATEGORIES } from '@kbn/core/public'; export class CorePluginDeepLinksPlugin implements Plugin @@ -19,19 +20,19 @@ export class CorePluginDeepLinksPlugin appRoute: '/app/dl', defaultPath: '/home', category: DEFAULT_APP_CATEGORIES.security, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], deepLinks: [ { id: 'home', title: 'DL Home', path: '/home', - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: DEFAULT_APP_VISIBILITY, }, { id: 'pageA', title: 'DL page A', path: '/page-a', - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: DEFAULT_APP_VISIBILITY, }, { id: 'sectionOne', @@ -41,7 +42,7 @@ export class CorePluginDeepLinksPlugin id: 'pageB', title: 'DL page B', path: '/page-b', - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: DEFAULT_APP_VISIBILITY, }, ], }, diff --git a/test/plugin_functional/plugins/core_plugin_deep_links/tsconfig.json b/test/plugin_functional/plugins/core_plugin_deep_links/tsconfig.json index 840bf1e8c59475..70f09b92a6846d 100644 --- a/test/plugin_functional/plugins/core_plugin_deep_links/tsconfig.json +++ b/test/plugin_functional/plugins/core_plugin_deep_links/tsconfig.json @@ -14,6 +14,7 @@ ], "kbn_references": [ "@kbn/core", - "@kbn/shared-ux-router" + "@kbn/shared-ux-router", + "@kbn/core-application-browser-internal" ] } diff --git a/test/plugin_functional/test_suites/core_plugins/application_status.ts b/test/plugin_functional/test_suites/core_plugins/application_status.ts index 9d7c378d3be3ec..4e7e1d84a78feb 100644 --- a/test/plugin_functional/test_suites/core_plugins/application_status.ts +++ b/test/plugin_functional/test_suites/core_plugins/application_status.ts @@ -8,7 +8,7 @@ import Url from 'url'; import expect from '@kbn/expect'; -import { AppNavLinkStatus, AppStatus, AppUpdatableFields } from '@kbn/core-application-browser'; +import { AppStatus, AppUpdatableFields } from '@kbn/core-application-browser'; import { PluginFunctionalProviderContext } from '../../services'; import '@kbn/core-app-status-plugin/public/types'; @@ -47,16 +47,15 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide await PageObjects.common.navigateToApp('app_status_start'); }); - it('can change the navLink status at runtime', async () => { + it('can change the visibleIn array at runtime', async () => { await setAppStatus({ - navLinkStatus: AppNavLinkStatus.disabled, + visibleIn: ['sideNav'], }); let link = await appsMenu.getLink('App Status'); expect(link).not.to.eql(undefined); - expect(link!.disabled).to.eql(true); await setAppStatus({ - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }); link = await appsMenu.getLink('App Status'); expect(link).to.eql(undefined); diff --git a/x-pack/examples/alerting_example/public/plugin.tsx b/x-pack/examples/alerting_example/public/plugin.tsx index 4c3fd1ae88e5f7..d72c426f073f83 100644 --- a/x-pack/examples/alerting_example/public/plugin.tsx +++ b/x-pack/examples/alerting_example/public/plugin.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { Plugin, CoreSetup, AppMountParameters, AppNavLinkStatus } from '@kbn/core/public'; +import { Plugin, CoreSetup, AppMountParameters } from '@kbn/core/public'; import { PluginSetupContract as AlertingSetup } from '@kbn/alerting-plugin/public'; import { ChartsPluginStart } from '@kbn/charts-plugin/public'; import { @@ -42,7 +42,7 @@ export class AlertingExamplePlugin implements Plugin { core.application.register({ id: PLUGIN_ID, title: PLUGIN_NAME, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], async mount(params: AppMountParameters) { // Load application bundle const { renderApp } = await import('./application'); diff --git a/x-pack/examples/screenshotting_example/public/plugin.tsx b/x-pack/examples/screenshotting_example/public/plugin.tsx index 03cb974567dbbf..a36a2c478799ef 100644 --- a/x-pack/examples/screenshotting_example/public/plugin.tsx +++ b/x-pack/examples/screenshotting_example/public/plugin.tsx @@ -9,7 +9,6 @@ import React from 'react'; import ReactDOM from 'react-dom'; import type { AppMountParameters, CoreSetup, Plugin } from '@kbn/core/public'; import type { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; -import { AppNavLinkStatus } from '@kbn/core/public'; import { App, HttpContext } from './app'; @@ -25,7 +24,7 @@ export class ScreenshottingExamplePlugin implements Plugin { application.register({ id: APPLICATION_ID, title: APPLICATION_NAME, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount: async ({ element }: AppMountParameters) => { const [{ http }] = await getStartServices(); diff --git a/x-pack/examples/testing_embedded_lens/public/plugin.ts b/x-pack/examples/testing_embedded_lens/public/plugin.ts index b7e7c31c768969..505c4e7ad86d10 100644 --- a/x-pack/examples/testing_embedded_lens/public/plugin.ts +++ b/x-pack/examples/testing_embedded_lens/public/plugin.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { Plugin, CoreSetup, AppNavLinkStatus } from '@kbn/core/public'; +import { Plugin, CoreSetup } from '@kbn/core/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { LensPublicStart } from '@kbn/lens-plugin/public'; import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; @@ -30,7 +30,7 @@ export class TestingEmbeddedLensPlugin core.application.register({ id: 'testing_embedded_lens', title: 'Embedded Lens testing playground', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount: mount(core), }); diff --git a/x-pack/examples/third_party_lens_navigation_prompt/public/plugin.ts b/x-pack/examples/third_party_lens_navigation_prompt/public/plugin.ts index 0538c7f5017420..f38d8d9e3e8bff 100644 --- a/x-pack/examples/third_party_lens_navigation_prompt/public/plugin.ts +++ b/x-pack/examples/third_party_lens_navigation_prompt/public/plugin.ts @@ -6,7 +6,7 @@ */ import { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import { Plugin, CoreSetup, AppNavLinkStatus } from '@kbn/core/public'; +import { Plugin, CoreSetup } from '@kbn/core/public'; import { DataViewsPublicPluginStart, DataView } from '@kbn/data-views-plugin/public'; import { DateHistogramIndexPatternColumn, @@ -95,7 +95,7 @@ export class EmbeddedLensExamplePlugin core.application.register({ id: 'third_party_lens_navigation_prompt', title: 'Third party Lens navigation prompt', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount: (params) => { (async () => { const [, { lens: lensStart, dataViews }] = await core.getStartServices(); diff --git a/x-pack/examples/third_party_vis_lens_example/public/plugin.ts b/x-pack/examples/third_party_vis_lens_example/public/plugin.ts index 38922ae676666d..a05c76e22c9dca 100644 --- a/x-pack/examples/third_party_vis_lens_example/public/plugin.ts +++ b/x-pack/examples/third_party_vis_lens_example/public/plugin.ts @@ -7,7 +7,7 @@ import { ExpressionsSetup } from '@kbn/expressions-plugin/public'; import { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; -import { Plugin, CoreSetup, AppNavLinkStatus } from '@kbn/core/public'; +import { Plugin, CoreSetup } from '@kbn/core/public'; import { DataViewsPublicPluginStart, DataView } from '@kbn/data-views-plugin/public'; import { LensPublicSetup, LensPublicStart } from '@kbn/lens-plugin/public'; import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; @@ -90,7 +90,7 @@ export class EmbeddedLensExamplePlugin core.application.register({ id: 'third_party_lens_vis_example', title: 'Third party Lens vis example', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount: ({ history }) => { (async () => { const [coreStart, { lens: lensStart, dataViews }] = await core.getStartServices(); diff --git a/x-pack/examples/triggers_actions_ui_example/public/plugin.tsx b/x-pack/examples/triggers_actions_ui_example/public/plugin.tsx index 8979c138242fa4..0ee31733b6a068 100644 --- a/x-pack/examples/triggers_actions_ui_example/public/plugin.tsx +++ b/x-pack/examples/triggers_actions_ui_example/public/plugin.tsx @@ -6,13 +6,7 @@ */ import React from 'react'; -import { - Plugin, - CoreSetup, - AppMountParameters, - AppNavLinkStatus, - CoreStart, -} from '@kbn/core/public'; +import { Plugin, CoreSetup, AppMountParameters, CoreStart } from '@kbn/core/public'; import { PluginSetupContract as AlertingSetup } from '@kbn/alerting-plugin/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; @@ -54,7 +48,7 @@ export class TriggersActionsUiExamplePlugin core.application.register({ id: 'triggersActionsUiExample', title: 'Triggers Actions UI Example', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], // category set as cases expects the label to exist category: { id: 'fakeId', diff --git a/x-pack/examples/ui_actions_enhanced_examples/public/plugin.ts b/x-pack/examples/ui_actions_enhanced_examples/public/plugin.ts index 2c020314d05a33..2cac8f3bac9397 100644 --- a/x-pack/examples/ui_actions_enhanced_examples/public/plugin.ts +++ b/x-pack/examples/ui_actions_enhanced_examples/public/plugin.ts @@ -7,7 +7,7 @@ import { createElement as h } from 'react'; import { toMountPoint } from '@kbn/kibana-react-plugin/public'; -import { Plugin, CoreSetup, CoreStart, AppNavLinkStatus } from '@kbn/core/public'; +import { Plugin, CoreSetup, CoreStart } from '@kbn/core/public'; import { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plugin/public'; import { AdvancedUiActionsSetup, @@ -130,7 +130,7 @@ export class UiActionsEnhancedExamplesPlugin core.application.register({ id: 'ui_actions_enhanced-explorer', title: 'UI Actions Enhanced Explorer', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount: mount(core), }); diff --git a/x-pack/plugins/apm/public/plugin.ts b/x-pack/plugins/apm/public/plugin.ts index 476a4e1fd5b82e..ede721d072eeb9 100644 --- a/x-pack/plugins/apm/public/plugin.ts +++ b/x-pack/plugins/apm/public/plugin.ts @@ -12,7 +12,6 @@ import type { import { ChartsPluginStart } from '@kbn/charts-plugin/public'; import { AppMountParameters, - AppNavLinkStatus, CoreSetup, CoreStart, DEFAULT_APP_CATEGORIES, @@ -361,7 +360,6 @@ export class ApmPlugin implements Plugin { appRoute: '/app/apm', icon: 'plugins/apm/public/icon.svg', category: DEFAULT_APP_CATEGORIES.observability, - navLinkStatus: AppNavLinkStatus.visible, deepLinks: [ { id: 'service-groups-list', @@ -372,33 +370,26 @@ export class ApmPlugin implements Plugin { id: 'services', title: servicesTitle, path: '/services', - navLinkStatus: config.serverless.enabled - ? AppNavLinkStatus.visible - : AppNavLinkStatus.default, }, { id: 'traces', title: tracesTitle, path: '/traces', - navLinkStatus: config.serverless.enabled - ? AppNavLinkStatus.visible - : AppNavLinkStatus.default, }, { id: 'service-map', title: serviceMapTitle, path: '/service-map' }, { id: 'dependencies', title: dependenciesTitle, path: '/dependencies/inventory', - navLinkStatus: config.serverless.enabled - ? AppNavLinkStatus.visible - : AppNavLinkStatus.default, }, { id: 'settings', title: apmSettingsTitle, path: '/settings' }, { id: 'storage-explorer', title: apmStorageExplorerTitle, path: '/storage-explorer', - searchable: featureFlags.storageExplorerAvailable, + visibleIn: featureFlags.storageExplorerAvailable + ? ['globalSearch'] + : [], }, { id: 'tutorial', title: apmTutorialTitle, path: '/tutorial' }, ], diff --git a/x-pack/plugins/cases/public/common/navigation/deep_links.test.ts b/x-pack/plugins/cases/public/common/navigation/deep_links.test.ts index b3170abad0f629..029fe1063a8db9 100644 --- a/x-pack/plugins/cases/public/common/navigation/deep_links.test.ts +++ b/x-pack/plugins/cases/public/common/navigation/deep_links.test.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { AppNavLinkStatus } from '@kbn/core/public'; import { getCasesDeepLinks } from './deep_links'; describe('getCasesDeepLinks', () => { @@ -55,10 +54,10 @@ describe('getCasesDeepLinks', () => { const deepLinks = getCasesDeepLinks({ extend: { cases: { - searchable: false, + visibleIn: [], }, cases_create: { - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }, cases_configure: { order: 8002, @@ -70,13 +69,13 @@ describe('getCasesDeepLinks', () => { id: 'cases', path: '/cases', title: 'Cases', - searchable: false, + visibleIn: [], deepLinks: [ { id: 'cases_create', path: '/cases/create', title: 'Create', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }, { id: 'cases_configure', diff --git a/x-pack/plugins/enterprise_search/public/plugin.ts b/x-pack/plugins/enterprise_search/public/plugin.ts index f38395e8b3340d..721bdd4ff3bf6c 100644 --- a/x-pack/plugins/enterprise_search/public/plugin.ts +++ b/x-pack/plugins/enterprise_search/public/plugin.ts @@ -16,7 +16,6 @@ import { Plugin, PluginInitializerContext, DEFAULT_APP_CATEGORIES, - AppNavLinkStatus, } from '@kbn/core/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { GuidedOnboardingPluginStart } from '@kbn/guided-onboarding-plugin/public'; @@ -67,9 +66,9 @@ export interface PluginsStart { guidedOnboarding: GuidedOnboardingPluginStart; lens: LensPublicStart; licensing: LicensingPluginStart; + ml: MlPluginStart; security: SecurityPluginStart; share: SharePluginStart; - ml: MlPluginStart; } export interface ESConfig { @@ -78,7 +77,6 @@ export interface ESConfig { export class EnterpriseSearchPlugin implements Plugin { private config: ClientConfigType; - private esConfig: ESConfig; constructor(initializerContext: PluginInitializerContext) { this.config = initializerContext.config.get(); @@ -86,6 +84,7 @@ export class EnterpriseSearchPlugin implements Plugin { } private data: ClientData = {} as ClientData; + private esConfig: ESConfig; private async getInitialData(http: HttpSetup) { try { @@ -167,6 +166,7 @@ export class EnterpriseSearchPlugin implements Plugin { return renderApp(EnterpriseSearchOverview, kibanaDeps, pluginData); }, title: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.NAV_TITLE, + visibleIn: ['home', 'kibanaOverview', 'globalSearch', 'sideNav'], }); core.application.register({ @@ -252,8 +252,8 @@ export class EnterpriseSearchPlugin implements Plugin { return renderApp(EnterpriseSearchAISearch, kibanaDeps, pluginData); }, - navLinkStatus: AppNavLinkStatus.hidden, title: AI_SEARCH_PLUGIN.NAV_TITLE, + visibleIn: [], }); core.application.register({ @@ -274,8 +274,6 @@ export class EnterpriseSearchPlugin implements Plugin { return renderApp(Applications, kibanaDeps, pluginData); }, - navLinkStatus: AppNavLinkStatus.default, - searchable: true, title: APPLICATIONS_PLUGIN.NAV_TITLE, }); @@ -297,8 +295,6 @@ export class EnterpriseSearchPlugin implements Plugin { return renderApp(Analytics, kibanaDeps, pluginData); }, - navLinkStatus: AppNavLinkStatus.default, - searchable: true, title: ANALYTICS_PLUGIN.NAME, }); @@ -320,8 +316,8 @@ export class EnterpriseSearchPlugin implements Plugin { return renderApp(SearchExperiences, kibanaDeps, pluginData); }, - navLinkStatus: AppNavLinkStatus.hidden, title: SEARCH_EXPERIENCES_PLUGIN.NAME, + visibleIn: [], }); if (config.canDeployEntSearch) { @@ -343,8 +339,8 @@ export class EnterpriseSearchPlugin implements Plugin { return renderApp(AppSearch, kibanaDeps, pluginData); }, - navLinkStatus: AppNavLinkStatus.hidden, title: APP_SEARCH_PLUGIN.NAME, + visibleIn: [], }); core.application.register({ @@ -368,8 +364,8 @@ export class EnterpriseSearchPlugin implements Plugin { return renderApp(WorkplaceSearch, kibanaDeps, pluginData); }, - navLinkStatus: AppNavLinkStatus.hidden, title: WORKPLACE_SEARCH_PLUGIN.NAME, + visibleIn: [], }); } diff --git a/x-pack/plugins/exploratory_view/public/plugin.ts b/x-pack/plugins/exploratory_view/public/plugin.ts index 064e5295b1d5ed..66bcb9cf8a8a22 100644 --- a/x-pack/plugins/exploratory_view/public/plugin.ts +++ b/x-pack/plugins/exploratory_view/public/plugin.ts @@ -6,7 +6,6 @@ */ import { i18n } from '@kbn/i18n'; -import { AppNavLinkStatus } from '@kbn/core-application-browser'; import { BehaviorSubject } from 'rxjs'; import { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; import { @@ -114,7 +113,7 @@ export class Plugin title: i18n.translate('xpack.exploratoryView.appTitle', { defaultMessage: 'Exploratory View', }), - searchable: false, + visibleIn: [], updater$: appUpdater$, keywords: [ 'observability', @@ -136,10 +135,6 @@ export class Plugin } public start(coreStart: CoreStart, pluginsStart: ExploratoryViewPublicPluginsStart) { - this.appUpdater$.next(() => ({ - navLinkStatus: AppNavLinkStatus.hidden, - })); - return { createExploratoryViewUrl, getAppDataView: getAppDataView(pluginsStart.dataViews), diff --git a/x-pack/plugins/exploratory_view/tsconfig.json b/x-pack/plugins/exploratory_view/tsconfig.json index c18721855bfa1e..2dd19142fba39a 100644 --- a/x-pack/plugins/exploratory_view/tsconfig.json +++ b/x-pack/plugins/exploratory_view/tsconfig.json @@ -36,7 +36,6 @@ "@kbn/share-plugin", "@kbn/charts-plugin", "@kbn/shared-ux-router", - "@kbn/core-application-browser", "@kbn/observability-shared-plugin", "@kbn/core-ui-settings-browser-mocks", "@kbn/observability-ai-assistant-plugin", diff --git a/x-pack/plugins/fleet/public/plugin.ts b/x-pack/plugins/fleet/public/plugin.ts index ce99aa4ec8d30e..7799b3653c0b81 100644 --- a/x-pack/plugins/fleet/public/plugin.ts +++ b/x-pack/plugins/fleet/public/plugin.ts @@ -13,7 +13,7 @@ import type { Plugin, PluginInitializerContext, } from '@kbn/core/public'; -import { AppNavLinkStatus, DEFAULT_APP_CATEGORIES } from '@kbn/core/public'; +import { DEFAULT_APP_CATEGORIES } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; @@ -248,7 +248,7 @@ export class FleetPlugin implements Plugin = {}): PublicAppInfo => ({ title: 'App 1', appRoute: '/app/app1', status: AppStatus.accessible, - navLinkStatus: AppNavLinkStatus.visible, - searchable: true, + visibleIn: ['globalSearch'], chromeless: false, keywords: props.keywords || [], deepLinks: [], @@ -167,13 +166,13 @@ describe('applicationResultProvider', () => { it('does not ignore apps with non-visible navlink', async () => { application.applications$ = of( createAppMap([ - createApp({ id: 'app1', title: 'App 1', navLinkStatus: AppNavLinkStatus.visible }), + createApp({ id: 'app1', title: 'App 1', visibleIn: ['globalSearch'] }), createApp({ id: 'disabled', title: 'disabled', - navLinkStatus: AppNavLinkStatus.disabled, + visibleIn: [], }), - createApp({ id: 'hidden', title: 'hidden', navLinkStatus: AppNavLinkStatus.hidden }), + createApp({ id: 'hidden', title: 'hidden', visibleIn: [] }), ]) ); const provider = createApplicationResultProvider(Promise.resolve(application)); diff --git a/x-pack/plugins/global_search_providers/public/providers/get_app_results.test.ts b/x-pack/plugins/global_search_providers/public/providers/get_app_results.test.ts index ca461a5d156ccb..5be0f5ad38f954 100644 --- a/x-pack/plugins/global_search_providers/public/providers/get_app_results.test.ts +++ b/x-pack/plugins/global_search_providers/public/providers/get_app_results.test.ts @@ -5,12 +5,7 @@ * 2.0. */ -import { - AppNavLinkStatus, - AppStatus, - PublicAppInfo, - DEFAULT_APP_CATEGORIES, -} from '@kbn/core/public'; +import { AppStatus, PublicAppInfo, DEFAULT_APP_CATEGORIES } from '@kbn/core/public'; import { AppLink, appToResult, @@ -24,8 +19,7 @@ const createApp = (props: Partial = {}): PublicAppInfo => ({ title: 'App 1', appRoute: '/app/app1', status: AppStatus.accessible, - navLinkStatus: AppNavLinkStatus.visible, - searchable: true, + visibleIn: ['globalSearch'], chromeless: false, keywords: [], deepLinks: [], @@ -48,7 +42,7 @@ describe('getAppResults', () => { createApp({ id: 'dashboard_not_searchable', title: 'dashboard not searchable', - searchable: false, + visibleIn: [], }), ]; @@ -68,8 +62,7 @@ describe('getAppResults', () => { path: '/sub1', deepLinks: [], keywords: [], - navLinkStatus: AppNavLinkStatus.hidden, - searchable: true, + visibleIn: ['globalSearch'], }, { id: 'sub2', @@ -82,13 +75,11 @@ describe('getAppResults', () => { path: '/sub2/sub1', deepLinks: [], keywords: [], - navLinkStatus: AppNavLinkStatus.hidden, - searchable: true, + visibleIn: ['globalSearch'], }, ], keywords: [], - navLinkStatus: AppNavLinkStatus.visible, - searchable: false, + visibleIn: [], }, ], keywords: [], @@ -116,8 +107,7 @@ describe('getAppResults', () => { path: '/sub-observability', deepLinks: [], keywords: [], - navLinkStatus: AppNavLinkStatus.hidden, - searchable: true, + visibleIn: ['globalSearch'], }, { id: 'sub-security', @@ -125,8 +115,7 @@ describe('getAppResults', () => { path: '/sub-security', deepLinks: [], keywords: [], - navLinkStatus: AppNavLinkStatus.visible, - searchable: true, + visibleIn: ['globalSearch'], euiIconType: 'logoSecurity', category: DEFAULT_APP_CATEGORIES.security, }, @@ -164,8 +153,7 @@ describe('getAppResults', () => { path: '/sub1', deepLinks: [], keywords: [], - navLinkStatus: AppNavLinkStatus.hidden, - searchable: true, + visibleIn: ['globalSearch'], }, ], keywords: [], @@ -173,7 +161,7 @@ describe('getAppResults', () => { createApp({ id: 'AppNotSearchable', title: 'App 1 not searchable', - searchable: false, + visibleIn: [], }), ]; @@ -197,8 +185,7 @@ describe('getAppResults', () => { path: '/sub1', deepLinks: [], keywords: [], - navLinkStatus: AppNavLinkStatus.hidden, - searchable: true, + visibleIn: ['globalSearch'], }, { id: 'sub2', @@ -211,13 +198,11 @@ describe('getAppResults', () => { path: '/sub2/sub1', deepLinks: [], keywords: ['TwoOne'], - navLinkStatus: AppNavLinkStatus.hidden, - searchable: true, + visibleIn: ['globalSearch'], }, ], keywords: ['two'], - navLinkStatus: AppNavLinkStatus.hidden, - searchable: true, + visibleIn: ['globalSearch'], }, ], keywords: [], diff --git a/x-pack/plugins/global_search_providers/public/providers/get_app_results.ts b/x-pack/plugins/global_search_providers/public/providers/get_app_results.ts index f9f23c93947a7e..f83c6405369b7f 100644 --- a/x-pack/plugins/global_search_providers/public/providers/get_app_results.ts +++ b/x-pack/plugins/global_search_providers/public/providers/get_app_results.ts @@ -33,7 +33,7 @@ export const getAppResults = ( .flatMap((app) => term.length > 0 ? flattenDeepLinks(app) - : app.searchable + : app.visibleIn.includes('globalSearch') ? [ { id: app.id, @@ -122,7 +122,7 @@ export const appToResult = (appLink: AppLink, score: number): GlobalSearchProvid const flattenDeepLinks = (app: PublicAppInfo, deepLink?: PublicAppDeepLinkInfo): AppLink[] => { if (!deepLink) { return [ - ...(app.searchable + ...(app.visibleIn.includes('globalSearch') ? [ { id: app.id, @@ -137,7 +137,7 @@ const flattenDeepLinks = (app: PublicAppInfo, deepLink?: PublicAppDeepLinkInfo): ]; } return [ - ...(deepLink.path && deepLink.searchable + ...(deepLink.path && deepLink.visibleIn.includes('globalSearch') ? [ { ...deepLink, diff --git a/x-pack/plugins/graph/public/plugin.ts b/x-pack/plugins/graph/public/plugin.ts index 3fc9b72873297a..a0fd21dcfa9793 100644 --- a/x-pack/plugins/graph/public/plugin.ts +++ b/x-pack/plugins/graph/public/plugin.ts @@ -9,7 +9,7 @@ import { i18n } from '@kbn/i18n'; import { BehaviorSubject } from 'rxjs'; import { SpacesApi } from '@kbn/spaces-plugin/public'; import { - AppNavLinkStatus, + AppStatus, AppUpdater, CoreSetup, CoreStart, @@ -143,11 +143,11 @@ export class GraphPlugin const licenseInformation = checkLicense(license); this.appUpdater$.next(() => ({ - navLinkStatus: licenseInformation.showAppLink + status: licenseInformation.showAppLink ? licenseInformation.enableAppLink - ? AppNavLinkStatus.visible - : AppNavLinkStatus.disabled - : AppNavLinkStatus.hidden, + ? AppStatus.accessible + : AppStatus.inaccessible + : AppStatus.inaccessible, tooltip: licenseInformation.showAppLink ? licenseInformation.message : undefined, })); diff --git a/x-pack/plugins/infra/public/plugin.ts b/x-pack/plugins/infra/public/plugin.ts index 0732093e2d7bf4..384ffaa06c94a4 100644 --- a/x-pack/plugins/infra/public/plugin.ts +++ b/x-pack/plugins/infra/public/plugin.ts @@ -10,9 +10,9 @@ import { type AppUpdater, type CoreStart, type AppDeepLink, - AppNavLinkStatus, DEFAULT_APP_CATEGORIES, PluginInitializerContext, + AppDeepLinkLocations, } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import { enableInfrastructureHostsView } from '@kbn/observability-plugin/public'; @@ -249,9 +249,7 @@ export class Plugin implements InfraClientPluginClass { hostsEnabled: boolean; metricsExplorerEnabled: boolean; }): AppDeepLink[] => { - const serverlessNavLinkStatus = this.isServerlessEnv - ? AppNavLinkStatus.visible - : AppNavLinkStatus.hidden; + const visibleIn: AppDeepLinkLocations[] = this.isServerlessEnv ? ['globalSearch'] : []; return [ { @@ -260,7 +258,7 @@ export class Plugin implements InfraClientPluginClass { defaultMessage: 'Inventory', }), path: '/inventory', - navLinkStatus: serverlessNavLinkStatus, + visibleIn, }, ...(hostsEnabled ? [ @@ -270,7 +268,7 @@ export class Plugin implements InfraClientPluginClass { defaultMessage: 'Hosts', }), path: '/hosts', - navLinkStatus: serverlessNavLinkStatus, + visibleIn, }, ] : []), @@ -330,7 +328,7 @@ export class Plugin implements InfraClientPluginClass { id: 'infra', appRoute: '/app/infra', title: 'infra', - navLinkStatus: 3, + visibleIn: [], mount: async (params: AppMountParameters) => { const { renderApp } = await import('./apps/legacy_app'); diff --git a/x-pack/plugins/lens/public/plugin.ts b/x-pack/plugins/lens/public/plugin.ts index 663a5d8b574c25..45e08ae07a68b5 100644 --- a/x-pack/plugins/lens/public/plugin.ts +++ b/x-pack/plugins/lens/public/plugin.ts @@ -42,7 +42,6 @@ import { EmbeddableStateTransfer } from '@kbn/embeddable-plugin/public'; import type { IndexPatternFieldEditorStart } from '@kbn/data-view-field-editor-plugin/public'; import type { DataViewEditorStart } from '@kbn/data-view-editor-plugin/public'; import type { SavedObjectTaggingPluginStart } from '@kbn/saved-objects-tagging-plugin/public'; -import { AppNavLinkStatus } from '@kbn/core/public'; import { UiActionsStart, ACTION_VISUALIZE_FIELD, @@ -451,7 +450,7 @@ export class LensPlugin { core.application.register({ id: APP_ID, title: NOT_INTERNATIONALIZED_PRODUCT_NAME, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount: async (params: AppMountParameters) => { const { core: coreStart, plugins: deps } = startServices(); diff --git a/x-pack/plugins/licensing/README.md b/x-pack/plugins/licensing/README.md index 52204c66dd2bf3..f368b894caaf0d 100644 --- a/x-pack/plugins/licensing/README.md +++ b/x-pack/plugins/licensing/README.md @@ -96,7 +96,7 @@ class MyPlugin { const showLinks = hasRequiredLicense && license.getFeature('name').isAvailable; appUpdater$.next(() => { - navLinkStatus: showLinks ? AppNavLinkStatus.visible : AppNavLinkStatus.hidden + status: showLinks ? AppStatus.accessible : AppStatus.inaccessible, }); }) } diff --git a/x-pack/plugins/ml/public/plugin.ts b/x-pack/plugins/ml/public/plugin.ts index 441b88b2cc14e6..c07a02e7a8c4bb 100644 --- a/x-pack/plugins/ml/public/plugin.ts +++ b/x-pack/plugins/ml/public/plugin.ts @@ -231,7 +231,7 @@ export class MlPlugin implements Plugin { registerMapExtension, registerCasesAttachments, } = await import('./register_helper'); - registerSearchLinks(this.appUpdater$, fullLicense, mlCapabilities, !this.isServerless); + registerSearchLinks(this.appUpdater$, fullLicense, mlCapabilities, this.isServerless); if ( pluginsSetup.triggersActionsUi && diff --git a/x-pack/plugins/ml/public/register_helper/register_search_links/register_search_links.ts b/x-pack/plugins/ml/public/register_helper/register_search_links/register_search_links.ts index 7e0a4dd593c64b..6b7f10103b440b 100644 --- a/x-pack/plugins/ml/public/register_helper/register_search_links/register_search_links.ts +++ b/x-pack/plugins/ml/public/register_helper/register_search_links/register_search_links.ts @@ -16,7 +16,7 @@ export function registerSearchLinks( appUpdater: BehaviorSubject, isFullLicense: boolean, mlCapabilities: MlCapabilities, - showMLNavMenu: boolean + isServerless: boolean ) { appUpdater.next(() => ({ keywords: [ @@ -24,6 +24,6 @@ export function registerSearchLinks( defaultMessage: 'ML', }), ], - deepLinks: getDeepLinks(isFullLicense, mlCapabilities, showMLNavMenu), + deepLinks: getDeepLinks(isFullLicense, mlCapabilities, isServerless), })); } diff --git a/x-pack/plugins/ml/public/register_helper/register_search_links/search_deep_links.ts b/x-pack/plugins/ml/public/register_helper/register_search_links/search_deep_links.ts index a66f2fca4e2c17..d0b59b90977e8a 100644 --- a/x-pack/plugins/ml/public/register_helper/register_search_links/search_deep_links.ts +++ b/x-pack/plugins/ml/public/register_helper/register_search_links/search_deep_links.ts @@ -8,50 +8,37 @@ import { i18n } from '@kbn/i18n'; import type { LinkId } from '@kbn/deeplinks-ml'; -import { type AppDeepLink, AppNavLinkStatus } from '@kbn/core/public'; +import { type AppDeepLink } from '@kbn/core/public'; import { ML_PAGES } from '../../../common/constants/locator'; import type { MlCapabilities } from '../../shared'; function createDeepLinks( mlCapabilities: MlCapabilities, isFullLicense: boolean, - showMLNavMenu: boolean + isServerless: boolean ) { - function getNavStatus( - visible: boolean, - showInServerless: boolean = true - ): AppNavLinkStatus | undefined { - if (showMLNavMenu === false) { - // in serverless the status needs to be "visible" rather than "default" - // for the links to appear in the nav menu. - return showInServerless && visible ? AppNavLinkStatus.visible : AppNavLinkStatus.hidden; - } - - return visible ? AppNavLinkStatus.default : AppNavLinkStatus.hidden; - } - return { - getOverviewLinkDeepLink: (): AppDeepLink => { - const navLinkStatus = getNavStatus(mlCapabilities.isADEnabled || mlCapabilities.isDFAEnabled); + getOverviewLinkDeepLink: (): AppDeepLink | null => { + if (!mlCapabilities.isADEnabled && !mlCapabilities.isDFAEnabled) return null; + return { id: 'overview', title: i18n.translate('xpack.ml.deepLink.overview', { defaultMessage: 'Overview', }), path: `/${ML_PAGES.OVERVIEW}`, - navLinkStatus, }; }, - getAnomalyDetectionDeepLink: (): AppDeepLink => { - const navLinkStatus = getNavStatus(mlCapabilities.isADEnabled); + getAnomalyDetectionDeepLink: (): AppDeepLink | null => { + if (!mlCapabilities.isADEnabled) return null; + return { id: 'anomalyDetection', title: i18n.translate('xpack.ml.deepLink.anomalyDetection', { defaultMessage: 'Anomaly Detection', }), path: `/${ML_PAGES.ANOMALY_DETECTION_JOBS_MANAGE}`, - navLinkStatus, deepLinks: [ { id: 'anomalyExplorer', @@ -59,7 +46,6 @@ function createDeepLinks( defaultMessage: 'Anomaly explorer', }), path: `/${ML_PAGES.ANOMALY_EXPLORER}`, - navLinkStatus, }, { id: 'singleMetricViewer', @@ -67,21 +53,20 @@ function createDeepLinks( defaultMessage: 'Single metric viewer', }), path: `/${ML_PAGES.SINGLE_METRIC_VIEWER}`, - navLinkStatus, }, ], }; }, - getDataFrameAnalyticsDeepLink: (): AppDeepLink => { - const navLinkStatus = getNavStatus(mlCapabilities.isDFAEnabled); + getDataFrameAnalyticsDeepLink: (): AppDeepLink | null => { + if (!mlCapabilities.isDFAEnabled) return null; + return { id: 'dataFrameAnalytics', title: i18n.translate('xpack.ml.deepLink.dataFrameAnalytics', { defaultMessage: 'Data Frame Analytics', }), path: `/${ML_PAGES.DATA_FRAME_ANALYTICS_JOBS_MANAGE}`, - navLinkStatus, deepLinks: [ { id: 'resultExplorer', @@ -89,7 +74,6 @@ function createDeepLinks( defaultMessage: 'Results explorer', }), path: `/${ML_PAGES.DATA_FRAME_ANALYTICS_EXPLORATION}`, - navLinkStatus, }, { id: 'analyticsMap', @@ -97,67 +81,65 @@ function createDeepLinks( defaultMessage: 'Analytics map', }), path: `/${ML_PAGES.DATA_FRAME_ANALYTICS_MAP}`, - navLinkStatus, }, ], }; }, - getModelManagementDeepLink: (): AppDeepLink => { - const navLinkStatus = getNavStatus( - mlCapabilities.isDFAEnabled || mlCapabilities.isNLPEnabled - ); + getModelManagementDeepLink: (): AppDeepLink | null => { + if (!mlCapabilities.isDFAEnabled && !mlCapabilities.isNLPEnabled) return null; + + const deepLinks: Array> = [ + { + id: 'nodesOverview', + title: i18n.translate('xpack.ml.deepLink.trainedModels', { + defaultMessage: 'Trained Models', + }), + path: `/${ML_PAGES.TRAINED_MODELS_MANAGE}`, + }, + ]; + + if (!isServerless) { + deepLinks.push({ + id: 'nodes', + title: i18n.translate('xpack.ml.deepLink.nodes', { + defaultMessage: 'Nodes', + }), + path: `/${ML_PAGES.NODES}`, + }); + } + return { id: 'modelManagement', title: i18n.translate('xpack.ml.deepLink.modelManagement', { defaultMessage: 'Model Management', }), path: `/${ML_PAGES.TRAINED_MODELS_MANAGE}`, - navLinkStatus, - deepLinks: [ - { - id: 'nodesOverview', - title: i18n.translate('xpack.ml.deepLink.trainedModels', { - defaultMessage: 'Trained Models', - }), - path: `/${ML_PAGES.TRAINED_MODELS_MANAGE}`, - navLinkStatus, - }, - { - id: 'nodes', - title: i18n.translate('xpack.ml.deepLink.nodes', { - defaultMessage: 'Nodes', - }), - path: `/${ML_PAGES.NODES}`, - navLinkStatus: getNavStatus( - mlCapabilities.isDFAEnabled || mlCapabilities.isNLPEnabled, - false - ), - }, - ], + deepLinks, }; }, - getMemoryUsageDeepLink: (): AppDeepLink => { + getMemoryUsageDeepLink: (): AppDeepLink | null => { + if (!isFullLicense) return null; + return { id: 'memoryUsage', title: i18n.translate('xpack.ml.deepLink.memoryUsage', { defaultMessage: 'Memory Usage', }), path: `/${ML_PAGES.MEMORY_USAGE}`, - navLinkStatus: getNavStatus(isFullLicense, true), }; }, - getSettingsDeepLink: (): AppDeepLink => { - const navLinkStatus = getNavStatus(mlCapabilities.isADEnabled); + getSettingsDeepLink: (): AppDeepLink | null => { + if (!mlCapabilities.isADEnabled) return null; + return { id: 'settings', title: i18n.translate('xpack.ml.deepLink.settings', { defaultMessage: 'Settings', }), path: `/${ML_PAGES.SETTINGS}`, - navLinkStatus, deepLinks: [ { id: 'calendarSettings', @@ -165,7 +147,6 @@ function createDeepLinks( defaultMessage: 'Calendars', }), path: `/${ML_PAGES.CALENDARS_MANAGE}`, - navLinkStatus, }, { id: 'filterListsSettings', @@ -173,14 +154,14 @@ function createDeepLinks( defaultMessage: 'Filter Lists', }), path: `/${ML_PAGES.SETTINGS}`, // Link to settings page as read only users cannot view filter lists. - navLinkStatus, }, ], }; }, - getAiopsDeepLink: (): AppDeepLink => { - const navLinkStatus = getNavStatus(mlCapabilities.canUseAiops); + getAiopsDeepLink: (): AppDeepLink | null => { + if (!mlCapabilities.canUseAiops) return null; + return { id: 'aiOps', title: i18n.translate('xpack.ml.deepLink.aiOps', { @@ -188,7 +169,6 @@ function createDeepLinks( }), // Default to the index select page for log rate analysis since we don't have an AIops overview page path: `/${ML_PAGES.AIOPS_LOG_RATE_ANALYSIS_INDEX_SELECT}`, - navLinkStatus, deepLinks: [ { id: 'logRateAnalysis', @@ -196,7 +176,6 @@ function createDeepLinks( defaultMessage: 'Log Rate Analysis', }), path: `/${ML_PAGES.AIOPS_LOG_RATE_ANALYSIS_INDEX_SELECT}`, - navLinkStatus, }, { id: 'logPatternAnalysis', @@ -204,7 +183,6 @@ function createDeepLinks( defaultMessage: 'Log Pattern Analysis', }), path: `/${ML_PAGES.AIOPS_LOG_CATEGORIZATION_INDEX_SELECT}`, - navLinkStatus, }, { id: 'changePointDetections', @@ -212,20 +190,20 @@ function createDeepLinks( defaultMessage: 'Change Point Detection', }), path: `/${ML_PAGES.AIOPS_CHANGE_POINT_DETECTION_INDEX_SELECT}`, - navLinkStatus, }, ], }; }, - getNotificationsDeepLink: (): AppDeepLink => { + getNotificationsDeepLink: (): AppDeepLink | null => { + if (!isFullLicense) return null; + return { id: 'notifications', title: i18n.translate('xpack.ml.deepLink.notifications', { defaultMessage: 'Notifications', }), path: `/${ML_PAGES.NOTIFICATIONS}`, - navLinkStatus: getNavStatus(isFullLicense), }; }, @@ -236,7 +214,6 @@ function createDeepLinks( defaultMessage: 'Data Visualizer', }), path: `/${ML_PAGES.DATA_VISUALIZER}`, - navLinkStatus: getNavStatus(true), }; }, @@ -248,7 +225,6 @@ function createDeepLinks( }), keywords: ['CSV', 'JSON'], path: `/${ML_PAGES.DATA_VISUALIZER_FILE}`, - navLinkStatus: getNavStatus(true), }; }, @@ -259,7 +235,6 @@ function createDeepLinks( defaultMessage: 'Index Data Visualizer', }), path: `/${ML_PAGES.DATA_VISUALIZER_INDEX_SELECT}`, - navLinkStatus: getNavStatus(true), }; }, @@ -270,7 +245,6 @@ function createDeepLinks( defaultMessage: 'ES|QL Data Visualizer', }), path: `/${ML_PAGES.DATA_VISUALIZER_ESQL}`, - navLinkStatus: getNavStatus(true), }; }, @@ -281,7 +255,6 @@ function createDeepLinks( defaultMessage: 'Data Drift', }), path: `/${ML_PAGES.DATA_DRIFT_INDEX_SELECT}`, - navLinkStatus: getNavStatus(true), }; }, }; @@ -290,8 +263,10 @@ function createDeepLinks( export function getDeepLinks( isFullLicense: boolean, mlCapabilities: MlCapabilities, - showMLNavMenu: boolean -) { - const links = createDeepLinks(mlCapabilities, isFullLicense, showMLNavMenu); - return Object.values(links).map((link) => link()); + isServerless: boolean +): Array> { + const links = createDeepLinks(mlCapabilities, isFullLicense, isServerless); + return Object.values(links) + .map((link) => link()) + .filter((link): link is AppDeepLink => link !== null); } diff --git a/x-pack/plugins/observability/public/plugin.ts b/x-pack/plugins/observability/public/plugin.ts index 1fd9d835b48ff6..d3684f5c90e849 100644 --- a/x-pack/plugins/observability/public/plugin.ts +++ b/x-pack/plugins/observability/public/plugin.ts @@ -14,7 +14,6 @@ import { App, AppDeepLink, AppMountParameters, - AppNavLinkStatus, AppUpdater, CoreSetup, CoreStart, @@ -197,7 +196,7 @@ export class Plugin }), order: 8001, path: ALERTS_PATH, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], deepLinks: [ { id: 'rules', @@ -205,7 +204,7 @@ export class Plugin defaultMessage: 'Rules', }), path: RULES_PATH, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }, ], }, @@ -214,7 +213,7 @@ export class Plugin title: i18n.translate('xpack.observability.slosLinkTitle', { defaultMessage: 'SLOs', }), - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], order: 8002, path: SLOS_PATH, }, @@ -223,15 +222,13 @@ export class Plugin extend: { [CasesDeepLinkId.cases]: { order: 8003, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }, [CasesDeepLinkId.casesCreate]: { - navLinkStatus: AppNavLinkStatus.hidden, - searchable: false, + visibleIn: [], }, [CasesDeepLinkId.casesConfigure]: { - navLinkStatus: AppNavLinkStatus.hidden, - searchable: false, + visibleIn: [], }, }, }), @@ -316,7 +313,9 @@ export class Plugin 'user', 'experience', ], - searchable: !Boolean(pluginsSetup.serverless), + visibleIn: Boolean(pluginsSetup.serverless) + ? ['home', 'kibanaOverview'] + : ['globalSearch', 'home', 'kibanaOverview', 'sideNav'], }; coreSetup.application.register(app); @@ -437,7 +436,7 @@ export class Plugin // // See https://github.com/elastic/kibana/issues/103325. const otherLinks: NavigationEntry[] = deepLinks - .filter((link) => link.navLinkStatus === AppNavLinkStatus.visible) + .filter((link) => (link.visibleIn ?? []).length > 0) .map((link) => ({ app: observabilityAppId, label: link.title, diff --git a/x-pack/plugins/observability_ai_assistant/public/plugin.tsx b/x-pack/plugins/observability_ai_assistant/public/plugin.tsx index 5ee13a1c5b6e80..ddb032a1a06a8c 100644 --- a/x-pack/plugins/observability_ai_assistant/public/plugin.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/plugin.tsx @@ -7,7 +7,6 @@ import React, { ComponentType, lazy, Ref } from 'react'; import ReactDOM from 'react-dom'; import { - AppNavLinkStatus, DEFAULT_APP_CATEGORIES, type AppMountParameters, type CoreSetup, @@ -59,7 +58,7 @@ export class ObservabilityAIAssistantPlugin euiIconType: 'logoObservability', appRoute: '/app/observabilityAIAssistant', category: DEFAULT_APP_CATEGORIES.observability, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], deepLinks: [ { id: 'conversations', diff --git a/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/system_logs.cy.ts b/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/system_logs.cy.ts index 8b95d171a70ef7..524d0ab1a2b800 100644 --- a/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/system_logs.cy.ts +++ b/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/system_logs.cy.ts @@ -682,7 +682,9 @@ describe('[Logs onboarding] System logs', () => { }); }); - describe('when integration installation succeed', () => { + // Skpping this test because it's failing in the CI + // https://github.com/elastic/kibana/issues/176995 + xdescribe('when integration installation succeed', () => { beforeEach(() => { cy.deleteIntegration('system'); cy.intercept('GET', '/api/fleet/epm/packages/system').as( diff --git a/x-pack/plugins/observability_onboarding/public/plugin.ts b/x-pack/plugins/observability_onboarding/public/plugin.ts index 1a4982eab08591..0819b7d1773901 100644 --- a/x-pack/plugins/observability_onboarding/public/plugin.ts +++ b/x-pack/plugins/observability_onboarding/public/plugin.ts @@ -17,7 +17,6 @@ import { DEFAULT_APP_CATEGORIES, Plugin, PluginInitializerContext, - AppNavLinkStatus, } from '@kbn/core/public'; import { DataPublicPluginSetup, @@ -71,7 +70,6 @@ export class ObservabilityOnboardingPlugin const config = this.ctx.config.get(); const { ui: { enabled: isObservabilityOnboardingUiEnabled }, - serverless: { enabled: isServerlessEnabled }, } = config; const pluginSetupDeps = plugins; @@ -80,9 +78,6 @@ export class ObservabilityOnboardingPlugin // and go to /app/observabilityOnboarding if (isObservabilityOnboardingUiEnabled) { core.application.register({ - navLinkStatus: isServerlessEnabled - ? AppNavLinkStatus.visible - : AppNavLinkStatus.hidden, id: PLUGIN_ID, title: 'Observability Onboarding', order: 8500, @@ -110,6 +105,7 @@ export class ObservabilityOnboardingPlugin config, }); }, + visibleIn: [], }); } diff --git a/x-pack/plugins/observability_shared/public/services/update_global_navigation.test.tsx b/x-pack/plugins/observability_shared/public/services/update_global_navigation.test.tsx index cc908f6b3d108c..868a1638a2775b 100644 --- a/x-pack/plugins/observability_shared/public/services/update_global_navigation.test.tsx +++ b/x-pack/plugins/observability_shared/public/services/update_global_navigation.test.tsx @@ -6,7 +6,7 @@ */ import { Subject } from 'rxjs'; -import { App, AppDeepLink, ApplicationStart, AppNavLinkStatus, AppUpdater } from '@kbn/core/public'; +import { App, AppDeepLink, ApplicationStart, AppUpdater } from '@kbn/core/public'; import { casesFeatureId, sloFeatureId } from '../../common'; import { updateGlobalNavigation } from './update_global_navigation'; @@ -29,7 +29,7 @@ describe('updateGlobalNavigation', () => { expect(callback).toHaveBeenCalledWith({ deepLinks, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }); }); }); @@ -49,7 +49,7 @@ describe('updateGlobalNavigation', () => { expect(callback).toHaveBeenCalledWith({ deepLinks, - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: ['sideNav', 'globalSearch', 'home', 'kibanaOverview'], }); }); @@ -65,7 +65,7 @@ describe('updateGlobalNavigation', () => { title: 'Cases', order: 8003, path: '/cases', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], // no visibility set }; const deepLinks = [caseRoute]; @@ -81,10 +81,10 @@ describe('updateGlobalNavigation', () => { deepLinks: [ { ...caseRoute, - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: ['sideNav', 'globalSearch'], // visibility set }, ], - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: ['sideNav', 'globalSearch', 'home', 'kibanaOverview'], }); }); }); @@ -101,7 +101,7 @@ describe('updateGlobalNavigation', () => { title: 'Cases', order: 8003, path: '/cases', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }; const deepLinks = [caseRoute]; @@ -114,13 +114,8 @@ describe('updateGlobalNavigation', () => { updateGlobalNavigation({ capabilities, deepLinks, updater$ }); expect(callback).toHaveBeenCalledWith({ - deepLinks: [ - { - ...caseRoute, - navLinkStatus: AppNavLinkStatus.hidden, - }, - ], - navLinkStatus: AppNavLinkStatus.visible, + deepLinks: [], // Deeplink has been filtered out + visibleIn: ['sideNav', 'globalSearch', 'home', 'kibanaOverview'], }); }); }); @@ -138,7 +133,7 @@ describe('updateGlobalNavigation', () => { title: 'Alerts', order: 8001, path: '/alerts', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }, ]; const callback = jest.fn(); @@ -155,10 +150,10 @@ describe('updateGlobalNavigation', () => { title: 'Alerts', order: 8001, path: '/alerts', - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: ['sideNav', 'globalSearch'], }, ], - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: ['sideNav', 'globalSearch', 'home', 'kibanaOverview'], }); }); }); @@ -173,7 +168,7 @@ describe('updateGlobalNavigation', () => { title: 'SLOs', order: 8002, path: '/slos', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }; const deepLinks = [sloRoute]; @@ -186,13 +181,8 @@ describe('updateGlobalNavigation', () => { updateGlobalNavigation({ capabilities, deepLinks, updater$ }); expect(callback).toHaveBeenCalledWith({ - deepLinks: [ - { - ...sloRoute, - navLinkStatus: AppNavLinkStatus.hidden, - }, - ], - navLinkStatus: AppNavLinkStatus.visible, + deepLinks: [], // Deeplink has been filtered out + visibleIn: ['sideNav', 'globalSearch', 'home', 'kibanaOverview'], }); }); @@ -209,7 +199,7 @@ describe('updateGlobalNavigation', () => { title: 'SLOs', order: 8002, path: '/slos', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }; const deepLinks = [sloRoute]; @@ -225,10 +215,10 @@ describe('updateGlobalNavigation', () => { deepLinks: [ { ...sloRoute, - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: ['sideNav', 'globalSearch'], }, ], - navLinkStatus: AppNavLinkStatus.visible, + visibleIn: ['sideNav', 'globalSearch', 'home', 'kibanaOverview'], }); }); }); diff --git a/x-pack/plugins/observability_shared/public/services/update_global_navigation.tsx b/x-pack/plugins/observability_shared/public/services/update_global_navigation.tsx index 8908a90ff65455..07f92546a09f78 100644 --- a/x-pack/plugins/observability_shared/public/services/update_global_navigation.tsx +++ b/x-pack/plugins/observability_shared/public/services/update_global_navigation.tsx @@ -6,7 +6,7 @@ */ import { Subject } from 'rxjs'; -import { AppNavLinkStatus, AppUpdater, ApplicationStart, AppDeepLink } from '@kbn/core/public'; +import { AppUpdater, ApplicationStart, AppDeepLink } from '@kbn/core/public'; import { CasesDeepLinkId } from '@kbn/cases-plugin/public'; import { casesFeatureId, sloFeatureId } from '../../common'; @@ -27,43 +27,52 @@ export function updateGlobalNavigation({ uptime, }).some((visible) => visible); - const updatedDeepLinks = deepLinks.map((link) => { - switch (link.id) { - case CasesDeepLinkId.cases: - return { - ...link, - navLinkStatus: - capabilities[casesFeatureId].read_cases && someVisible - ? AppNavLinkStatus.visible - : AppNavLinkStatus.hidden, - }; - case 'alerts': - return { - ...link, - navLinkStatus: someVisible ? AppNavLinkStatus.visible : AppNavLinkStatus.hidden, - }; - case 'rules': - return { - ...link, - navLinkStatus: someVisible ? AppNavLinkStatus.visible : AppNavLinkStatus.hidden, - }; - case 'slos': - return { - ...link, - navLinkStatus: !!capabilities[sloFeatureId]?.read - ? AppNavLinkStatus.visible - : AppNavLinkStatus.hidden, - }; - default: - return link; - } - }); + const updatedDeepLinks = deepLinks + .map((link) => { + switch (link.id) { + case CasesDeepLinkId.cases: + if (capabilities[casesFeatureId].read_cases && someVisible) { + return { + ...link, + visibleIn: ['sideNav', 'globalSearch'], + }; + } + return null; + case 'alerts': + if (someVisible) { + return { + ...link, + visibleIn: ['sideNav', 'globalSearch'], + }; + } + return null; + case 'rules': + if (someVisible) { + return { + ...link, + visibleIn: ['sideNav', 'globalSearch'], + }; + } + return null; + case 'slos': + if (!!capabilities[sloFeatureId]?.read) { + return { + ...link, + visibleIn: ['sideNav', 'globalSearch'], + }; + } + return null; + default: + return link; + } + }) + .filter((link): link is AppDeepLink => link !== null); updater$.next(() => ({ deepLinks: updatedDeepLinks, - navLinkStatus: + visibleIn: someVisible || !!capabilities[sloFeatureId]?.read - ? AppNavLinkStatus.visible - : AppNavLinkStatus.hidden, + ? ['sideNav', 'globalSearch', 'home', 'kibanaOverview'] + : [], })); } diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/plugin.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/public/plugin.ts index b650c7debcda49..c77ac6f5346771 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/plugin.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/plugin.ts @@ -7,7 +7,6 @@ import { AppMountParameters, - AppNavLinkStatus, CoreSetup, CoreStart, DEFAULT_APP_CATEGORIES, @@ -51,10 +50,9 @@ export class ObservabilityLogsExplorerPlugin title: logsExplorerAppTitle, category: DEFAULT_APP_CATEGORIES.observability, euiIconType: 'logoLogging', - navLinkStatus: this.config.navigation.showAppLink - ? AppNavLinkStatus.visible - : AppNavLinkStatus.hidden, - searchable: true, + visibleIn: this.config.navigation.showAppLink + ? ['globalSearch', 'sideNav'] + : ['globalSearch'], keywords: ['logs', 'log', 'explorer', 'logs explorer'], mount: async (appMountParams: ObservabilityLogsExplorerAppMountParameters) => { const [coreStart, pluginsStart, ownPluginStart] = await core.getStartServices(); @@ -75,7 +73,7 @@ export class ObservabilityLogsExplorerPlugin core.application.register({ id: 'observability-log-explorer', title: logsExplorerAppTitle, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount: async (appMountParams: AppMountParameters) => { const [coreStart] = await core.getStartServices(); const { renderObservabilityLogsExplorerRedirect } = await import( diff --git a/x-pack/plugins/reporting/public/plugin.ts b/x-pack/plugins/reporting/public/plugin.ts index c1bff9a0447c49..91fe945b6e09da 100644 --- a/x-pack/plugins/reporting/public/plugin.ts +++ b/x-pack/plugins/reporting/public/plugin.ts @@ -9,7 +9,6 @@ import * as Rx from 'rxjs'; import { catchError, filter, map, mergeMap, takeUntil } from 'rxjs/operators'; import { - AppNavLinkStatus, CoreSetup, CoreStart, HttpSetup, @@ -214,10 +213,9 @@ export class ReportingPublicPlugin }); }, title: 'Reporting redirect app', - searchable: false, chromeless: true, exactRoute: true, - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], }); uiActionsSetup.addTriggerAction( diff --git a/x-pack/plugins/reporting/public/shared_imports.ts b/x-pack/plugins/reporting/public/shared_imports.ts index 3947da2dce8ff6..4ce50afde69150 100644 --- a/x-pack/plugins/reporting/public/shared_imports.ts +++ b/x-pack/plugins/reporting/public/shared_imports.ts @@ -9,8 +9,6 @@ // better to remove this file and do without indirect imports. export type { SharePluginSetup, SharePluginStart, LocatorPublic } from '@kbn/share-plugin/public'; -export { AppNavLinkStatus } from '@kbn/core/public'; - export type { UseRequestResponse } from '@kbn/es-ui-shared-plugin/public'; export { useRequest } from '@kbn/es-ui-shared-plugin/public'; diff --git a/x-pack/plugins/screenshotting/public/plugin.tsx b/x-pack/plugins/screenshotting/public/plugin.tsx index f50291eff46fd3..264783748b59ea 100755 --- a/x-pack/plugins/screenshotting/public/plugin.tsx +++ b/x-pack/plugins/screenshotting/public/plugin.tsx @@ -10,7 +10,6 @@ import ReactDOM from 'react-dom'; import type { AppMountParameters, CoreSetup, Plugin } from '@kbn/core/public'; import type { ExpressionsSetup } from '@kbn/expressions-plugin/public'; import type { ScreenshotModePluginSetup } from '@kbn/screenshot-mode-plugin/public'; -import { AppNavLinkStatus } from '@kbn/core/public'; import { SCREENSHOTTING_APP_ID } from '../common'; import { App, ScreenshotModeContext } from './app'; @@ -25,7 +24,7 @@ export class ScreenshottingPlugin implements Plugin { application.register({ id: SCREENSHOTTING_APP_ID, title: 'Screenshotting Expressions Renderer', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], chromeless: true, mount: async ({ element }: AppMountParameters) => { diff --git a/x-pack/plugins/security/public/account_management/account_management_app.test.tsx b/x-pack/plugins/security/public/account_management/account_management_app.test.tsx index 543ec093e367be..e0f2b0779f8ba2 100644 --- a/x-pack/plugins/security/public/account_management/account_management_app.test.tsx +++ b/x-pack/plugins/security/public/account_management/account_management_app.test.tsx @@ -9,7 +9,6 @@ import { act } from '@testing-library/react'; import { noop } from 'lodash'; import type { AppUnmount } from '@kbn/core/public'; -import { AppNavLinkStatus } from '@kbn/core/public'; import { coreMock, scopedHistoryMock, themeServiceMock } from '@kbn/core/public/mocks'; import { accountManagementApp } from './account_management_app'; @@ -42,7 +41,7 @@ describe('accountManagementApp', () => { expect.objectContaining({ id: 'security_account', appRoute: '/security/account', - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], mount: expect.any(Function), }) ); diff --git a/x-pack/plugins/security/public/account_management/account_management_app.tsx b/x-pack/plugins/security/public/account_management/account_management_app.tsx index 59678a246abe64..d7bb63e5a8ce7a 100644 --- a/x-pack/plugins/security/public/account_management/account_management_app.tsx +++ b/x-pack/plugins/security/public/account_management/account_management_app.tsx @@ -18,7 +18,6 @@ import type { CoreTheme, StartServicesAccessor, } from '@kbn/core/public'; -import { AppNavLinkStatus } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import { I18nProvider } from '@kbn/i18n-react'; import { @@ -50,7 +49,7 @@ export const accountManagementApp = Object.freeze({ title: i18n.translate('xpack.security.account.breadcrumb', { defaultMessage: 'User settings', }), - navLinkStatus: AppNavLinkStatus.hidden, + visibleIn: [], appRoute: '/security/account', async mount({ element, theme$, history }: AppMountParameters) { const [[coreStart], { AccountManagementPage }] = await Promise.all([ diff --git a/x-pack/plugins/security_solution/public/common/links/deep_links.ts b/x-pack/plugins/security_solution/public/common/links/deep_links.ts index a85a250104816b..76d1b79351b7a9 100644 --- a/x-pack/plugins/security_solution/public/common/links/deep_links.ts +++ b/x-pack/plugins/security_solution/public/common/links/deep_links.ts @@ -6,29 +6,36 @@ */ import type { Subject, Subscription } from 'rxjs'; -import { AppNavLinkStatus } from '@kbn/core/public'; -import type { AppDeepLink, AppUpdater } from '@kbn/core/public'; +import type { AppDeepLink, AppUpdater, AppDeepLinkLocations } from '@kbn/core/public'; import { appLinks$ } from './links'; import type { AppLinkItems } from './types'; export type DeepLinksFormatter = (appLinks: AppLinkItems) => AppDeepLink[]; const defaultDeepLinksFormatter: DeepLinksFormatter = (appLinks) => - appLinks.map((appLink) => ({ - id: appLink.id, - path: appLink.path, - title: appLink.title, - searchable: !appLink.globalSearchDisabled, - ...(appLink.globalNavPosition != null - ? { navLinkStatus: AppNavLinkStatus.visible, order: appLink.globalNavPosition } - : { navLinkStatus: AppNavLinkStatus.hidden }), - ...(appLink.globalSearchKeywords != null ? { keywords: appLink.globalSearchKeywords } : {}), - ...(appLink.links && appLink.links?.length - ? { - deepLinks: defaultDeepLinksFormatter(appLink.links), - } - : {}), - })); + appLinks.map((appLink) => { + const visibleIn: Set = new Set(appLink.visibleIn ?? []); + if (!appLink.globalSearchDisabled) { + visibleIn.add('globalSearch'); + } + if (appLink.globalNavPosition != null) { + visibleIn.add('sideNav'); + } + const deepLink: AppDeepLink = { + id: appLink.id, + path: appLink.path, + title: appLink.title, + visibleIn: Array.from(visibleIn), + ...(appLink.globalNavPosition != null ? { order: appLink.globalNavPosition } : {}), + ...(appLink.globalSearchKeywords != null ? { keywords: appLink.globalSearchKeywords } : {}), + ...(appLink.links && appLink.links?.length + ? { + deepLinks: defaultDeepLinksFormatter(appLink.links), + } + : {}), + }; + return deepLink; + }); /** * Registers any change in appLinks to be updated in app deepLinks @@ -39,7 +46,6 @@ export const registerDeepLinksUpdater = ( ): Subscription => { return appLinks$.subscribe((appLinks) => { appUpdater$.next(() => ({ - navLinkStatus: AppNavLinkStatus.hidden, // needed to prevent main security link to switch to visible after update deepLinks: formatter(appLinks), })); }); diff --git a/x-pack/plugins/security_solution/public/common/links/types.ts b/x-pack/plugins/security_solution/public/common/links/types.ts index 53b5adc93b774b..8c80ef848780a1 100644 --- a/x-pack/plugins/security_solution/public/common/links/types.ts +++ b/x-pack/plugins/security_solution/public/common/links/types.ts @@ -15,6 +15,7 @@ import type { LinkCategories as GenericLinkCategories, } from '@kbn/security-solution-navigation'; import type { UpsellingService } from '@kbn/security-solution-upselling/service'; +import type { AppDeepLinkLocations } from '@kbn/core-application-browser'; import type { ExperimentalFeatures } from '../../../common/experimental_features'; import type { RequiredCapabilities } from '../lib/capabilities'; @@ -133,6 +134,10 @@ export interface LinkItem { * Reserved for links management, this property is set automatically * */ unauthorized?: boolean; + /** + * Locations where the link is visible in the UI + */ + visibleIn?: AppDeepLinkLocations[]; } export type AppLinkItems = Readonly; diff --git a/x-pack/plugins/security_solution/public/plugin.tsx b/x-pack/plugins/security_solution/public/plugin.tsx index 72d0bb24ae197a..0aa89c80e0a188 100644 --- a/x-pack/plugins/security_solution/public/plugin.tsx +++ b/x-pack/plugins/security_solution/public/plugin.tsx @@ -19,7 +19,7 @@ import type { import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { NowProvider, QueryService } from '@kbn/data-plugin/public'; -import { DEFAULT_APP_CATEGORIES, AppNavLinkStatus } from '@kbn/core/public'; +import { DEFAULT_APP_CATEGORIES } from '@kbn/core/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { getLazyEndpointAgentTamperProtectionExtension } from './management/pages/policy/view/ingest_manager_integration/lazy_endpoint_agent_tamper_protection_extension'; import type { FleetUiExtensionGetterOptions } from './management/pages/policy/view/ingest_manager_integration/types'; @@ -221,10 +221,8 @@ export class Plugin implements IPlugin