From 287752c159cdbfcef01bfb003088883b184fd196 Mon Sep 17 00:00:00 2001 From: Gloria Hornero Date: Wed, 26 Jul 2023 16:28:33 +0200 Subject: [PATCH 01/58] [Security Solution] Unskipping `With anomalies data` tests (#162302) --- .../explore/dashboards/entity_analytics.cy.ts | 57 ++++++++----------- .../cypress/screens/common.ts | 2 + .../cypress/tasks/entity_analytics.ts | 33 +++++++++++ 3 files changed, 60 insertions(+), 32 deletions(-) create mode 100644 x-pack/plugins/security_solution/cypress/tasks/entity_analytics.ts diff --git a/x-pack/plugins/security_solution/cypress/e2e/explore/dashboards/entity_analytics.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/explore/dashboards/entity_analytics.cy.ts index a7cff2fc14aefc..c1688b53797e3a 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/explore/dashboards/entity_analytics.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/explore/dashboards/entity_analytics.cy.ts @@ -9,12 +9,8 @@ import { login, visit } from '../../../tasks/login'; import { ALERTS_URL, ENTITY_ANALYTICS_URL } from '../../../urls/navigation'; -import { - cleanKibana, - deleteAlertsAndRules, - waitForPageToBeLoaded, - waitForTableToLoad, -} from '../../../tasks/common'; +import { cleanKibana, deleteAlertsAndRules, waitForPageToBeLoaded } from '../../../tasks/common'; + import { ANOMALIES_TABLE, ANOMALIES_TABLE_ROWS, @@ -32,8 +28,6 @@ import { USERS_TABLE_ALERT_CELL, HOSTS_TABLE_ALERT_CELL, HOSTS_TABLE, - ANOMALIES_TABLE_NEXT_PAGE_BUTTON, - ANOMALIES_TABLE_ENABLE_JOB_BUTTON, ANOMALIES_TABLE_ENABLE_JOB_LOADER, ANOMALIES_TABLE_COUNT_COLUMN, } from '../../../screens/entity_analytics'; @@ -49,6 +43,11 @@ import { OPTION_LIST_LABELS, OPTION_LIST_VALUES } from '../../../screens/common/ import { setRowsPerPageTo } from '../../../tasks/table_pagination'; import { clearSearchBar, kqlSearch } from '../../../tasks/security_header'; import { setEndDate, setEndDateNow, updateDates } from '../../../tasks/date_picker'; +import { + enableJob, + navigateToNextPage, + waitForAnomaliesToBeLoaded, +} from '../../../tasks/entity_analytics'; const TEST_USER_ALERTS = 2; const TEST_USER_NAME = 'test'; @@ -304,46 +303,40 @@ describe('Entity Analytics Dashboard', () => { }); }); - // tracked by https://github.com/elastic/kibana/issues/161874 - describe.skip('With anomalies data', () => { + describe('With anomalies data', () => { before(() => { cy.task('esArchiverLoad', 'network'); + login(); + visit(ENTITY_ANALYTICS_URL); + waitForPageToBeLoaded(); + cy.get(ANOMALIES_TABLE).should('be.visible'); + waitForAnomaliesToBeLoaded(); }); after(() => { cy.task('esArchiverUnload', 'network'); }); - beforeEach(() => { - login(); - visit(ENTITY_ANALYTICS_URL); - waitForPageToBeLoaded(); - }); - - it('renders table with pagination', () => { - cy.get(ANOMALIES_TABLE).should('be.visible'); - waitForTableToLoad(); + it('should enable a job and renders the table with pagination', () => { + // Enables the job and perform checks + cy.get(ANOMALIES_TABLE_ROWS, { timeout: 120000 }) + .eq(5) + .within(() => { + enableJob(); + cy.get(ANOMALIES_TABLE_ENABLE_JOB_LOADER).should('be.visible'); + cy.get(ANOMALIES_TABLE_COUNT_COLUMN).should('include.text', '0'); + }); - // Increase default timeout because anomalies table takes a while to load - cy.get(ANOMALIES_TABLE_ROWS, { timeout: 20000 }).should('have.length', 10); + // Checks pagination + cy.get(ANOMALIES_TABLE_ROWS, { timeout: 120000 }).should('have.length', 10); // navigates to next page - cy.get(ANOMALIES_TABLE_NEXT_PAGE_BUTTON).click(); + navigateToNextPage(); cy.get(ANOMALIES_TABLE_ROWS).should('have.length', 10); // updates rows per page to 25 items setRowsPerPageTo(25); cy.get(ANOMALIES_TABLE_ROWS).should('have.length', 25); }); - - it('enables a job', () => { - cy.get(ANOMALIES_TABLE_ROWS) - .eq(5) - .within(() => { - cy.get(ANOMALIES_TABLE_ENABLE_JOB_BUTTON).click(); - cy.get(ANOMALIES_TABLE_ENABLE_JOB_LOADER).should('be.visible'); - cy.get(ANOMALIES_TABLE_COUNT_COLUMN).should('include.text', '0'); - }); - }); }); }); diff --git a/x-pack/plugins/security_solution/cypress/screens/common.ts b/x-pack/plugins/security_solution/cypress/screens/common.ts index 8dc5517aae3c52..3d6aae97850188 100644 --- a/x-pack/plugins/security_solution/cypress/screens/common.ts +++ b/x-pack/plugins/security_solution/cypress/screens/common.ts @@ -6,3 +6,5 @@ */ export const TOOLTIP = '[role="tooltip"]'; + +export const BASIC_TABLE_LOADING = '.euiBasicTable.euiBasicTable-loading'; diff --git a/x-pack/plugins/security_solution/cypress/tasks/entity_analytics.ts b/x-pack/plugins/security_solution/cypress/tasks/entity_analytics.ts new file mode 100644 index 00000000000000..156b92df634d0a --- /dev/null +++ b/x-pack/plugins/security_solution/cypress/tasks/entity_analytics.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { BASIC_TABLE_LOADING } from '../screens/common'; +import { + ANOMALIES_TABLE_ROWS, + ANOMALIES_TABLE_ENABLE_JOB_BUTTON, + ANOMALIES_TABLE_NEXT_PAGE_BUTTON, +} from '../screens/entity_analytics'; +import { ENTITY_ANALYTICS_URL } from '../urls/navigation'; + +import { visit } from './login'; + +export const waitForAnomaliesToBeLoaded = () => { + cy.waitUntil(() => { + visit(ENTITY_ANALYTICS_URL); + cy.get(BASIC_TABLE_LOADING).should('exist'); + cy.get(BASIC_TABLE_LOADING).should('not.exist'); + return cy.get(ANOMALIES_TABLE_ROWS).then((tableRows) => tableRows.length > 1); + }); +}; + +export const enableJob = () => { + cy.get(ANOMALIES_TABLE_ENABLE_JOB_BUTTON).click(); +}; + +export const navigateToNextPage = () => { + cy.get(ANOMALIES_TABLE_NEXT_PAGE_BUTTON).click(); +}; From de0d7b538ec6ad535ecbdb97897ade84d9793c54 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Wed, 26 Jul 2023 16:31:06 +0200 Subject: [PATCH 02/58] [Synthetics] Avoid unnecessary queries on metric item hover (#161829) --- .../overview/overview/actions_popover.tsx | 10 +- .../routes/monitor_cruds/edit_monitor.ts | 11 +- .../routes/monitor_cruds/helper.test.ts | 131 ++++++++++++++++++ .../server/routes/monitor_cruds/helper.ts | 24 +++- 4 files changed, 162 insertions(+), 14 deletions(-) create mode 100644 x-pack/plugins/synthetics/server/routes/monitor_cruds/helper.test.ts diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx index a8a42000be7243..9348bae13b2536 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx @@ -19,13 +19,12 @@ import { import { FETCH_STATUS } from '@kbn/observability-shared-plugin/public'; import { useDispatch, useSelector } from 'react-redux'; import styled from 'styled-components'; +import { toggleStatusAlert } from '../../../../../../../common/runtime_types/monitor_management/alert_config'; import { PRIVATE_AVAILABLE_LABEL } from '../../../monitor_add_edit/form/run_test_btn'; import { manualTestMonitorAction, manualTestRunInProgressSelector, } from '../../../../state/manual_test_runs'; -import { toggleStatusAlert } from '../../../../../../../common/runtime_types/monitor_management/alert_config'; -import { useSelectedMonitor } from '../../../monitor_details/hooks/use_selected_monitor'; import { useMonitorAlertEnable } from '../../../../hooks/use_monitor_alert_enable'; import { ConfigKey, MonitorOverviewItem } from '../../../../../../../common/runtime_types'; import { useCanEditSynthetics } from '../../../../../../hooks/use_capabilities'; @@ -115,7 +114,6 @@ export function ActionsPopover({ }); const editUrl = useEditMonitorLocator({ configId: monitor.configId }); - const { monitor: monitorFields } = useSelectedMonitor(monitor.configId); const canEditSynthetics = useCanEditSynthetics(); const labels = useMemo( @@ -235,7 +233,11 @@ export function ActionsPopover({ if (!alertLoading) { updateAlertEnabledState({ monitor: { - [ConfigKey.ALERT_CONFIG]: toggleStatusAlert(monitorFields?.[ConfigKey.ALERT_CONFIG]), + [ConfigKey.ALERT_CONFIG]: toggleStatusAlert({ + status: { + enabled: monitor.isStatusAlertEnabled, + }, + }), }, configId: monitor.configId, name: monitor.name, diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts index e5108a3d0dcc0a..ac50f1b48d0192 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts @@ -4,12 +4,12 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { mergeWith } from 'lodash'; import { schema } from '@kbn/config-schema'; import { SavedObjectsUpdateResponse, SavedObject } from '@kbn/core/server'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import { getPrivateLocations } from '../../synthetics_service/get_private_locations'; +import { mergeSourceMonitor } from './helper'; import { RouteContext, SyntheticsRestApiRouteFactory } from '../types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; import { @@ -64,7 +64,7 @@ export const editSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ( ); const normalizedPreviousMonitor = normalizeSecrets(decryptedPreviousMonitor).attributes; - const editedMonitor = mergeWith(normalizedPreviousMonitor, monitor, customizer); + const editedMonitor = mergeSourceMonitor(normalizedPreviousMonitor, monitor); const validationResult = validateMonitor(editedMonitor as MonitorFields); @@ -227,10 +227,3 @@ export const syncEditedMonitor = async ({ throw e; } }; - -// Ensure that METADATA is merged deeply, to protect AAD and prevent decryption errors -const customizer = (_: any, srcValue: any, key: string) => { - if (key !== ConfigKey.METADATA) { - return srcValue; - } -}; diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/helper.test.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/helper.test.ts new file mode 100644 index 00000000000000..d083c3f688dd5c --- /dev/null +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/helper.test.ts @@ -0,0 +1,131 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { mergeSourceMonitor } from './helper'; +import { EncryptedSyntheticsMonitor } from '../../../common/runtime_types'; + +describe('mergeSourceMonitor', () => { + it('should merge keys', function () { + const newData = { + name: 'new-name', + tags: ['a', 'b', 'c'], + }; + const result = mergeSourceMonitor({ ...testMonitor }, newData as any); + expect(result).toEqual({ + ...testMonitor, + ...newData, + }); + }); + + it('should merge alert keys', () => { + const result = mergeSourceMonitor({ ...testMonitor }, { + alert: { + status: { + enabled: false, + }, + }, + } as any); + expect(result.alert).toEqual({ + status: { + enabled: false, + }, + tls: { + enabled: true, + }, + }); + }); + + it('should merge locations keys', () => { + const result = mergeSourceMonitor({ ...testMonitor }, { + locations: [ + { + geo: { + lon: -95.86, + lat: 41.25, + }, + isServiceManaged: true, + id: 'us_central_qa', + label: 'North America - US Central', + }, + ], + } as any); + expect(result.locations).toEqual([ + { + geo: { + lon: -95.86, + lat: 41.25, + }, + isServiceManaged: true, + id: 'us_central_qa', + label: 'North America - US Central', + }, + ]); + }); +}); +const testMonitor = { + type: 'http', + form_monitor_type: 'http', + enabled: true, + alert: { + status: { + enabled: true, + }, + tls: { + enabled: true, + }, + }, + schedule: { + number: '3', + unit: 'm', + }, + 'service.name': '', + config_id: 'ae88f0aa-9c7d-4a5f-96dc-89d65a0ca947', + tags: [], + timeout: '16', + name: 'Todos Lightweight', + locations: [ + { + geo: { + lon: -95.86, + lat: 41.25, + }, + isServiceManaged: true, + id: 'us_central', + label: 'North America - US Central', + }, + ], + namespace: 'default', + origin: 'project', + journey_id: 'todos-lightweight', + hash: 'f4b6u3Q/PMK5KzEtPeMNzXJBA46rt+yilohaAoqMzqk=', + id: 'todos-lightweight-test-projects-default', + __ui: { + is_tls_enabled: false, + }, + urls: '${devUrl}', + max_redirects: '0', + 'url.port': null, + proxy_url: '', + 'response.include_body': 'on_error', + 'response.include_headers': true, + 'check.response.status': ['404'], + 'check.request.method': 'GET', + mode: 'any', + 'response.include_body_max_bytes': '1024', + ipv4: true, + ipv6: true, + 'ssl.certificate_authorities': '', + 'ssl.certificate': '', + 'ssl.verification_mode': 'full', + 'ssl.supported_protocols': ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'], + project_id: 'test-projects', + original_space: 'default', + custom_heartbeat_id: 'todos-lightweight-test-projects-default', + revision: 21, + created_at: '2023-06-15T10:00:09.650Z', + updated_at: '2023-07-11T16:55:45.976Z', +} as EncryptedSyntheticsMonitor; diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/helper.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/helper.ts index 546bbd32265394..49267dab7fd81d 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/helper.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/helper.ts @@ -6,8 +6,30 @@ */ import { SavedObject } from '@kbn/core/server'; -import { EncryptedSyntheticsMonitorAttributes } from '../../../common/runtime_types'; +import { mergeWith } from 'lodash'; +import { + EncryptedSyntheticsMonitorAttributes, + ConfigKey, + EncryptedSyntheticsMonitor, +} from '../../../common/runtime_types'; export function mapSavedObjectToMonitor(so: SavedObject) { return Object.assign(so.attributes, { created_at: so.created_at, updated_at: so.updated_at }); } + +export function mergeSourceMonitor( + normalizedPreviousMonitor: EncryptedSyntheticsMonitor, + monitor: EncryptedSyntheticsMonitor +) { + return mergeWith(normalizedPreviousMonitor, monitor, customizer); +} + +// Ensure that METADATA is merged deeply, to protect AAD and prevent decryption errors +const customizer = (destVal: any, srcValue: any, key: string) => { + if (key === ConfigKey.ALERT_CONFIG) { + return { ...destVal, ...srcValue }; + } + if (key !== ConfigKey.METADATA) { + return srcValue; + } +}; From 7c16dd9817464b29d310b2bf7af4a18527b0e097 Mon Sep 17 00:00:00 2001 From: Yngrid Coello Date: Wed, 26 Jul 2023 17:05:30 +0200 Subject: [PATCH 03/58] [Logs onboarding] elastic-agent.yml file now includes es host with ports (#162490) Closes https://github.com/elastic/kibana/issues/162141. ### Changes - Created an `esLegacyConfigService` to access esConfiguration and get the hosts (protocol + url + port). - Initialised the service mentioned using `core.elasticsearch.legacy.config$`. - Injected `esLegacyConfigService` as a resource for routes. - Stop service whenever plugin is stopped. --- .../observability_onboarding/server/plugin.ts | 11 +++- .../routes/custom_logs/get_fallback_urls.ts | 33 ++++-------- .../server/routes/custom_logs/route.ts | 4 +- .../server/routes/elastic_agent/route.ts | 11 ++-- .../server/routes/register_routes.ts | 6 +++ .../server/routes/types.ts | 4 ++ .../services/es_legacy_config_service.ts | 53 +++++++++++++++++++ 7 files changed, 91 insertions(+), 31 deletions(-) create mode 100644 x-pack/plugins/observability_onboarding/server/services/es_legacy_config_service.ts diff --git a/x-pack/plugins/observability_onboarding/server/plugin.ts b/x-pack/plugins/observability_onboarding/server/plugin.ts index e0e64948359e95..2b58fa82859bf3 100644 --- a/x-pack/plugins/observability_onboarding/server/plugin.ts +++ b/x-pack/plugins/observability_onboarding/server/plugin.ts @@ -24,6 +24,7 @@ import { } from './types'; import { ObservabilityOnboardingConfig } from '.'; import { observabilityOnboardingState } from './saved_objects/observability_onboarding_status'; +import { EsLegacyConfigService } from './services/es_legacy_config_service'; export class ObservabilityOnboardingPlugin implements @@ -35,6 +36,8 @@ export class ObservabilityOnboardingPlugin > { private readonly logger: Logger; + esLegacyConfigService = new EsLegacyConfigService(); + constructor( private readonly initContext: PluginInitializerContext ) { @@ -47,6 +50,7 @@ export class ObservabilityOnboardingPlugin plugins: ObservabilityOnboardingPluginSetupDependencies ) { this.logger.debug('observability_onboarding: Setup'); + this.esLegacyConfigService.setup(core.elasticsearch.legacy.config$); core.savedObjects.registerType(observabilityOnboardingState); @@ -70,6 +74,9 @@ export class ObservabilityOnboardingPlugin repository: getObservabilityOnboardingServerRouteRepository(), plugins: resourcePlugins, config, + services: { + esLegacyConfigService: this.esLegacyConfigService, + }, }); return {}; @@ -81,5 +88,7 @@ export class ObservabilityOnboardingPlugin return {}; } - public stop() {} + public stop() { + this.esLegacyConfigService.stop(); + } } diff --git a/x-pack/plugins/observability_onboarding/server/routes/custom_logs/get_fallback_urls.ts b/x-pack/plugins/observability_onboarding/server/routes/custom_logs/get_fallback_urls.ts index e47e1f16a33518..06e560315d5c34 100644 --- a/x-pack/plugins/observability_onboarding/server/routes/custom_logs/get_fallback_urls.ts +++ b/x-pack/plugins/observability_onboarding/server/routes/custom_logs/get_fallback_urls.ts @@ -5,31 +5,10 @@ * 2.0. */ -import type { Client } from '@elastic/elasticsearch'; import { CoreStart } from '@kbn/core/server'; +import { EsLegacyConfigService } from '../../services/es_legacy_config_service'; -export function getFallbackUrls(coreStart: CoreStart) { - const esClient = coreStart.elasticsearch.client.asInternalUser as Client; - const [elasticsearchUrl] = getElasticsearchUrl(esClient); - const kibanaUrl = getKibanaUrl(coreStart); - return { elasticsearchUrl, kibanaUrl }; -} - -function getElasticsearchUrl(esClient: Client): string[] { - const aliveConnections = esClient.connectionPool.connections.filter( - ({ status }) => status === 'alive' - ); - if (aliveConnections.length) { - return aliveConnections.map(({ url }) => { - const { protocol, host } = new URL(url); - return `${protocol}//${host}`; - }); - } - - return ['http://localhost:9200']; -} - -function getKibanaUrl({ http }: CoreStart) { +export function getFallbackKibanaUrl({ http }: CoreStart) { const basePath = http.basePath; const { protocol, hostname, port } = http.getServerInfo(); return `${protocol}://${hostname}:${port}${basePath @@ -37,3 +16,11 @@ function getKibanaUrl({ http }: CoreStart) { .prepend('/') .slice(0, -1)}`; } + +export async function getFallbackESUrl( + esLegacyConfigService: EsLegacyConfigService +) { + const config = await esLegacyConfigService.readConfig(); + + return config.hosts; +} diff --git a/x-pack/plugins/observability_onboarding/server/routes/custom_logs/route.ts b/x-pack/plugins/observability_onboarding/server/routes/custom_logs/route.ts index f700252aad5969..a186c0c5d15945 100644 --- a/x-pack/plugins/observability_onboarding/server/routes/custom_logs/route.ts +++ b/x-pack/plugins/observability_onboarding/server/routes/custom_logs/route.ts @@ -11,7 +11,7 @@ import { ObservabilityOnboardingState } from '../../saved_objects/observability_ import { createObservabilityOnboardingServerRoute } from '../create_observability_onboarding_server_route'; import { createShipperApiKey } from './api_key/create_shipper_api_key'; import { hasLogMonitoringPrivileges } from './api_key/has_log_monitoring_privileges'; -import { getFallbackUrls } from './get_fallback_urls'; +import { getFallbackKibanaUrl } from './get_fallback_urls'; import { getHasLogs } from './get_has_logs'; import { getObservabilityOnboardingState } from './get_observability_onboarding_state'; import { saveObservabilityOnboardingState } from './save_observability_onboarding_state'; @@ -52,7 +52,7 @@ const installShipperSetupRoute = createObservabilityOnboardingServerRoute({ const kibanaUrl = core.setup.http.basePath.publicBaseUrl ?? // priority given to server.publicBaseUrl plugins.cloud?.setup?.kibanaUrl ?? // then cloud id - getFallbackUrls(coreStart).kibanaUrl; // falls back to local network binding + getFallbackKibanaUrl(coreStart); // falls back to local network binding const scriptDownloadUrl = `${kibanaUrl}/plugins/observabilityOnboarding/assets/standalone_agent_setup.sh`; const apiEndpoint = `${kibanaUrl}/internal/observability_onboarding`; diff --git a/x-pack/plugins/observability_onboarding/server/routes/elastic_agent/route.ts b/x-pack/plugins/observability_onboarding/server/routes/elastic_agent/route.ts index f9d4df32fb4fbe..1d243845d580f0 100644 --- a/x-pack/plugins/observability_onboarding/server/routes/elastic_agent/route.ts +++ b/x-pack/plugins/observability_onboarding/server/routes/elastic_agent/route.ts @@ -10,7 +10,7 @@ import { getAuthenticationAPIKey } from '../../lib/get_authentication_api_key'; import { createObservabilityOnboardingServerRoute } from '../create_observability_onboarding_server_route'; import { getObservabilityOnboardingState } from '../custom_logs/get_observability_onboarding_state'; import { generateYml } from './generate_yml'; -import { getFallbackUrls } from '../custom_logs/get_fallback_urls'; +import { getFallbackESUrl } from '../custom_logs/get_fallback_urls'; const generateConfig = createObservabilityOnboardingServerRoute({ endpoint: 'GET /internal/observability_onboarding/elastic_agent/config', @@ -26,6 +26,7 @@ const generateConfig = createObservabilityOnboardingServerRoute({ core, plugins, request, + services: { esLegacyConfigService }, } = resources; const authApiKey = getAuthenticationAPIKey(request); @@ -33,9 +34,9 @@ const generateConfig = createObservabilityOnboardingServerRoute({ const savedObjectsClient = coreStart.savedObjects.createInternalRepository(); - const elasticsearchUrl = - plugins.cloud?.setup?.elasticsearchUrl ?? - getFallbackUrls(coreStart).elasticsearchUrl; + const elasticsearchUrl = plugins.cloud?.setup?.elasticsearchUrl + ? [plugins.cloud?.setup?.elasticsearchUrl] + : await getFallbackESUrl(esLegacyConfigService); const savedState = await getObservabilityOnboardingState({ savedObjectsClient, @@ -50,7 +51,7 @@ const generateConfig = createObservabilityOnboardingServerRoute({ apiKey: authApiKey ? `${authApiKey?.apiKeyId}:${authApiKey?.apiKey}` : '$API_KEY', - esHost: [elasticsearchUrl], + esHost: elasticsearchUrl, logfileId: `custom-logs-${Date.now()}`, serviceName: savedState?.state.serviceName, }); diff --git a/x-pack/plugins/observability_onboarding/server/routes/register_routes.ts b/x-pack/plugins/observability_onboarding/server/routes/register_routes.ts index 120104ccca989b..26a670b8f0ee5f 100644 --- a/x-pack/plugins/observability_onboarding/server/routes/register_routes.ts +++ b/x-pack/plugins/observability_onboarding/server/routes/register_routes.ts @@ -15,6 +15,7 @@ import { } from '@kbn/server-route-repository'; import * as t from 'io-ts'; import { ObservabilityOnboardingConfig } from '..'; +import { EsLegacyConfigService } from '../services/es_legacy_config_service'; import { ObservabilityOnboardingRequestHandlerContext } from '../types'; import { ObservabilityOnboardingRouteHandlerResources } from './types'; @@ -24,6 +25,9 @@ interface RegisterRoutes { logger: Logger; plugins: ObservabilityOnboardingRouteHandlerResources['plugins']; config: ObservabilityOnboardingConfig; + services: { + esLegacyConfigService: EsLegacyConfigService; + }; } export function registerRoutes({ @@ -32,6 +36,7 @@ export function registerRoutes({ logger, plugins, config, + services, }: RegisterRoutes) { const routes = Object.values(repository); @@ -77,6 +82,7 @@ export function registerRoutes({ }, }, config, + services, })) as any; if (data === undefined) { diff --git a/x-pack/plugins/observability_onboarding/server/routes/types.ts b/x-pack/plugins/observability_onboarding/server/routes/types.ts index d4933a64490527..5a1defdde16bca 100644 --- a/x-pack/plugins/observability_onboarding/server/routes/types.ts +++ b/x-pack/plugins/observability_onboarding/server/routes/types.ts @@ -7,6 +7,7 @@ import { CoreSetup, CoreStart, KibanaRequest, Logger } from '@kbn/core/server'; import { ObservabilityOnboardingServerRouteRepository } from '.'; import { ObservabilityOnboardingConfig } from '..'; +import { EsLegacyConfigService } from '../services/es_legacy_config_service'; import { ObservabilityOnboardingPluginSetupDependencies, ObservabilityOnboardingPluginStartDependencies, @@ -32,6 +33,9 @@ export interface ObservabilityOnboardingRouteHandlerResources { start: () => Promise; }; config: ObservabilityOnboardingConfig; + services: { + esLegacyConfigService: EsLegacyConfigService; + }; } export interface ObservabilityOnboardingRouteCreateOptions { diff --git a/x-pack/plugins/observability_onboarding/server/services/es_legacy_config_service.ts b/x-pack/plugins/observability_onboarding/server/services/es_legacy_config_service.ts new file mode 100644 index 00000000000000..167db903867a95 --- /dev/null +++ b/x-pack/plugins/observability_onboarding/server/services/es_legacy_config_service.ts @@ -0,0 +1,53 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { firstValueFrom, Observable, Subscription } from 'rxjs'; +import { ElasticsearchConfig } from '@kbn/core/server'; + +export class EsLegacyConfigService { + /** + * The elasticsearch config value at a given point in time. + */ + private config?: ElasticsearchConfig; + + /** + * An observable that emits elasticsearch config. + */ + private config$?: Observable; + + /** + * A reference to the subscription to the elasticsearch observable + */ + private configSub?: Subscription; + + setup(config$: Observable) { + this.config$ = config$; + this.configSub = this.config$.subscribe((config) => { + this.config = config; + }); + } + + stop() { + if (this.configSub) { + this.configSub.unsubscribe(); + } + } + + async readConfig(): Promise { + if (!this.config$) { + throw new Error( + 'Could not read elasticsearch config, this service has not been setup!' + ); + } + + if (!this.config) { + return firstValueFrom(this.config$); + } + + return this.config; + } +} From 8c6de90954751675813d9b663de3c2c60914f20c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loix?= Date: Wed, 26 Jul 2023 16:24:04 +0100 Subject: [PATCH 04/58] [Serverless navigation] Add documentation (#162318) This PR adds the documentation for the serverless navigation. ### Note for reviewer The documentation is best viewed in rendered markdown: https://github.com/sebelga/kibana/blob/project-navigation-documentation/packages/shared-ux/chrome/serverless_projects_documentation.md --------- Co-authored-by: Anton Dosov Co-authored-by: Tim Sullivan --- nav-kibana-dev.docnav.json | 3 + .../src/ui/components/navigation_item.tsx | 10 +- .../src/ui/components/recently_accessed.tsx | 4 + .../serverless_projects_documentation.mdx | 508 ++++++++++++++++++ 4 files changed, 518 insertions(+), 7 deletions(-) create mode 100644 packages/shared-ux/chrome/serverless_projects_documentation.mdx diff --git a/nav-kibana-dev.docnav.json b/nav-kibana-dev.docnav.json index 11f2e7124ca37a..7bcad46f55b0b2 100644 --- a/nav-kibana-dev.docnav.json +++ b/nav-kibana-dev.docnav.json @@ -177,6 +177,9 @@ }, { "id": "kibDevTutorialScreenshotting" + }, + { + "id": "kibDevTutorialsServerlessProjectNavigation" } ] }, diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_item.tsx b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_item.tsx index ca9844db7b470c..540b9cc6afe08d 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_item.tsx +++ b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_item.tsx @@ -19,7 +19,6 @@ export interface Props< Id extends string = string, ChildrenId extends string = Id > extends NodeProps { - element?: string; unstyled?: boolean; } @@ -36,10 +35,9 @@ function NavigationItemComp< const navigationContext = useNavigation(); const navNodeRef = React.useRef(null); - const { element, children, node } = useMemo(() => { - const { element: _element, children: _children, ...rest } = props; + const { children, node } = useMemo(() => { + const { children: _children, ...rest } = props; return { - element: _element, children: _children, node: rest, }; @@ -70,9 +68,7 @@ function NavigationItemComp< return <>{children}; } - const Element = element || Fragment; - - return {navNode.title}; + return {navNode.title}; } export const NavigationItem = React.memo(NavigationItemComp) as typeof NavigationItemComp; diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/recently_accessed.tsx b/packages/shared-ux/chrome/navigation/src/ui/components/recently_accessed.tsx index 57e7b3dcfd058d..da6e92707e022b 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/components/recently_accessed.tsx +++ b/packages/shared-ux/chrome/navigation/src/ui/components/recently_accessed.tsx @@ -18,6 +18,10 @@ import { navigationStyles as styles } from '../../styles'; import { getI18nStrings } from '../i18n_strings'; export interface Props { + /** + * Optional observable for recently accessed items. If not provided, the + * recently items from the Chrome service will be used. + */ recentlyAccessed$?: Observable; /** * If true, the recently accessed list will be collapsed by default. diff --git a/packages/shared-ux/chrome/serverless_projects_documentation.mdx b/packages/shared-ux/chrome/serverless_projects_documentation.mdx new file mode 100644 index 00000000000000..498d2a0737f9ce --- /dev/null +++ b/packages/shared-ux/chrome/serverless_projects_documentation.mdx @@ -0,0 +1,508 @@ +--- +id: kibDevTutorialsServerlessProjectNavigation +slug: /kibana-dev-docs/serverless-project-navigation +title: Serverless project navigation +description: Project navigation replaces the default Kibana navigation in serverless mode, providing a more tailored experience for each project. Learn how to build a custom navigation for your project. +date: 2023-07-26 +tags: ['kibana', 'serverless', 'navigation'] +--- + +## Introduction + +Welcome to the serverless project navigation documentation. Our tools help teams build customizable and flexible navigation for their serverless projects. Project navigation replaces the default Kibana navigation in serverless mode, providing a more tailored experience for each project. + +- [Serverless project navigation](#serverless-project-navigation) + - [Left Side Navigation](#left-side-navigation) + - [Navigation Tree Definition](#navigation-tree-definition) + - [Example](#example) + - [Navigation tree API](#navigation-tree-api) + - [`NavigationTreeDefinition`](#navigationtreedefinition) + - [`GroupDefinition`](#groupdefinition) + - [`RecentlyAccessedDefinition`](#recentlyaccesseddefinition) + - [React components](#react-components) + - [`unstyled`](#unstyled) + - [Important concepts](#important-concepts) + - [Deep links](#deep-links) + - [Cloud link](#cloud-links) + - [Preconfigured navigation sections](#preconfigured-navigation-sections) + - [Active navigation path](#active-navigation-path) + - [Breadcrumbs](#breadcrumbs) + - [Header action menu](#header-action-menu) + - [Global Search](#global-search) +- [Testing](#testing) + +### Building Blocks + +The project navigation is composed of several key building blocks that work together to form a comprehensive navigation system. These building blocks include: + +1. **Left Side Navigation**: Allow users to navigate through different sections of the project. +2. **Breadcrumbs**: A visual representation of the user's current location within the navigation hierarchy. +3. **Header action menu**: A customizable toolbar that provides quick access to important actions and features. +4. **Global Search**: A navigational search input that enables users to quickly access specific content within the project. + +In the following sections, we will explore each of these building blocks in detail. + +## Left Side Navigation + +> **Note** +> Left Side Navigation is available in shared_ux storybook under the `Chrome/Navigation` section. You can explore the components and their properties there. +> `yarn storybook shared_ux` + +The left side navigation is a primary way for users to navigate through different sections of the project. It consists of a tree of navigation items that can be expanded and collapsed. Apart from the navigation tree it also supports special pre-built blocks like recently accessed items. The main part of the navigation tree is project's navigation: this is fully configured and supported by the project teams (e.g. Observability). We also provide pre-configured platform sections as presets that solutions can use as part of their navigation (e.g. `ml`, `analytics`). Solutions can customize those sections to their needs. + +There are two approaches to building the side navigation: + +1. **Navigation tree definition**: Developers provide a navigation tree definition. This approach is recommended if the use case works with the existing building blocks. + +2. **React components**: Alternatively, we provide a set of pre-built components that can be used to construct the left side navigation. These components include: + +``: The parent component that encapsulates the entire navigation area. +``: A component representing a group of navigation items. +``: A component representing an individual navigation item. +``: A component for displaying additional content at the bottom of the navigation. +``: A component for displaying a list of recently accessed items. + +By leveraging these components, you can create a customized left side navigation for a serverless project. + +> **Note** +> Both approaches have an identical set of properties that can be passed. Some of those properties will be documented in the tree definition section below. + +### Navigation Tree Definition + +Use the `NavigationTreeDefinition` interface to create your left side navigation using a tree definition. This interface allows you to define the complete navigation tree, including the **body** and **footer** of the navigation. + +#### Example + +Let's start by seeing an example, and we'll detail the different properties below. + +```ts +import { type NavigationTreeDefinition, getPresets } from '@kbn/shared-ux-chrome-navigation'; + +const navigationTree: NavigationTreeDefinition = { + body: [ + { type: 'recentlyAccessed' }, // Add the recently accessed items + { + type: 'navGroup', // A top level group for the project's navigation the main part of the navigation tree + id: 'search_project_nav', + title: 'Elasticsearch', + icon: 'logoElasticsearch', + defaultIsCollapsed: false, // ensures this section is automatically expanded when users first load the page + breadcrumbStatus: 'hidden', // this node of the navigation tree does not need to appear in the breadcrumbs, since the home logo icon navigates to the same link + children: [ + { + id: 'search_getting_started', + title: 'Getting started', + link: 'serverlessElasticsearch', // All **internal** links must be deepLinks (core's `app.deepLinks`), learn more in #deep-links section + }, + { + id: 'explore', + title: 'Explore', // A nested group with its children + children: [ + { + link: 'discover', + }, + { + link: 'dashboards', + }, + { + link: 'visualize', + }, + ], + }, + ], + }, + { + type: 'navGroup', + ...getPresets('ml'), // Insert all the machine learning links, learn more in #preconfigured-navigation-presets section + }, + ], + footer: [ + { + type: 'navGroup', + id: 'project_settings_project_nav', + title: 'Project settings', + icon: 'gear', + breadcrumbStatus: 'hidden', + children: [ + { + id: 'settings', + children: [ + { + link: 'management', + title: 'Management', + }, + { + id: 'cloudLinkUserAndRoles', + cloudLink: 'userAndRoles', // Add an external link to Cloud, learn more in #cloud-links section + }, + { + id: 'cloudLinkPerformance', + cloudLink: 'performance', + }, + ], + }, + ], + }, + ], +}; +``` + +Once the navigation tree is defined we need to + +1. Pass it to the `` component +2. Set your navigation component in the `serverless` plugin + +```tsx +import { DefaultNavigation, NavigationKibanaProvider } from '@kbn/shared-ux-chrome-navigation'; + +const createServerlessSearchSideNavComponent = + ( + core: CoreStart, + { serverless, cloud }: { serverless: ServerlessPluginStart; cloud: CloudStart } + ) => + () => { + return ( + + + + ); + }; + +// plugin.ts (public) "start()" +serverless.setSideNavComponent(createComponent(core, { serverless, cloud })); +``` + +#### Navigation tree API + +> **Warning** +> The API reference is manually maintained and might be out of date. Please refer [to the source](https://github.com/elastic/kibana/blob/2c4f8b76c520f2ffd0516a29601c03db9b09d221/packages/shared-ux/chrome/navigation/src/ui/types.ts#L83-L124) for the most up-to-date information, until we have automated the API reference. + +##### `NavigationTreeDefinition` + +| Property | Type | Description | +| -------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| `body` | `RootNavigationItemDefinition[]` | The main content of the navigation, which can contain various types of items such as `cloudLink`, `recentlyAccessed`, or `navGroup`. | +| `footer` | `RootNavigationItemDefinition[]` | The footer content of the navigation, which can contain additional items similar to the `body` section. | + +Each item in the `body` or `footer` arrays can have its own unique structure defined by the `RootNavigationItemDefinition` interface. + +The `RootNavigationItemDefinition` is one of: + +- `GroupDefinition` +- `RecentlyAccessedDefinition` + +##### `GroupDefinition` + +The `GroupDefinition` interface represents a group of items in the side navigation. It extends the `NodeDefinition` interface and has the following additional properties: + +| Property | Type | Description | +| -------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | `'navGroup'` | Indicates that this item is a navigation group. | +| `defaultIsCollapsed` | `boolean \| undefined` | Determines if the group is initially collapsed or expanded. Use `undefined` (recommended) to open the group if any of its children nodes match the current URL, `false` to always open the group, or `true` to always collapse it. | +| `preset` | `NavigationGroupPreset` | A preset value for the group, such as `'analytics'`, `'devtools'`, `'ml'`, or `'management'`. | +| `id` | `Id` | Optional ID of the navigation node. | +| `title` | `string` | Optional title of the navigation node. If not provided and a "link" is provided, the title will be the Deep link title. | +| `link` | `LinkId` | Optional App ID or deep link ID for the navigation node. [More about deep links](#deep-links) | +| `cloudLink` | `CloudLinkId` | Optional cloud link ID for the navigation node. [More about cloud links](#cloud-links) | +| `icon` | `string` | Optional icon for the navigation node. Note that not all navigation depths will render the icon. | +| `children` | `NodeDefinition[]` | Optional children of the navigation node. | +| `href` | `string` | Use `href` for absolute links only. Internal links should use "link". | +| `getIsActive` | `function` | Optional function to control the active state. This function is called whenever the location changes. | +| `breadcrumbStatus` | `'hidden'\|'visible'` | An optional flag to indicate if the breadcrumb should be hidden when this node is active. The default value is `'visible'`. | + +##### `RecentlyAccessedDefinition` + +| Property | Type | Description | +| -------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | `'recentlyAccessed'` | Indicates that this item represents the recently accessed section. | +| `recentlyAccessed$` | `Observable` | An optional observable for recently accessed items. If not provided, the recently accessed items from the Chrome service will be used. | +| `defaultIsCollapsed` | `boolean` | If set to `true`, the recently accessed list will be collapsed by default. The default value is `false`. | + +### React components + +If you need other navigation sections in your navigation you will need to use our React components. They have the same properties as seen above except the `unstyled` prop that we will detail below. + +```tsx +import { NavigationKibanaProvider, Navigation } from '@kbn/shared-ux-chrome-navigation'; + +const createServerlessSearchSideNavComponent = + ( + core: CoreStart, + { serverless, cloud }: { serverless: ServerlessPluginStart; cloud: CloudStart } + ) => + () => { + return ( + + + + + + + + +
+

Any other section you might need

+
+ + + + Title can also be a React node + + + + + + + + + +
+
+ ); + }; +``` + +And as with the tree definition above you will have to set the navigation component on the `serverless` plugin. + +```ts +// plugin.ts (public) "start()" +serverless.setSideNavComponent(createComponent(core, { serverless, cloud })); +``` + +#### `unstyled` + +If you want to have a completely customized UI, without the Shared UX components, but also want the benefits of self-updating breadcrumbs (see the [#breadcrumbs](#breadcrumbs) section), just declare your navigation tree and pass the `unstyled` property to your ``. + +```tsx +/** + * This JSX will correctly declare your tree structure but will not have any UI applied. + Tree generated: +[{ + id: 'my-group', + title: "My Group, + children: [{ + id: 'item-1', + title: 'Item 1', + }, { + id: 'item-2', + title: 'Item 2', + }] +}] + */ + + + +
Your custom UI
+
+ +
Your custom UI
+
+
+
+``` + +### Important Concepts + +#### Deep links + +[Deep links](https://github.com/elastic/kibana/blob/f5034e60a501e7b61a3e1bff34e64c9b94c71344/packages/core/application/core-application-browser/src/application.ts#L281-L314) are a Kibana core's mechanism for registering sub-pages within an app. In "classic" Kibana they are used for the default side navigation, navigation APIs and the global search. Teams can register the deep links when they register their app. They can also update their registered deep links, or unregister deep links dynamically. + +The serverless navigation API uses the same deep links mechanism to configure the navigation tree. The `link` property of the `NodeDefinition` interface refers to the deep links registered by apps. The `link` property can be either can be either the ID of an app, or a deep link ID. + +There are multiple benefits of using deep links instead of the hardcoded URLs when configuring the navigation tree: + +- Validation: the deep links are validated when the tree is built. If the deep link wasn't registered by any of the apps, an error will be thrown. +- Type safety: the list of deep links is typed, and we don't rely on static URLs that can break. +- Dynamic updates: the deep links can be updated or removed dynamically by apps that own them. The navigation tree will be updated accordingly. + +Internal navigation should be configured using deep links. The `href` property should be used only for external links. There is also a special type of external links for links pointing to the cloud console - `cloudLink`. + +#### Cloud links + +The `cloudLink` property of the `NodeDefinition` interface refers to the predefined list of cloud links that are configured in `kibana.yml`. +Currently available pages are `'userAndRoles' | 'performance' | 'billingAndSub'` + +```ts +import { type NavigationTreeDefinition, getPresets } from '@kbn/shared-ux-chrome-navigation'; + +const navigationTree: NavigationTreeDefinition = { + body: [ + { + type: 'navGroup', + id: 'topNav', + children: [ + { + id: 'cloudLinkUserAndRoles', + cloudLink: 'userAndRoles', + }, + { + id: 'cloudLinkPerformance', + cloudLink: 'performance', + }, + ], + }, + ], +}; +``` + +#### Preconfigured navigation sections + +When configuring the navigation tree you can use the preconfigured sections for areas of the Kibana platform, like `devtools`, `management`, `ml`, `analytics`: + +```ts +import { type NavigationTreeDefinition, getPresets } from '@kbn/shared-ux-chrome-navigation'; + +const navigationTree: NavigationTreeDefinition = { + body: [ + { + type: 'navGroup', + ...getPresets('ml'), // Insert all the machine learning links + }, + ], +}; +``` + +The benefit of using the preset instead of building the platform sections manually is that the team who owns the platform area can update the preset as they see fit. + +You can also customize the preset like so: + +```ts +import type { NodeDefinition } from '@kbn/core-chrome-browser'; +import { type NavigationTreeDefinition, getPresets } from '@kbn/shared-ux-chrome-navigation'; + +const navigationTree: NavigationTreeDefinition = { + body: [ + { + type: 'navGroup', + // And specific links from analytics + ...getPresets('analytics'), + title: 'My analytics', // Change the title + children: getPresets('analytics').children.map((child) => ({ + ...child, + children: child.children?.filter((item) => { + // force remove discover and dashboard + return item.link !== 'discover' && item.link !== 'dashboards'; + }), + })) as NonEmptyArray, + }, + ], +}; +``` + +#### Active Navigation Path + +Active navigation path is automatically tracked by the side navigation component. The active path is determined by the current URL and the deep links registered by apps. The active path is used to highlight the active navigation items and to determine the breadcrumbs. + +By default, the path matching logic uses `startsWith` against the path from the deep link and then picks the longest match. This can be overridden using `getIsActive` predicate. + +```ts +import { type NavigationTreeDefinition } from '@kbn/shared-ux-chrome-navigation'; + +const navigationTree: NavigationTreeDefinition = { + body: [ + { + title: `Dashboards`, + link: 'dashboards', + getIsActive: ({ pathNameSerialized, prepend }) => { + return pathNameSerialized.startsWith(prepend('/app/dashboards')); + }, + }, + ], +}; +``` + +Technically, multiple paths can be active simultaneously and multiple nodes can be highlighted in the side navigation. However, this is not recommended as it can be confusing for the user. + +You can programmatically access the active paths using the `getActiveNavigationNodes$` method: + +```ts +const activesNodes$ = pluginsStart.serverless.getActiveNavigationNodes$(); +``` + +## Breadcrumbs + +Breadcrumbs is a list of links that represent the current navigation path. Project navigation breadcrumbs are automatically generated based on the navigation tree set for the [side navigation](#left-side-navigation) and the currently active navigation path. + +Project breadcrumbs are built from 3 sections: + +1. **Home link:** 🏠 +2. **Platform navigation:** is automatically controlled by SharedUX services +3. **Deeper context:** is manually controlled by projects + +### Project breadcrumbs sections + +#### 🏠 Home breadcrumb + +Home breadcrumb is always displayed as the first breadcrumb and leads to what project specifies as home page in `kibana.yml`. + +#### Navigation breadcrumbs + +Navigation breadcrumbs are automatically generated based on the navigation tree set for the [side navigation](#left-side-navigation) and the currently active navigation path. + +#### Deeper context breadcrumbs + +Deeper context breadcrumbs are manually controlled by projects. They are added to the breadcrumbs using the `pluginsStart.serverless.setBreadcrumbs` method. + +```ts +pluginsStart.serverless.setBreadcrumbs([ + { + text: 'Deeper Context', + href: '/some/deeper/context', + }, +]); +``` + +These breadcrumbs are removed when the active navigation path changes. + +### Overriding breadcrumbs + +Projects can override navigation breadcrumbs. This will override navigation breadcrumbs, but will keep the Home breadcrumb: + +```ts +pluginsStart.serverless.setBreadcrumbs([b1, b2, b3], { absolute: true }); +``` + +The override is automatically reset when the active navigation path changes. + +## Header Action Menu + +The Header Action Menu, aka application toolbar, is a horizontal bar that is **conditionally** displayed at the top of the page below the header where apps can put their custom actions. Like the header, the toolbar has fixed position. Unlike the header however, this bar only appears when an application has registered content to show. Another UI difference, is the toolbar could be covered by flyouts or full-page overlays on the page. There might be other slight styling and positioning changes comparing to the toolbar in the default Kibana navigation. +There is no serverless specific API or behavior change for the toolbar. To set custom content in this area, use the same API as in the default Kibana `setHeaderActionMenu` [source](https://github.com/elastic/kibana/blob/188009f9376d5976b5db37e04c52a2b5bdaf9771/packages/core/application/core-application-browser/src/app_mount.ts#L176-L205). To unset content, call `setHeaderActionMenu` with `undefined`. + +> **Note** +> The display of the toolbar container is conditional, based on whether there is toolbar content to show. Make sure to pass `undefined` to `setHeaderActionMenu` if there is no application content to show. In classic layout, passing an empty `span` or `div` element suffices to "clear" the toolbar, but in serverless projects it will cause a large empty container to show below the header. + +## Global Search + +The global search (navigational search) is a search bar that can be opened from the header. It allows users to search for apps, pages, and other resources. Unlike the classic layout, the user must click a magnifying glass icon to reveal the search text input, but everything else in the serverless project layout is the same. +There is no serverless specific API or behavior changes for this: refer to [the global search plugin](https://github.com/elastic/kibana/blob/bd778221dcf8b934f2947d6be3173f8a2796ef74/x-pack/plugins/global_search/README.md) to learn about the API. + +# Testing + +> **Note** +> For the general guidance on functional testing serverless projects refer to [the doc](https://docs.google.com/document/d/1tiax7xoDYwFXYZjRTgVKkVMjN-SQzBWk4yn1JY6Z5UY/edit#heading=h.t3qzojfbvfj4) + +To test project navigation in functional tests use `svlCommonNavigation` page object: + +```ts +const svlCommonNavigation = getPageObject('svlCommonNavigation'); +``` + +The page object exposes helpers for using links in the sidenav and breadcrumbs, as well as using page-level components such as global search, recent items, the Elastic logo icon. There are also utilities to check that no page reload happened during the navigation. + +Find the full list of helpers in [the source](https://github.com/elastic/kibana/blob/621401ed6a435d4c9beaa03ac1f61ace9716217a/x-pack/test_serverless/functional/page_objects/svl_common_navigation.ts#L44-L206). The most notable are: + +- `svlCommonNavigation.expectExists()` checks that serverless project navigation is displayed and not the statefull one +- `svlCommonNavigation.sideNav.expectLinkExists({ deepLinkId: 'discover'})` checks that the link is visible. Can check by deepLinkId, text or navId +- `svlCommonNavigation.sideNav.clickLink({ deepLinkId: 'discover'})` clicks the link. Use to navigate using the sidenav as the users would. Can be used with deepLinkId, text or navId +- `svlCommonNavigation.sideNav.openSection(sectionId)` opens navigation section. +- `svlCommonNavigation.breadcrumbs.expectBreadcrumbExists({deepLinkId: 'discover'})` check that breadcrumbs is in the list using deepLinkId or text + +For each project there is a navigation test suite that does a shared navigation smoke check and can be used as an example of using the shared navigation page object. + +- x-pack/test_serverless/functional/test_suites/ + - search/navigation + - observability/navigation + - security/navigation + +We recommend solution teams to improve these basic navigation smoke tests to cover more project specific functionality. From edb9561daa926ac299a9f1748fa14d676b44c567 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 26 Jul 2023 16:51:16 +0100 Subject: [PATCH 05/58] skip failing es promotion suite (#162581) --- .../security_api_integration/tests/kerberos/kerberos_login.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/security_api_integration/tests/kerberos/kerberos_login.ts b/x-pack/test/security_api_integration/tests/kerberos/kerberos_login.ts index d5f65754739f54..c808e4c630851f 100644 --- a/x-pack/test/security_api_integration/tests/kerberos/kerberos_login.ts +++ b/x-pack/test/security_api_integration/tests/kerberos/kerberos_login.ts @@ -381,7 +381,8 @@ export default function ({ getService }: FtrProviderContext) { expect(nonAjaxResponse.headers['www-authenticate']).to.be(undefined); }); - describe('post-authentication stage', () => { + // FLAKY: https://github.com/elastic/kibana/issues/162581 + describe.skip('post-authentication stage', () => { for (const client of ['start-contract', 'request-context', 'custom']) { it(`expired access token should be automatically refreshed by the ${client} client`, async function () { this.timeout(60000); From 34e6997432c389a3a7e0b41a1267b7a3bf4a29e8 Mon Sep 17 00:00:00 2001 From: Joe Peeples Date: Wed, 26 Jul 2023 11:55:16 -0400 Subject: [PATCH 06/58] [DOCS] Document Generative AI Token Usage dashboard in Gen AI connector (#162374) ## Summary Contributes to https://github.com/elastic/security-docs/pull/3549; documents the new Generative AI Token Usage dashboard. Preview: [Generative AI connector | Token usage dashboard](https://kibana_162374.docs-preview.app.elstc.co/guide/en/kibana/master/gen-ai-action-type.html#gen-ai-connector-token-dashboard) --- .../management/connectors/action-types/gen-ai.asciidoc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/management/connectors/action-types/gen-ai.asciidoc b/docs/management/connectors/action-types/gen-ai.asciidoc index dda7ebc3e190ab..749e3dcd2c1e9e 100644 --- a/docs/management/connectors/action-types/gen-ai.asciidoc +++ b/docs/management/connectors/action-types/gen-ai.asciidoc @@ -86,4 +86,12 @@ Body:: A JSON payload sent to the OpenAI API URL. For example: [[gen-ai-connector-networking-configuration]] === Connector networking configuration -Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. \ No newline at end of file +Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. + +[float] +[[gen-ai-connector-token-dashboard]] +=== Token usage dashboard + +Once you've created a Generative AI connector, you can monitor its token usage using the *Generative AI Token Usage* dashboard. Select the connector in *{stack-manage-app}* > *{connectors-ui}* to view its details, then click the *View OpenAI Usage Dashboard for "__" Connector* link to open the dashboard. + +NOTE: To view the dashboard, you need at least `read` and `view_index_metadata` privileges for the `.kibana-event-log-*` index and the `Read` feature privilege for {kib}. You can set up a role with these minimum privileges and assign it to non-admin users who need to view this dashboard. From cb18f5fe793449651f65623a106304b3b7c7584a Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 26 Jul 2023 16:56:11 +0100 Subject: [PATCH 07/58] skip failing es promotion suite (#162583) --- .../tests/oidc/authorization_code_flow/oidc_auth.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/security_api_integration/tests/oidc/authorization_code_flow/oidc_auth.ts b/x-pack/test/security_api_integration/tests/oidc/authorization_code_flow/oidc_auth.ts index f1aef15c081f2e..6c86d9ec4c3977 100644 --- a/x-pack/test/security_api_integration/tests/oidc/authorization_code_flow/oidc_auth.ts +++ b/x-pack/test/security_api_integration/tests/oidc/authorization_code_flow/oidc_auth.ts @@ -542,7 +542,8 @@ export default function ({ getService }: FtrProviderContext) { .expect(200); }); - describe('post-authentication stage', () => { + // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/162583 + describe.skip('post-authentication stage', () => { for (const client of ['start-contract', 'request-context', 'custom']) { it(`expired access token should be automatically refreshed by the ${client} client`, async function () { this.timeout(60000); From 708fd851a6b545b938a2ed4f505531b6fdba7b2d Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 26 Jul 2023 16:57:32 +0100 Subject: [PATCH 08/58] skip failing es promotion suite (#162581) --- .../security_api_integration/tests/kerberos/kerberos_login.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/test/security_api_integration/tests/kerberos/kerberos_login.ts b/x-pack/test/security_api_integration/tests/kerberos/kerberos_login.ts index c808e4c630851f..b51b36cf4608c8 100644 --- a/x-pack/test/security_api_integration/tests/kerberos/kerberos_login.ts +++ b/x-pack/test/security_api_integration/tests/kerberos/kerberos_login.ts @@ -381,7 +381,7 @@ export default function ({ getService }: FtrProviderContext) { expect(nonAjaxResponse.headers['www-authenticate']).to.be(undefined); }); - // FLAKY: https://github.com/elastic/kibana/issues/162581 + // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/162581 describe.skip('post-authentication stage', () => { for (const client of ['start-contract', 'request-context', 'custom']) { it(`expired access token should be automatically refreshed by the ${client} client`, async function () { From 0d5a20643019421742688c76aaf04ea778383c96 Mon Sep 17 00:00:00 2001 From: Dmitrii Shevchenko Date: Wed, 26 Jul 2023 18:00:55 +0200 Subject: [PATCH 09/58] [Security Solution] Explicit request and response schemas for rules management endpoints (#162324) **Related to: https://github.com/elastic/security-team/issues/7098** ### Summary - Move Rules Management HTTP API schemas to `/common/api` - Explicitly define response types for API endpoints - Remove the `_generate_assets` endpoint as unused - Minor type fixes --- .../src/validate/index.ts | 29 +++-- .../detection_engine/prebuilt_rules/urls.ts | 3 - .../bulk_actions/bulk_actions_route.ts | 4 + .../crud/create_rule/create_rule_route.ts | 5 +- .../crud/delete_rule/delete_rule_route.ts | 12 ++ .../crud/patch_rule/patch_rule_route.ts | 6 +- .../crud/read_rule/read_rule_route.ts | 4 + .../crud/update_rule/update_rule_route.ts | 5 +- .../export_rules/export_rules_route.test.ts | 7 +- .../export_rules/export_rules_route.ts | 9 -- ...chema.test.ts => find_rules_route.test.ts} | 2 +- ...{request_schema.ts => find_rules_route.ts} | 0 .../request_schema_validation.test.ts | 2 +- .../find_rules/request_schema_validation.ts | 2 +- .../detection_engine/rule_management/index.ts | 15 ++- .../tags/read_tags/read_tags_route.ts | 11 ++ .../setup_health/setup_health_route.ts | 11 ++ .../detection_engine/rule_monitoring/index.ts | 1 + .../generate_assets/generate_assets_route.ts | 119 ------------------ .../prebuilt_rules/api/register_routes.ts | 4 - .../api/rules/bulk_actions/route.ts | 3 +- .../api/rules/bulk_create_rules/route.ts | 4 +- .../api/rules/bulk_delete_rules/route.ts | 8 +- .../api/rules/bulk_patch_rules/route.ts | 4 +- .../api/rules/bulk_update_rules/route.ts | 4 +- .../api/rules/coverage_overview/route.ts | 6 +- .../api/rules/create_rule/route.ts | 17 ++- .../api/rules/delete_rule/route.ts | 4 +- .../api/rules/export_rules/route.ts | 5 +- .../api/rules/filters/route.ts | 5 +- .../api/rules/import_rules/route.ts | 5 +- .../api/rules/patch_rule/route.ts | 15 ++- .../api/rules/read_rule/route.ts | 12 +- .../api/rules/update_rule/route.ts | 21 ++-- .../api/tags/read_tags/route.ts | 8 +- .../rule_management/utils/validate.ts | 2 +- .../get_cluster_health_route.ts | 4 +- .../get_rule_health/get_rule_health_route.ts | 3 +- .../get_space_health_route.ts | 4 +- .../setup/setup_health_route.ts | 9 +- .../get_rule_execution_events_route.ts | 11 +- .../get_rule_execution_results_route.ts | 11 +- 42 files changed, 173 insertions(+), 243 deletions(-) create mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/delete_rule/delete_rule_route.ts rename x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/{request_schema.test.ts => find_rules_route.test.ts} (99%) rename x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/{request_schema.ts => find_rules_route.ts} (100%) create mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/rule_management/tags/read_tags/read_tags_route.ts create mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/setup_health/setup_health_route.ts delete mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/generate_assets/generate_assets_route.ts diff --git a/packages/kbn-securitysolution-io-ts-utils/src/validate/index.ts b/packages/kbn-securitysolution-io-ts-utils/src/validate/index.ts index 38f9ee2d0b2276..c9ad7c2102a4d8 100644 --- a/packages/kbn-securitysolution-io-ts-utils/src/validate/index.ts +++ b/packages/kbn-securitysolution-io-ts-utils/src/validate/index.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { fold, Either, mapLeft } from 'fp-ts/lib/Either'; +import { Either, isLeft, mapLeft } from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/pipeable'; import { fromEither, TaskEither } from 'fp-ts/lib/TaskEither'; import * as t from 'io-ts'; @@ -16,28 +16,27 @@ import { formatErrors } from '../format_errors'; export const validate = ( obj: object, schema: T -): [t.TypeOf | null, string | null] => { +): [t.TypeOf, null] | [null, string] => { const decoded = schema.decode(obj); const checked = exactCheck(obj, decoded); - const left = (errors: t.Errors): [T | null, string | null] => [ - null, - formatErrors(errors).join(','), - ]; - const right = (output: T): [T | null, string | null] => [output, null]; - return pipe(checked, fold(left, right)); + + if (isLeft(checked)) { + return [null, formatErrors(checked.left).join(',')]; + } else { + return [checked.right, null]; + } }; export const validateNonExact = ( obj: unknown, schema: T -): [t.TypeOf | null, string | null] => { +): [t.TypeOf, null] | [null, string] => { const decoded = schema.decode(obj); - const left = (errors: t.Errors): [T | null, string | null] => [ - null, - formatErrors(errors).join(','), - ]; - const right = (output: T): [T | null, string | null] => [output, null]; - return pipe(decoded, fold(left, right)); + if (isLeft(decoded)) { + return [null, formatErrors(decoded.left).join(',')]; + } else { + return [decoded.right, null]; + } }; export const validateEither = ( diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/prebuilt_rules/urls.ts b/x-pack/plugins/security_solution/common/api/detection_engine/prebuilt_rules/urls.ts index 44727fcf693cfb..ae62433d93a359 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/prebuilt_rules/urls.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/prebuilt_rules/urls.ts @@ -21,6 +21,3 @@ export const REVIEW_RULE_UPGRADE_URL = `${NEW_BASE_URL}/upgrade/_review` as cons export const PERFORM_RULE_UPGRADE_URL = `${NEW_BASE_URL}/upgrade/_perform` as const; export const REVIEW_RULE_INSTALLATION_URL = `${NEW_BASE_URL}/installation/_review` as const; export const PERFORM_RULE_INSTALLATION_URL = `${NEW_BASE_URL}/installation/_perform` as const; - -// Helper endpoints for development and testing. Should be removed later. -export const GENERATE_ASSETS_URL = `${NEW_BASE_URL}/_generate_assets` as const; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.ts index c87b9e9a088baf..955c6962103f89 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.ts @@ -265,3 +265,7 @@ export interface BulkEditActionErrorResponse { } export type BulkEditActionResponse = BulkEditActionSuccessResponse | BulkEditActionErrorResponse; + +export type BulkExportActionResponse = string; + +export type PerformBulkActionResponse = BulkEditActionResponse | BulkExportActionResponse; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/create_rule/create_rule_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/create_rule/create_rule_route.ts index cc71d7da3fbeda..164c6cfb1a93cd 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/create_rule/create_rule_route.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/create_rule/create_rule_route.ts @@ -6,7 +6,10 @@ */ import type * as t from 'io-ts'; -import { RuleCreateProps } from '../../../model'; +import { RuleCreateProps, RuleResponse } from '../../../model'; export const CreateRuleRequestBody = RuleCreateProps; export type CreateRuleRequestBody = t.TypeOf; + +export const CreateRuleResponse = RuleResponse; +export type CreateRuleResponse = t.TypeOf; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/delete_rule/delete_rule_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/delete_rule/delete_rule_route.ts new file mode 100644 index 00000000000000..d5a8dfdfdc5bb1 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/delete_rule/delete_rule_route.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type * as t from 'io-ts'; +import { RuleResponse } from '../../../model'; + +export const DeleteRuleResponse = RuleResponse; +export type DeleteRuleResponse = t.TypeOf; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/patch_rule/patch_rule_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/patch_rule/patch_rule_route.ts index e74e406141c263..036d64cef861b4 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/patch_rule/patch_rule_route.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/patch_rule/patch_rule_route.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { RulePatchProps, ThresholdRulePatchProps } from '../../../model'; +import type * as t from 'io-ts'; +import { RulePatchProps, RuleResponse, ThresholdRulePatchProps } from '../../../model'; /** * Request body parameters of the API route. @@ -16,3 +17,6 @@ export const PatchRuleRequestBody = RulePatchProps; export type ThresholdPatchRuleRequestBody = ThresholdRulePatchProps; export const ThresholdPatchRuleRequestBody = ThresholdRulePatchProps; + +export const PatchRuleResponse = RuleResponse; +export type PatchRuleResponse = t.TypeOf; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/read_rule/read_rule_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/read_rule/read_rule_route.ts index e133c754ac3273..66d31edf785acd 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/read_rule/read_rule_route.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/read_rule/read_rule_route.ts @@ -6,7 +6,11 @@ */ import type * as t from 'io-ts'; +import { RuleResponse } from '../../../model'; import { QueryRuleByIds } from '../../model/query_rule_by_ids'; export const ReadRuleRequestQuery = QueryRuleByIds; export type ReadRuleRequestQuery = t.TypeOf; + +export const ReadRuleResponse = RuleResponse; +export type ReadRuleResponse = t.TypeOf; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/update_rule/update_rule_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/update_rule/update_rule_route.ts index 528dfd1d6f6484..0b695f6c3c0210 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/update_rule/update_rule_route.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/crud/update_rule/update_rule_route.ts @@ -6,7 +6,10 @@ */ import type * as t from 'io-ts'; -import { RuleUpdateProps } from '../../../model'; +import { RuleResponse, RuleUpdateProps } from '../../../model'; export const UpdateRuleRequestBody = RuleUpdateProps; export type UpdateRuleRequestBody = t.TypeOf; + +export const UpdateRuleResponse = RuleResponse; +export type UpdateRuleResponse = t.TypeOf; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/export_rules/export_rules_route.test.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/export_rules/export_rules_route.test.ts index 1edb1cfa499f00..86dea6c90fb461 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/export_rules/export_rules_route.test.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/export_rules/export_rules_route.test.ts @@ -10,7 +10,6 @@ import { pipe } from 'fp-ts/lib/pipeable'; import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils'; import { ExportRulesRequestBody, ExportRulesRequestQuery } from './export_rules_route'; -import type { ExportRulesRequestQueryDecoded } from './export_rules_route'; describe('Export rules request schema', () => { describe('ExportRulesRequestBody', () => { @@ -81,7 +80,7 @@ describe('Export rules request schema', () => { const checked = exactCheck(payload, decoded); const message = pipe(checked, foldLeftRight); expect(getPaths(left(message.errors))).toEqual([]); - const expected: ExportRulesRequestQueryDecoded = { + const expected: ExportRulesRequestQuery = { file_name: 'export.ndjson', exclude_export_details: false, }; @@ -98,7 +97,7 @@ describe('Export rules request schema', () => { const checked = exactCheck(payload, decoded); const message = pipe(checked, foldLeftRight); expect(getPaths(left(message.errors))).toEqual([]); - const expected: ExportRulesRequestQueryDecoded = { + const expected: ExportRulesRequestQuery = { file_name: 'test.ndjson', exclude_export_details: false, }; @@ -129,7 +128,7 @@ describe('Export rules request schema', () => { const checked = exactCheck(payload, decoded); const message = pipe(checked, foldLeftRight); expect(getPaths(left(message.errors))).toEqual([]); - const expected: ExportRulesRequestQueryDecoded = { + const expected: ExportRulesRequestQuery = { exclude_export_details: true, file_name: 'export.ndjson', }; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/export_rules/export_rules_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/export_rules/export_rules_route.ts index 00042f6ed554c6..f4746d3e090dae 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/export_rules/export_rules_route.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/export_rules/export_rules_route.ts @@ -9,7 +9,6 @@ import * as t from 'io-ts'; import { DefaultExportFileName } from '@kbn/securitysolution-io-ts-alerting-types'; import { DefaultStringBooleanFalse } from '@kbn/securitysolution-io-ts-types'; -import type { FileName, ExcludeExportDetails } from '../../model'; import { RuleSignatureId } from '../../model'; const ObjectsWithRuleId = t.array(t.exact(t.type({ rule_id: RuleSignatureId }))); @@ -30,11 +29,3 @@ export type ExportRulesRequestQuery = t.TypeOf; export const ExportRulesRequestQuery = t.exact( t.partial({ file_name: DefaultExportFileName, exclude_export_details: DefaultStringBooleanFalse }) ); - -export type ExportRulesRequestQueryDecoded = Omit< - ExportRulesRequestQuery, - 'file_name' | 'exclude_export_details' -> & { - file_name: FileName; - exclude_export_details: ExcludeExportDetails; -}; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/request_schema.test.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/find_rules_route.test.ts similarity index 99% rename from x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/request_schema.test.ts rename to x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/find_rules_route.test.ts index d0fc36831ad230..391826fed99232 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/request_schema.test.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/find_rules_route.test.ts @@ -9,7 +9,7 @@ import { left } from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/pipeable'; import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils'; -import { FindRulesRequestQuery } from './request_schema'; +import { FindRulesRequestQuery } from './find_rules_route'; describe('Find rules request schema', () => { test('empty objects do validate', () => { diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/request_schema.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/find_rules_route.ts similarity index 100% rename from x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/request_schema.ts rename to x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/find_rules_route.ts diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/request_schema_validation.test.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/request_schema_validation.test.ts index 6d0cd10b217005..93cded33f6d94e 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/request_schema_validation.test.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/request_schema_validation.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { FindRulesRequestQuery } from './request_schema'; +import type { FindRulesRequestQuery } from './find_rules_route'; import { validateFindRulesRequestQuery } from './request_schema_validation'; describe('Find rules request schema, additional validation', () => { diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/request_schema_validation.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/request_schema_validation.ts index a8ceb09dea5b4d..769ef566d1efd9 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/request_schema_validation.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/find_rules/request_schema_validation.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { FindRulesRequestQuery } from './request_schema'; +import type { FindRulesRequestQuery } from './find_rules_route'; /** * Additional validation that is implemented outside of the schema itself. diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/index.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/index.ts index bd9066d90a96e7..0385006a3cefa3 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/index.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/index.ts @@ -12,20 +12,23 @@ export * from './bulk_crud/bulk_patch_rules/bulk_patch_rules_route'; export * from './bulk_crud/bulk_update_rules/bulk_update_rules_route'; export * from './bulk_crud/response_schema'; export * from './coverage_overview/coverage_overview_route'; +export * from './crud/create_rule/create_rule_route'; export * from './crud/create_rule/request_schema_validation'; -export * from './crud/patch_rule/request_schema_validation'; +export * from './crud/delete_rule/delete_rule_route'; export * from './crud/patch_rule/patch_rule_route'; +export * from './crud/patch_rule/request_schema_validation'; export * from './crud/read_rule/read_rule_route'; -export * from './crud/update_rule/update_rule_route'; export * from './crud/update_rule/request_schema_validation'; +export * from './crud/update_rule/update_rule_route'; export * from './export_rules/export_rules_details_schema'; export * from './export_rules/export_rules_route'; -export * from './get_rule_management_filters/get_rule_management_filters_route'; -export * from './find_rules/request_schema'; +export * from './find_rules/find_rules_route'; export * from './find_rules/request_schema_validation'; +export * from './get_rule_management_filters/get_rule_management_filters_route'; export * from './import_rules/import_rules_route'; export * from './import_rules/rule_to_import_validation'; export * from './import_rules/rule_to_import'; -export * from './urls'; -export * from './model/query_rule_by_ids'; export * from './model/query_rule_by_ids_validation'; +export * from './model/query_rule_by_ids'; +export * from './urls'; +export * from './tags/read_tags/read_tags_route'; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/tags/read_tags/read_tags_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/tags/read_tags/read_tags_route.ts new file mode 100644 index 00000000000000..4b651600e9c9ed --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/tags/read_tags/read_tags_route.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const ReadTagsResponse = t.array(t.string); +export type ReadTagsResponse = t.TypeOf; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/setup_health/setup_health_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/setup_health/setup_health_route.ts new file mode 100644 index 00000000000000..ef1b63bf3445d5 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/setup_health/setup_health_route.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const SetupHealthResponse = t.exact(t.type({})); +export type SetupHealthResponse = t.TypeOf; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/index.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/index.ts index a2f5f76f00b08a..b23603ef8084e6 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/index.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/index.ts @@ -8,6 +8,7 @@ export * from './detection_engine_health/get_cluster_health/get_cluster_health_route'; export * from './detection_engine_health/get_rule_health/get_rule_health_route'; export * from './detection_engine_health/get_space_health/get_space_health_route'; +export * from './detection_engine_health/setup_health/setup_health_route'; export * from './detection_engine_health/model'; export * from './rule_execution_logs/get_rule_execution_events/get_rule_execution_events_route'; export * from './rule_execution_logs/get_rule_execution_results/get_rule_execution_results_route'; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/generate_assets/generate_assets_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/generate_assets/generate_assets_route.ts deleted file mode 100644 index 3bbf983c5c0f94..00000000000000 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/generate_assets/generate_assets_route.ts +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as t from 'io-ts'; -import moment from 'moment'; -import { transformError } from '@kbn/securitysolution-es-utils'; -import { PositiveIntegerGreaterThanZero } from '@kbn/securitysolution-io-ts-types'; - -import { GENERATE_ASSETS_URL } from '../../../../../../common/api/detection_engine/prebuilt_rules'; - -import type { SecuritySolutionPluginRouter } from '../../../../../types'; -import { buildRouteValidation } from '../../../../../utils/build_validation/route_validation'; -import { buildSiemResponse } from '../../../routes/utils'; - -import type { PrebuiltRuleAsset } from '../../model/rule_assets/prebuilt_rule_asset'; -import { createPrebuiltRuleAssetsClient } from '../../logic/rule_assets/prebuilt_rule_assets_client'; - -type RequestBody = t.TypeOf; -const RequestBody = t.exact( - t.type({ - num_versions_per_rule: PositiveIntegerGreaterThanZero, - }) -); - -/** - * NOTE: This is a helper endpoint for development and testing. It should be removed later. - * This endpoint: - * - reads currently installed latest assets (saved objects of type security-rule) - * - generates more versions of rule assets based on the latest ones (multiple versions per rule) - * - writes the generated saved objects back to the kibana index - */ -export const generateAssetsRoute = (router: SecuritySolutionPluginRouter) => { - router.post( - { - path: GENERATE_ASSETS_URL, - validate: { - body: buildRouteValidation(RequestBody), - }, - options: { - tags: ['access:securitySolution'], - timeout: { - // FUNFACT: If we do not add a very long timeout what will happen - // is that Chrome which receive a 408 error and then do a retry. - // This retry can cause lots of connections to happen. Using a very - // long timeout will ensure that Chrome does not do retries and saturate the connections. - idleSocket: moment.duration('1', 'hour').asMilliseconds(), - }, - }, - }, - async (context, request, response) => { - const siemResponse = buildSiemResponse(response); - - try { - const ctx = await context.resolve(['core']); - const soClient = ctx.core.savedObjects.client; - const ruleAssetsClient = createPrebuiltRuleAssetsClient(soClient); - - const latestRules = await ruleAssetsClient.fetchLatestAssets(); - - const historicalRules = generateHistoricalVersionsForManyRules( - latestRules, - request.body.num_versions_per_rule - ); - - await ruleAssetsClient.bulkCreateAssets(historicalRules); - - return response.ok({ - body: { - num_latest_rules: latestRules.length, - num_installed_versions: historicalRules.length, - }, - }); - } catch (err) { - const error = transformError(err); - return siemResponse.error({ - body: error.message, - statusCode: error.statusCode, - }); - } - } - ); -}; - -const generateHistoricalVersionsForManyRules = ( - rules: PrebuiltRuleAsset[], - numberOfVersionsPerRule: number -) => { - const result: PrebuiltRuleAsset[] = []; - - rules.forEach((rule) => { - result.push(...generateHistoricalVersionsForOneRule(rule, numberOfVersionsPerRule)); - }); - - return result; -}; - -const generateHistoricalVersionsForOneRule = ( - rule: PrebuiltRuleAsset, - numberOfVersionsPerRule: number -): PrebuiltRuleAsset[] => { - const { name: ruleName, version: latestVersion, ...restOfRuleAttributes } = rule; - const nextToLatestVersion = latestVersion + 1; - const result: PrebuiltRuleAsset[] = []; - - for (let i = 0; i < numberOfVersionsPerRule; i++) { - const historicalVersion = nextToLatestVersion + i; - result.push({ - name: `${ruleName} v${historicalVersion}`, - version: historicalVersion, - ...restOfRuleAttributes, - }); - } - - return result; -}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/register_routes.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/register_routes.ts index 51fc32fca542f8..1ac2ef2a3954db 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/register_routes.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/register_routes.ts @@ -11,7 +11,6 @@ import type { SecuritySolutionPluginRouter } from '../../../../types'; import { getPrebuiltRulesAndTimelinesStatusRoute } from './get_prebuilt_rules_and_timelines_status/get_prebuilt_rules_and_timelines_status_route'; import { getPrebuiltRulesStatusRoute } from './get_prebuilt_rules_status/get_prebuilt_rules_status_route'; import { installPrebuiltRulesAndTimelinesRoute } from './install_prebuilt_rules_and_timelines/install_prebuilt_rules_and_timelines_route'; -import { generateAssetsRoute } from './generate_assets/generate_assets_route'; import { reviewRuleInstallationRoute } from './review_rule_installation/review_rule_installation_route'; import { reviewRuleUpgradeRoute } from './review_rule_upgrade/review_rule_upgrade_route'; import { performRuleInstallationRoute } from './perform_rule_installation/perform_rule_installation_route'; @@ -31,7 +30,4 @@ export const registerPrebuiltRulesRoutes = ( performRuleUpgradeRoute(router); reviewRuleInstallationRoute(router); reviewRuleUpgradeRoute(router); - - // Helper endpoints for development and testing. Should be removed later. - generateAssetsRoute(router); }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.ts index 674b61cebd6a0e..98cd2186501bb2 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.ts @@ -20,6 +20,7 @@ import { MAX_RULES_TO_UPDATE_IN_PARALLEL, RULES_TABLE_MAX_PAGE_SIZE, } from '../../../../../../../common/constants'; +import type { PerformBulkActionResponse } from '../../../../../../../common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route'; import { BulkActionType, PerformBulkActionRequestBody, @@ -246,7 +247,7 @@ export const performBulkActionRoute = ( }, }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { const { body } = request; const siemResponse = buildSiemResponse(response); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.ts index 6374edfe09a23c..f0ceafe84170d1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { Logger } from '@kbn/core/server'; +import type { IKibanaResponse, Logger } from '@kbn/core/server'; import { validate } from '@kbn/securitysolution-io-ts-utils'; import { DETECTION_ENGINE_RULES_BULK_CREATE } from '../../../../../../../common/constants'; @@ -52,7 +52,7 @@ export const bulkCreateRulesRoute = ( tags: ['access:securitySolution'], }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { logDeprecatedBulkEndpoint(logger, DETECTION_ENGINE_RULES_BULK_CREATE); const siemResponse = buildSiemResponse(response); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts index 955cfbd13dd736..f3d4dc4fd64b98 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { RouteConfig, RequestHandler, Logger } from '@kbn/core/server'; +import type { RouteConfig, RequestHandler, Logger, IKibanaResponse } from '@kbn/core/server'; import { validate } from '@kbn/securitysolution-io-ts-utils'; import { DETECTION_ENGINE_RULES_BULK_DELETE } from '../../../../../../../common/constants'; @@ -54,7 +54,11 @@ export const bulkDeleteRulesRoute = (router: SecuritySolutionPluginRouter, logge tags: ['access:securitySolution'], }, }; - const handler: Handler = async (context, request, response) => { + const handler: Handler = async ( + context, + request, + response + ): Promise> => { logDeprecatedBulkEndpoint(logger, DETECTION_ENGINE_RULES_BULK_DELETE); const siemResponse = buildSiemResponse(response); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts index 730349078bb65e..2fb8660c6aaa20 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts @@ -6,7 +6,7 @@ */ import { validate } from '@kbn/securitysolution-io-ts-utils'; -import type { Logger } from '@kbn/core/server'; +import type { IKibanaResponse, Logger } from '@kbn/core/server'; import { DETECTION_ENGINE_RULES_BULK_UPDATE } from '../../../../../../../common/constants'; import { @@ -46,7 +46,7 @@ export const bulkPatchRulesRoute = ( tags: ['access:securitySolution'], }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { logDeprecatedBulkEndpoint(logger, DETECTION_ENGINE_RULES_BULK_UPDATE); const siemResponse = buildSiemResponse(response); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts index bae2757854760b..f11412aa72b65b 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { Logger } from '@kbn/core/server'; +import type { IKibanaResponse, Logger } from '@kbn/core/server'; import { validate } from '@kbn/securitysolution-io-ts-utils'; import { @@ -51,7 +51,7 @@ export const bulkUpdateRulesRoute = ( tags: ['access:securitySolution'], }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { logDeprecatedBulkEndpoint(logger, DETECTION_ENGINE_RULES_BULK_UPDATE); const siemResponse = buildSiemResponse(response); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/coverage_overview/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/coverage_overview/route.ts index 71394c93be3012..485dc7795c4583 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/coverage_overview/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/coverage_overview/route.ts @@ -6,13 +6,15 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; +import type { IKibanaResponse } from '@kbn/core/server'; +import type { CoverageOverviewResponse } from '../../../../../../../common/api/detection_engine'; import { CoverageOverviewRequestBody, RULE_MANAGEMENT_COVERAGE_OVERVIEW_URL, } from '../../../../../../../common/api/detection_engine'; import type { SecuritySolutionPluginRouter } from '../../../../../../types'; -import { buildSiemResponse } from '../../../../routes/utils'; import { buildRouteValidation } from '../../../../../../utils/build_validation/route_validation'; +import { buildSiemResponse } from '../../../../routes/utils'; import { handleCoverageOverviewRequest } from './handle_coverage_overview_request'; export const getCoverageOverviewRoute = (router: SecuritySolutionPluginRouter) => { @@ -26,7 +28,7 @@ export const getCoverageOverviewRoute = (router: SecuritySolutionPluginRouter) = tags: ['access:securitySolution'], }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/create_rule/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/create_rule/route.ts index 8e6dd96f15f3e0..2b11d6c664eb10 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/create_rule/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/create_rule/route.ts @@ -6,20 +6,19 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; - -import { DETECTION_ENGINE_RULES_URL } from '../../../../../../../common/constants'; -import { validateCreateRuleProps } from '../../../../../../../common/api/detection_engine/rule_management'; +import type { IKibanaResponse } from '@kbn/core/server'; import { RuleCreateProps } from '../../../../../../../common/api/detection_engine/model/rule_schema'; - -import { buildRouteValidation } from '../../../../../../utils/build_validation/route_validation'; +import type { CreateRuleResponse } from '../../../../../../../common/api/detection_engine/rule_management'; +import { validateCreateRuleProps } from '../../../../../../../common/api/detection_engine/rule_management'; +import { DETECTION_ENGINE_RULES_URL } from '../../../../../../../common/constants'; import type { SetupPlugins } from '../../../../../../plugin'; import type { SecuritySolutionPluginRouter } from '../../../../../../types'; +import { buildRouteValidation } from '../../../../../../utils/build_validation/route_validation'; import { buildMlAuthz } from '../../../../../machine_learning/authz'; import { throwAuthzError } from '../../../../../machine_learning/validation'; -import { readRules } from '../../../logic/crud/read_rules'; import { buildSiemResponse } from '../../../../routes/utils'; - import { createRules } from '../../../logic/crud/create_rules'; +import { readRules } from '../../../logic/crud/read_rules'; import { checkDefaultRuleExceptionListReferences } from '../../../logic/exceptions/check_for_default_rule_exception_list'; import { validateRuleDefaultExceptionList } from '../../../logic/exceptions/validate_rule_default_exception_list'; import { transformValidate, validateResponseActionsPermissions } from '../../../utils/validate'; @@ -38,7 +37,7 @@ export const createRuleRoute = ( tags: ['access:securitySolution'], }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); const validationErrors = validateCreateRuleProps(request.body); if (validationErrors.length) { @@ -104,7 +103,7 @@ export const createRuleRoute = ( if (errors != null) { return siemResponse.error({ statusCode: 500, body: errors }); } else { - return response.ok({ body: validated ?? {} }); + return response.ok({ body: validated }); } } catch (err) { const error = transformError(err as Error); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/delete_rule/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/delete_rule/route.ts index b46e85f38a83ae..95549df95673f2 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/delete_rule/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/delete_rule/route.ts @@ -7,7 +7,9 @@ import { transformError } from '@kbn/securitysolution-es-utils'; +import type { IKibanaResponse } from '@kbn/core/server'; import { DETECTION_ENGINE_RULES_URL } from '../../../../../../../common/constants'; +import type { DeleteRuleResponse } from '../../../../../../../common/api/detection_engine/rule_management'; import { QueryRuleByIds, validateQueryRuleByIds, @@ -32,7 +34,7 @@ export const deleteRuleRoute = (router: SecuritySolutionPluginRouter) => { tags: ['access:securitySolution'], }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); const validationErrors = validateQueryRuleByIds(request.query); if (validationErrors.length) { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/export_rules/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/export_rules/route.ts index 28f65bcfcaa7cb..d1a98fc4295325 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/export_rules/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/export_rules/route.ts @@ -9,7 +9,6 @@ import { transformError } from '@kbn/securitysolution-es-utils'; import type { Logger } from '@kbn/core/server'; import { DETECTION_ENGINE_RULES_URL } from '../../../../../../../common/constants'; -import type { ExportRulesRequestQueryDecoded } from '../../../../../../../common/api/detection_engine/rule_management'; import { ExportRulesRequestBody, ExportRulesRequestQuery, @@ -32,9 +31,7 @@ export const exportRulesRoute = ( { path: `${DETECTION_ENGINE_RULES_URL}/_export`, validate: { - query: buildRouteValidation( - ExportRulesRequestQuery - ), + query: buildRouteValidation(ExportRulesRequestQuery), body: buildRouteValidation(ExportRulesRequestBody), }, options: { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/filters/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/filters/route.ts index 54e84b989ab559..07c71c34da1759 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/filters/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/filters/route.ts @@ -8,6 +8,7 @@ import { transformError } from '@kbn/securitysolution-es-utils'; import { validate } from '@kbn/securitysolution-io-ts-utils'; import type { RulesClient } from '@kbn/alerting-plugin/server'; +import type { IKibanaResponse } from '@kbn/core/server'; import { GetRuleManagementFiltersResponse, RULE_MANAGEMENT_FILTERS_URL, @@ -59,7 +60,7 @@ export const getRuleManagementFilters = (router: SecuritySolutionPluginRouter) = tags: ['access:securitySolution'], }, }, - async (context, _, response) => { + async (context, _, response): Promise> => { const siemResponse = buildSiemResponse(response); const ctx = await context.resolve(['alerting']); const rulesClient = ctx.alerting.getRulesClient(); @@ -84,7 +85,7 @@ export const getRuleManagementFilters = (router: SecuritySolutionPluginRouter) = if (validationError != null) { return siemResponse.error({ statusCode: 500, body: validationError }); } else { - return response.ok({ body: validatedBody ?? {} }); + return response.ok({ body: validatedBody }); } } catch (err) { const error = transformError(err); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.ts index a1608a9fa9eb7b..ac4d849e00ea43 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.ts @@ -13,6 +13,7 @@ import { createPromiseFromStreams } from '@kbn/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; import { validate } from '@kbn/securitysolution-io-ts-utils'; +import type { IKibanaResponse } from '@kbn/core/server'; import { DETECTION_ENGINE_RULES_URL } from '../../../../../../../common/constants'; import type { ImportRulesRequestQueryDecoded } from '../../../../../../../common/api/detection_engine/rule_management'; import { @@ -63,7 +64,7 @@ export const importRulesRoute = ( }, }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { @@ -145,7 +146,7 @@ export const importRulesRoute = ( overwrite: request.query.overwrite_action_connectors, }); - // rulesWithMigratedActions: Is returened only in case connectors were exorted from different namesapce and the + // rulesWithMigratedActions: Is returned only in case connectors were exported from different namespace and the // original rules actions' ids were replaced with new destinationIds const parsedRules = actionConnectorErrors.length ? [] diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.ts index 4631d57608d9a5..558137726d2f54 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.ts @@ -5,23 +5,22 @@ * 2.0. */ +import type { IKibanaResponse } from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; - -import { DETECTION_ENGINE_RULES_URL } from '../../../../../../../common/constants'; +import type { PatchRuleResponse } from '../../../../../../../common/api/detection_engine/rule_management'; import { PatchRuleRequestBody, validatePatchRuleRequestBody, } from '../../../../../../../common/api/detection_engine/rule_management'; - -import { buildRouteValidationNonExact } from '../../../../../../utils/build_validation/route_validation'; -import type { SecuritySolutionPluginRouter } from '../../../../../../types'; +import { DETECTION_ENGINE_RULES_URL } from '../../../../../../../common/constants'; import type { SetupPlugins } from '../../../../../../plugin'; +import type { SecuritySolutionPluginRouter } from '../../../../../../types'; +import { buildRouteValidationNonExact } from '../../../../../../utils/build_validation/route_validation'; import { buildMlAuthz } from '../../../../../machine_learning/authz'; import { throwAuthzError } from '../../../../../machine_learning/validation'; import { buildSiemResponse } from '../../../../routes/utils'; - -import { readRules } from '../../../logic/crud/read_rules'; import { patchRules } from '../../../logic/crud/patch_rules'; +import { readRules } from '../../../logic/crud/read_rules'; import { checkDefaultRuleExceptionListReferences } from '../../../logic/exceptions/check_for_default_rule_exception_list'; import { validateRuleDefaultExceptionList } from '../../../logic/exceptions/validate_rule_default_exception_list'; import { getIdError } from '../../../utils/utils'; @@ -41,7 +40,7 @@ export const patchRuleRoute = (router: SecuritySolutionPluginRouter, ml: SetupPl tags: ['access:securitySolution'], }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); const validationErrors = validatePatchRuleRequestBody(request.body); if (validationErrors.length) { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/read_rule/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/read_rule/route.ts index db97fb7b0404ef..0a1a29392470bf 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/read_rule/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/read_rule/route.ts @@ -5,21 +5,19 @@ * 2.0. */ -import type { Logger } from '@kbn/core/server'; +import type { IKibanaResponse, Logger } from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; - -import { DETECTION_ENGINE_RULES_URL } from '../../../../../../../common/constants'; +import type { ReadRuleResponse } from '../../../../../../../common/api/detection_engine/rule_management'; import { ReadRuleRequestQuery, validateQueryRuleByIds, } from '../../../../../../../common/api/detection_engine/rule_management'; - +import { DETECTION_ENGINE_RULES_URL } from '../../../../../../../common/constants'; import type { SecuritySolutionPluginRouter } from '../../../../../../types'; import { buildRouteValidation } from '../../../../../../utils/build_validation/route_validation'; import { buildSiemResponse } from '../../../../routes/utils'; -import { getIdError, transform } from '../../../utils/utils'; - import { readRules } from '../../../logic/crud/read_rules'; +import { getIdError, transform } from '../../../utils/utils'; export const readRuleRoute = (router: SecuritySolutionPluginRouter, logger: Logger) => { router.get( @@ -32,7 +30,7 @@ export const readRuleRoute = (router: SecuritySolutionPluginRouter, logger: Logg tags: ['access:securitySolution'], }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); const validationErrors = validateQueryRuleByIds(request.query); if (validationErrors.length) { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.ts index a24d5079a8f3d6..71a022f5e8a878 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.ts @@ -5,25 +5,24 @@ * 2.0. */ +import type { IKibanaResponse } from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; - -import { DETECTION_ENGINE_RULES_URL } from '../../../../../../../common/constants'; -import { validateUpdateRuleProps } from '../../../../../../../common/api/detection_engine/rule_management'; import { RuleUpdateProps } from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import type { SecuritySolutionPluginRouter } from '../../../../../../types'; +import type { UpdateRuleResponse } from '../../../../../../../common/api/detection_engine/rule_management'; +import { validateUpdateRuleProps } from '../../../../../../../common/api/detection_engine/rule_management'; +import { DETECTION_ENGINE_RULES_URL } from '../../../../../../../common/constants'; import type { SetupPlugins } from '../../../../../../plugin'; +import type { SecuritySolutionPluginRouter } from '../../../../../../types'; +import { buildRouteValidation } from '../../../../../../utils/build_validation/route_validation'; import { buildMlAuthz } from '../../../../../machine_learning/authz'; import { throwAuthzError } from '../../../../../machine_learning/validation'; import { buildSiemResponse } from '../../../../routes/utils'; - -import { getIdError } from '../../../utils/utils'; -import { transformValidate, validateResponseActionsPermissions } from '../../../utils/validate'; -import { updateRules } from '../../../logic/crud/update_rules'; -import { buildRouteValidation } from '../../../../../../utils/build_validation/route_validation'; - import { readRules } from '../../../logic/crud/read_rules'; +import { updateRules } from '../../../logic/crud/update_rules'; import { checkDefaultRuleExceptionListReferences } from '../../../logic/exceptions/check_for_default_rule_exception_list'; import { validateRuleDefaultExceptionList } from '../../../logic/exceptions/validate_rule_default_exception_list'; +import { getIdError } from '../../../utils/utils'; +import { transformValidate, validateResponseActionsPermissions } from '../../../utils/validate'; export const updateRuleRoute = (router: SecuritySolutionPluginRouter, ml: SetupPlugins['ml']) => { router.put( @@ -36,7 +35,7 @@ export const updateRuleRoute = (router: SecuritySolutionPluginRouter, ml: SetupP tags: ['access:securitySolution'], }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); const validationErrors = validateUpdateRuleProps(request.body); if (validationErrors.length) { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/route.ts index 3733f07fb9d8c3..fa7b5ab5986318 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/route.ts @@ -5,12 +5,12 @@ * 2.0. */ -import { transformError } from '@kbn/securitysolution-es-utils'; import type { IKibanaResponse } from '@kbn/core/server'; -import type { SecuritySolutionPluginRouter } from '../../../../../../types'; +import { transformError } from '@kbn/securitysolution-es-utils'; +import type { ReadTagsResponse } from '../../../../../../../common/api/detection_engine'; import { DETECTION_ENGINE_TAGS_URL } from '../../../../../../../common/constants'; +import type { SecuritySolutionPluginRouter } from '../../../../../../types'; import { buildSiemResponse } from '../../../../routes/utils'; - import { readTags } from './read_tags'; export const readTagsRoute = (router: SecuritySolutionPluginRouter) => { @@ -22,7 +22,7 @@ export const readTagsRoute = (router: SecuritySolutionPluginRouter) => { tags: ['access:securitySolution'], }, }, - async (context, request, response): Promise> => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); const rulesClient = (await context.alerting)?.getRulesClient(); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.ts index 611a5943dee1f0..c42f3f1546be6b 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.ts @@ -36,7 +36,7 @@ import type { export const transformValidate = ( rule: PartialRule -): [RuleResponse | null, string | null] => { +): [RuleResponse, null] | [null, string] => { const transformed = transform(rule); if (transformed == null) { return [null, 'Internal error transforming']; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_cluster_health/get_cluster_health_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_cluster_health/get_cluster_health_route.ts index 8d561957ec5086..46e505ebe5f77c 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_cluster_health/get_cluster_health_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_cluster_health/get_cluster_health_route.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { KibanaResponseFactory } from '@kbn/core-http-server'; +import type { IKibanaResponse, KibanaResponseFactory } from '@kbn/core-http-server'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidation } from '../../../../../../utils/build_validation/route_validation'; import { buildSiemResponse } from '../../../../routes/utils'; @@ -65,7 +65,7 @@ export const getClusterHealthRoute = (router: SecuritySolutionPluginRouter) => { access: 'public', // must be public to enable "system" users to collect data }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { return handleClusterHealthRequest({ response, resolveParameters: () => validateGetClusterHealthRequest(request.body), diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_rule_health/get_rule_health_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_rule_health/get_rule_health_route.ts index ae65bc9d70c1af..b9ba33cfc7a4cb 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_rule_health/get_rule_health_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_rule_health/get_rule_health_route.ts @@ -6,6 +6,7 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; +import type { IKibanaResponse } from '@kbn/core/server'; import type { GetRuleHealthResponse } from '../../../../../../../common/api/detection_engine/rule_monitoring'; import { @@ -39,7 +40,7 @@ export const getRuleHealthRoute = (router: SecuritySolutionPluginRouter) => { access: 'public', // must be public to enable "system" users to collect data }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_space_health/get_space_health_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_space_health/get_space_health_route.ts index 86728dbf3e3bed..1f90382542d8a9 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_space_health/get_space_health_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_space_health/get_space_health_route.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { KibanaResponseFactory } from '@kbn/core-http-server'; +import type { IKibanaResponse, KibanaResponseFactory } from '@kbn/core-http-server'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidation } from '../../../../../../utils/build_validation/route_validation'; import { buildSiemResponse } from '../../../../routes/utils'; @@ -41,7 +41,7 @@ export const getSpaceHealthRoute = (router: SecuritySolutionPluginRouter) => { access: 'public', // must be public to enable "system" users to collect data }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { return handleSpaceHealthRequest({ response, resolveParameters: () => validateGetSpaceHealthRequest({}), diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/setup/setup_health_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/setup/setup_health_route.ts index 61604df4b91972..8523a2adb349b1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/setup/setup_health_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/setup/setup_health_route.ts @@ -5,11 +5,12 @@ * 2.0. */ +import type { IKibanaResponse } from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; -import { buildSiemResponse } from '../../../../routes/utils'; -import type { SecuritySolutionPluginRouter } from '../../../../../../types'; - import { SETUP_HEALTH_URL } from '../../../../../../../common/api/detection_engine/rule_monitoring'; +import type { SetupHealthResponse } from '../../../../../../../common/api/detection_engine'; +import type { SecuritySolutionPluginRouter } from '../../../../../../types'; +import { buildSiemResponse } from '../../../../routes/utils'; /** * Similar to the "setup" command of beats, this endpoint installs resources @@ -26,7 +27,7 @@ export const setupHealthRoute = (router: SecuritySolutionPluginRouter) => { access: 'public', // must be public to enable "system" users to collect data }, }, - async (context, request, response) => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/rule_execution_logs/get_rule_execution_events/get_rule_execution_events_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/rule_execution_logs/get_rule_execution_events/get_rule_execution_events_route.ts index b0170d2a8a7634..dd6fc4d5964f15 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/rule_execution_logs/get_rule_execution_events/get_rule_execution_events_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/rule_execution_logs/get_rule_execution_events/get_rule_execution_events_route.ts @@ -6,6 +6,7 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; +import type { IKibanaResponse } from '@kbn/core/server'; import { buildRouteValidation } from '../../../../../../utils/build_validation/route_validation'; import { buildSiemResponse } from '../../../../routes/utils'; import type { SecuritySolutionPluginRouter } from '../../../../../../types'; @@ -33,7 +34,11 @@ export const getRuleExecutionEventsRoute = (router: SecuritySolutionPluginRouter tags: ['access:securitySolution'], }, }, - async (context, request, response) => { + async ( + context, + request, + response + ): Promise> => { const { params, query } = request; const siemResponse = buildSiemResponse(response); @@ -49,9 +54,7 @@ export const getRuleExecutionEventsRoute = (router: SecuritySolutionPluginRouter perPage: query.per_page, }); - const responseBody: GetRuleExecutionEventsResponse = executionEventsResponse; - - return response.ok({ body: responseBody }); + return response.ok({ body: executionEventsResponse }); } catch (err) { const error = transformError(err); return siemResponse.error({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/rule_execution_logs/get_rule_execution_results/get_rule_execution_results_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/rule_execution_logs/get_rule_execution_results/get_rule_execution_results_route.ts index 98ab544835bb56..efc20a2b2053d0 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/rule_execution_logs/get_rule_execution_results/get_rule_execution_results_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/rule_execution_logs/get_rule_execution_results/get_rule_execution_results_route.ts @@ -6,6 +6,7 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; +import type { IKibanaResponse } from '@kbn/core/server'; import { buildRouteValidation } from '../../../../../../utils/build_validation/route_validation'; import { buildSiemResponse } from '../../../../routes/utils'; import type { SecuritySolutionPluginRouter } from '../../../../../../types'; @@ -33,7 +34,11 @@ export const getRuleExecutionResultsRoute = (router: SecuritySolutionPluginRoute tags: ['access:securitySolution'], }, }, - async (context, request, response) => { + async ( + context, + request, + response + ): Promise> => { const { ruleId } = request.params; const { start, @@ -63,9 +68,7 @@ export const getRuleExecutionResultsRoute = (router: SecuritySolutionPluginRoute sortOrder, }); - const responseBody: GetRuleExecutionResultsResponse = executionResultsResponse; - - return response.ok({ body: responseBody }); + return response.ok({ body: executionResultsResponse }); } catch (err) { const error = transformError(err); return siemResponse.error({ From 44634d6c6f94ea23ee468e43bc331944aa47cd32 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 26 Jul 2023 17:01:36 +0100 Subject: [PATCH 10/58] skip failing es promotion suite (#162584) --- x-pack/test/security_api_integration/tests/saml/saml_login.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/security_api_integration/tests/saml/saml_login.ts b/x-pack/test/security_api_integration/tests/saml/saml_login.ts index a10e2e2067eb68..b055fb56576aa4 100644 --- a/x-pack/test/security_api_integration/tests/saml/saml_login.ts +++ b/x-pack/test/security_api_integration/tests/saml/saml_login.ts @@ -443,7 +443,8 @@ export default function ({ getService }: FtrProviderContext) { }); }); - describe('API access with expired access token.', () => { + // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/162584 + describe.skip('API access with expired access token.', () => { let sessionCookie: Cookie; beforeEach(async function () { From efeb946073fd4ddf4f69d4f3f3b87659fcdf21f3 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 26 Jul 2023 17:05:48 +0100 Subject: [PATCH 11/58] skip failing es promotion suite (#162586) --- x-pack/test/security_api_integration/tests/token/session.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/security_api_integration/tests/token/session.ts b/x-pack/test/security_api_integration/tests/token/session.ts index f42d9cc93585ff..e811372755fc87 100644 --- a/x-pack/test/security_api_integration/tests/token/session.ts +++ b/x-pack/test/security_api_integration/tests/token/session.ts @@ -132,7 +132,8 @@ export default function ({ getService }: FtrProviderContext) { .expect(200); }); - describe('post-authentication stage', () => { + // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/162586 + describe.skip('post-authentication stage', () => { for (const client of ['start-contract', 'request-context', 'custom']) { it(`expired access token should be automatically refreshed by the ${client} client`, async function () { this.timeout(60000); From 9b506c927c0aa37da46108b0d26cda8ff1de8c96 Mon Sep 17 00:00:00 2001 From: Larry Gregory Date: Wed, 26 Jul 2023 13:05:22 -0400 Subject: [PATCH 12/58] Adds docs for kibana_system privileges (#161697) Introduces a new `Security` Key Concepts page to the developer documentation, with two sections: 1. API Authorization, adapted from https://github.com/elastic/kibana/pull/160351#discussion_r1253519358. 2. `kibana_system` privilege guidelines, adapted from our team's internal documentation. There are two notable changes from the previous version: 1) Removal of internal discussions, as this now exists within a public repository. 2) Recreated the existing mermaid diagram into a public Whimsical diagram. The new docs system supports the latter, but not the former. ## Testing To build this locally, run `./scripts/dev_docs` from a local checkout of this PR. A server will eventually start on `http://localhost:3000` where you can preview the changes. ## Screenshots CleanShot 2023-07-12 at 08 32 23@2x ![CleanShot 2023-07-12 at 08 33 21@2x](https://github.com/elastic/kibana/assets/3493255/b15083af-f2b4-4daf-93a7-d6f43c73f3f2) --- dev_docs/key_concepts/security.mdx | 100 +++++++++++++++++++++++++++++ nav-kibana-dev.docnav.json | 5 +- 2 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 dev_docs/key_concepts/security.mdx diff --git a/dev_docs/key_concepts/security.mdx b/dev_docs/key_concepts/security.mdx new file mode 100644 index 00000000000000..8e0bed133fe794 --- /dev/null +++ b/dev_docs/key_concepts/security.mdx @@ -0,0 +1,100 @@ +--- +id: kibDevDocsSecurityIntro +slug: /kibana-dev-docs/key-concepts/security-intro +title: Security +description: Maintaining Kibana's security posture +date: 2023-07-11 +tags: ['kibana', 'dev', 'contributor', 'security'] +--- + +Security is everyone's responsibility. This is inclusive of design, product, and engineering. The purpose of this guide is to give a high-level overview of security constructs and expectations. + +This guide covers the following topics: + +* [API authorization](#api-authorization) +* [The `kibana_system` user](#the-kibana_system-user) + +## API authorization +Kibana API routes do not have any authorization checks applied by default. This means that your APIs are accessible to anyone with valid credentials, regardless of their permissions. This includes users with no roles assigned. +This on its own is insufficient, and care must be taken to ensure that only authorized users can invoke your endpoints. + +### Adding API authorization +Kibana leverages for a majority of its persistence. The Saved Objects Service performs its own authorization checks, so if your API route is primarily a CRUD interface to Saved Objects, then your authorization needs are already met. +This is also true for derivatives of the Saved Objects Service, such as the Alerting and Cases services. + +If your endpoint is not a CRUD interface to Saved Objects, then your route should include `access` tags to ensure that only authorized users can invoke your endpoint. This is **especially** important if your route does any of the following: +1. Performs non-insignificant processing, causing load on the Kibana server. +2. Calls Elasticsearch using the internal `kibana_system` user. +3. Calls a third-party service. +4. Returns any non-public information to the caller, such as system configuration or state. + +More information on adding `access` tags to your routes can be found temporarily in the [legacy documentation](https://www.elastic.co/guide/en/kibana/current/development-security.html#development-plugin-feature-registration) + +### Why not add `access` tags to all routes by default? +Each authorization check that we perform involves a round-trip to Elasticsearch, so they are not as cheap as we'd like. Therefore, we want to keep the number of authorization checks we perform within a single route to a minimum. +Adding an `access` tag to routes that leverage the Saved Objects Service would be redundant in most cases, since the Saved Objects Service will be performing authorization anyway. + + +## The `kibana_system` user + +The Kibana server authenticates to Elasticsearch using the `elastic/kibana` [service account](https://www.elastic.co/guide/en/elasticsearch/reference/current/service-accounts.html#service-accounts-explanation). This service account has privileges that are equivilent to the `kibana_system` reserved role, whose descriptor is managed in the Elasticsearch repository ([source link](https://github.com/elastic/elasticsearch/blob/430cde6909eae12e1a90ac2bff29b71cbf4af18b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authz/store/KibanaOwnedReservedRoleDescriptors.java#L58)). +The vast majority of features will not require changes to the `kibana_system` user privileges. Changes to these privileges must be carefully considered, as we do not want the `kibana_system` account to have access to user data. + +### Guiding principals + +Consider these guidelines when reviewing changes to the `kibana_system` role descriptor. + +#### 1. Kibana should only access system and hidden indices + +- System indices are managed entirely by the stack, and should never be accessed by end users. +- Hidden indices are _typically_ managed by the stack, but _may_ be accessed by end users. +- Data indices are those which an end user could conceivably create on their own. As a general rule, users can create indices of any pattern so long as it does not begin with a \``.`\` (dot). Users can also create hidden indices, so it is important that documentation exists for any stack-managed hidden indices to reduce the chance of conflict with user-managed indices. + +Therefore, Kibana should not have access to non-system indices which do not begin with a \``.`\` (dot). + +Kibana should also not have the ability to modify system/hidden indices for which it is not the owner. + +##### Examples +| Index Type | Allowed Permissions | Examples | +|-------|--------|----- +| User-defined data index | none | `my-data`, `kibana-metrics` | +| System index not owned by Kibana | `read` | `.security` | +| System indices owned by Kibana | `all` | `.kibana*`, '.fleet*' | + +#### Decision tree + + +##### Exceptions for telemetry +Exceptions to this rule have been made in the past to aid in telemetry collection. This is not something we want to support long-term, but there aren't viable alternatives at the moment without a significant redesign. + +##### Exceptions for Fleet package lifecycle management +Fleet maintains the lifecycle of certain packages. These packages need to be upgraded during stack upgrades, and therefore have to happen in an automated fashion. The `kibana_system` user has elevated privileges to a set of **data incides** to facilitate this. + +If the set of indices managed by Fleet changes, we should ensure that they update [the documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-templates.html) to make note of index naming collisions. + + +#### 2. Kibana should not have the ability to manage security constructs. + +This includes: +- Users +- Roles +- Role Mappings + +### Rationale + +These guidelines exist for two primary reasons. + +#### Reduce impact of account compromise +Compromised `kibana_system` credentials can severely impact an installation. We want to make sure that this doesn't become catastrophic. More privileges == more potential damage. We shouldn't add privileges unnecessarily. We should remove privileges as soon as they aren't needed anymore. + +Credentials can be compromised in a number of ways: +1. Insecure storage (e.g. `kibana.yml`, a post-it note, etc.). +2. Kibana server host compromise. +3. Kibana server runtime compromise (e.g. RCE). + +#### Reduce impact of developer error +Kibana allows engineers to call ES using different sets of credentials: +1. `kibana_system` credentials. +2. End-user credentials. + +An authorization bypass could occur if an engineer accidentally uses the `kibana_system` credentials when they intended to use end-user credentials. See [Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/). \ No newline at end of file diff --git a/nav-kibana-dev.docnav.json b/nav-kibana-dev.docnav.json index 7bcad46f55b0b2..3af82d0ce2387f 100644 --- a/nav-kibana-dev.docnav.json +++ b/nav-kibana-dev.docnav.json @@ -78,6 +78,9 @@ { "id": "kibBuildingBlocks" }, + { + "id": "kibDevDocsSecurityIntro" + }, { "id": "kibDevDocsSavedObjectsIntro", "label": "Saved objects" @@ -482,4 +485,4 @@ ] } ] -} +} \ No newline at end of file From 4268b88c8ea896093f142f828e665cc60eac9910 Mon Sep 17 00:00:00 2001 From: Kathleen DeRusso Date: Wed, 26 Jul 2023 13:08:46 -0400 Subject: [PATCH 13/58] [Query Rules] Add query rules API autocomplete for dev tools (#162503) Adds query rule API autocomplete for dev tools. --- .../json/generated/query_ruleset.delete.json | 11 ++++++++++ .../json/generated/query_ruleset.get.json | 11 ++++++++++ .../json/generated/query_ruleset.list.json | 15 +++++++++++++ .../json/generated/query_ruleset.put.json | 11 ++++++++++ .../generated/search_application.delete.json | 2 +- .../json/overrides/query_ruleset.put.json | 22 +++++++++++++++++++ 6 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.delete.json create mode 100644 src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.get.json create mode 100644 src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.list.json create mode 100644 src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.put.json create mode 100644 src/plugins/console/server/lib/spec_definitions/json/overrides/query_ruleset.put.json diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.delete.json b/src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.delete.json new file mode 100644 index 00000000000000..6f77b64af09628 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.delete.json @@ -0,0 +1,11 @@ +{ + "query_ruleset.delete": { + "methods": [ + "DELETE" + ], + "patterns": [ + "_query_rules/{ruleset_id}" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-query-ruleset.html" + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.get.json b/src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.get.json new file mode 100644 index 00000000000000..3eae0af55b2ee5 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.get.json @@ -0,0 +1,11 @@ +{ + "query_ruleset.get": { + "methods": [ + "GET" + ], + "patterns": [ + "_query_rules/{ruleset_id}" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-query-ruleset.html" + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.list.json b/src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.list.json new file mode 100644 index 00000000000000..bc221d29933226 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.list.json @@ -0,0 +1,15 @@ +{ + "query_ruleset.list": { + "url_params": { + "from": 0, + "size": 0 + }, + "methods": [ + "GET" + ], + "patterns": [ + "_query_rules" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/list-query-rulesets.html" + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.put.json b/src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.put.json new file mode 100644 index 00000000000000..660cae6963ba8d --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/query_ruleset.put.json @@ -0,0 +1,11 @@ +{ + "query_ruleset.put": { + "methods": [ + "PUT" + ], + "patterns": [ + "_query_rules/{ruleset_id}" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/put-query-ruleset.html" + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/search_application.delete.json b/src/plugins/console/server/lib/spec_definitions/json/generated/search_application.delete.json index d95738b7478b29..3899cc01d98781 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/search_application.delete.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/search_application.delete.json @@ -6,6 +6,6 @@ "patterns": [ "_application/search_application/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/put-search-application.html" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-search-application.html" } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/overrides/query_ruleset.put.json b/src/plugins/console/server/lib/spec_definitions/json/overrides/query_ruleset.put.json new file mode 100644 index 00000000000000..d19b1f14f0f640 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/overrides/query_ruleset.put.json @@ -0,0 +1,22 @@ +{ + "query_ruleset.put": { + "data_autocomplete_rules": { + "rules": [{ + "rule_id": "", + "type": "", + "criteria": [{ + "type": "", + "metadata": "", + "value": "" + }], + "actions": { + "docs":[{ + "_id": "", + "_index": "" + }], + "ids":[""] + } + }] + } + } +} From 7d1b1bed6c9c001621d928834bb1cd0de24d4bf2 Mon Sep 17 00:00:00 2001 From: Brad White Date: Wed, 26 Jul 2023 11:34:00 -0600 Subject: [PATCH 14/58] Add support for Docker and Serverless to kbn/es (#161927) Closes #159260 ## Summary Adds support for running ES through Docker and Serverless in `@kbn/es` ### Checklist Delete any items that are not applicable to this PR. - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Tiago Costa --- packages/kbn-es/README.mdx | 14 +- packages/kbn-es/src/cli_commands/docker.ts | 67 +++ packages/kbn-es/src/cli_commands/index.ts | 4 + .../kbn-es/src/cli_commands/serverless.ts | 64 +++ packages/kbn-es/src/cluster.js | 34 +- packages/kbn-es/src/cluster_exec_options.ts | 2 +- packages/kbn-es/src/utils/docker.test.ts | 370 ++++++++++++++++ packages/kbn-es/src/utils/docker.ts | 398 ++++++++++++++++++ packages/kbn-es/src/utils/index.ts | 1 + packages/kbn-es/tsconfig.json | 1 + 10 files changed, 951 insertions(+), 4 deletions(-) create mode 100644 packages/kbn-es/src/cli_commands/docker.ts create mode 100644 packages/kbn-es/src/cli_commands/serverless.ts create mode 100644 packages/kbn-es/src/utils/docker.test.ts create mode 100644 packages/kbn-es/src/utils/docker.ts diff --git a/packages/kbn-es/README.mdx b/packages/kbn-es/README.mdx index d65171641613ef..e6e5727ccb8971 100644 --- a/packages/kbn-es/README.mdx +++ b/packages/kbn-es/README.mdx @@ -7,11 +7,13 @@ date: 2022-05-24 tags: ['kibana', 'dev', 'contributor', 'operations', 'es'] --- -> A command line utility for running elasticsearch from snapshot, source, archive or even building snapshot artifacts. +> A command line utility for running elasticsearch from snapshot, source, archive, docker, serverless or even building snapshot artifacts. ## Getting started If running elasticsearch from source, elasticsearch needs to be cloned to a sibling directory of Kibana. +If running elasticsearch serverless or a docker container, docker is required to be installed locally. Installation instructions can be found [here](https://www.docker.com/). + To run, go to the Kibana root and run `node scripts/es --help` to get the latest command line options. The script attempts to preserve the existing interfaces used by Elasticsearch CLI. This includes passing through options with the `-E` argument and the `ES_JAVA_OPTS` environment variable for Java options. @@ -28,6 +30,16 @@ Run from source with a configured data directory node scripts/es source --Epath.data=/home/me/es_data ``` +Run serverless with a specific image tag +``` +node scripts/es serverless --tag git-fec36430fba2-x86_64 +``` + +Run an official Docker release +``` +node scripts/es docker --tag 8.8.2 +``` + ## API ### run diff --git a/packages/kbn-es/src/cli_commands/docker.ts b/packages/kbn-es/src/cli_commands/docker.ts new file mode 100644 index 00000000000000..cb5a57731b9074 --- /dev/null +++ b/packages/kbn-es/src/cli_commands/docker.ts @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 dedent from 'dedent'; +import getopts from 'getopts'; +import { ToolingLog } from '@kbn/tooling-log'; +import { getTimeReporter } from '@kbn/ci-stats-reporter'; + +import { Cluster } from '../cluster'; +import { DOCKER_IMG, DOCKER_REPO, DOCKER_TAG } from '../utils'; +import { Command } from './types'; + +export const docker: Command = { + description: 'Run an Elasticsearch Docker image', + usage: 'es docker []', + help: (defaults: Record = {}) => { + const { password } = defaults; + + return dedent` + Options: + + --tag Image tag of ES to run from ${DOCKER_REPO} [default: ${DOCKER_TAG}] + --image Full path to image of ES to run, has precedence over tag. [default: ${DOCKER_IMG}] + --password Sets password for elastic user [default: ${password}] + -E Additional key=value settings to pass to Elasticsearch + -D Override Docker command + + Examples: + + es docker --tag master-SNAPSHOT-amd64 + es docker --image docker.elastic.co/repo:tag + es docker -D 'start es01' + `; + }, + run: async (defaults = {}) => { + const runStartTime = Date.now(); + const log = new ToolingLog({ + level: 'info', + writeTo: process.stdout, + }); + const reportTime = getTimeReporter(log, 'scripts/es docker'); + + const argv = process.argv.slice(2); + const options = getopts(argv, { + alias: { + esArgs: 'E', + dockerCmd: 'D', + }, + + string: ['tag', 'image', 'D'], + + default: defaults, + }); + + const cluster = new Cluster(); + await cluster.runDocker({ + reportTime, + startTime: runStartTime, + ...options, + }); + }, +}; diff --git a/packages/kbn-es/src/cli_commands/index.ts b/packages/kbn-es/src/cli_commands/index.ts index f83829476563de..89c6d51f41adfc 100644 --- a/packages/kbn-es/src/cli_commands/index.ts +++ b/packages/kbn-es/src/cli_commands/index.ts @@ -10,10 +10,14 @@ import { snapshot } from './snapshot'; import { source } from './source'; import { archive } from './archive'; import { buildSnapshots } from './build_snapshots'; +import { docker } from './docker'; +import { serverless } from './serverless'; export const commands = { snapshot, source, archive, build_snapshots: buildSnapshots, + docker, + serverless, }; diff --git a/packages/kbn-es/src/cli_commands/serverless.ts b/packages/kbn-es/src/cli_commands/serverless.ts new file mode 100644 index 00000000000000..ab2d6d4b63926f --- /dev/null +++ b/packages/kbn-es/src/cli_commands/serverless.ts @@ -0,0 +1,64 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import dedent from 'dedent'; +import getopts from 'getopts'; +import { ToolingLog } from '@kbn/tooling-log'; +import { getTimeReporter } from '@kbn/ci-stats-reporter'; + +import { Cluster } from '../cluster'; +import { SERVERLESS_REPO, SERVERLESS_TAG, SERVERLESS_IMG } from '../utils'; +import { Command } from './types'; + +export const serverless: Command = { + description: 'Run Serverless Elasticsearch through Docker', + usage: 'es serverless []', + help: (defaults: Record = {}) => { + return dedent` + Options: + + --tag Image tag of ES Serverless to run from ${SERVERLESS_REPO} [default: ${SERVERLESS_TAG}] + --image Full path of ES Serverless image to run, has precedence over tag. [default: ${SERVERLESS_IMG}] + --clean Remove existing file system object store before running + -E Additional key=value settings to pass to Elasticsearch + + Examples: + + es serverless --tag git-fec36430fba2-x86_64 + es serverless --image docker.elastic.co/repo:tag + `; + }, + run: async (defaults = {}) => { + const runStartTime = Date.now(); + const log = new ToolingLog({ + level: 'info', + writeTo: process.stdout, + }); + const reportTime = getTimeReporter(log, 'scripts/es serverless'); + + const argv = process.argv.slice(2); + const options = getopts(argv, { + alias: { + basePath: 'base-path', + esArgs: 'E', + }, + + string: ['tag', 'image'], + boolean: ['clean'], + + default: defaults, + }); + + const cluster = new Cluster(); + await cluster.runServerless({ + reportTime, + startTime: runStartTime, + ...options, + }); + }, +}; diff --git a/packages/kbn-es/src/cluster.js b/packages/kbn-es/src/cluster.js index a027db201b002c..b88e4a788fb720 100644 --- a/packages/kbn-es/src/cluster.js +++ b/packages/kbn-es/src/cluster.js @@ -21,6 +21,8 @@ const { extractConfigFiles, NativeRealm, parseTimeoutToMs, + runServerlessCluster, + runDockerContainer, } = require('./utils'); const { createCliError } = require('./errors'); const { promisify } = require('util'); @@ -31,6 +33,8 @@ const { CA_CERT_PATH, ES_NOPASSWORD_P12_PATH, extract } = require('@kbn/dev-util const DEFAULT_READY_TIMEOUT = parseTimeoutToMs('1m'); /** @typedef {import('./cluster_exec_options').EsClusterExecOptions} ExecOptions */ +/** @typedef {import('./utils').DockerOptions} DockerOptions */ +/** @typedef {import('./utils').ServerlessOptions}ServerlessrOptions */ // listen to data on stream until map returns anything but undefined const first = (stream, map) => @@ -467,7 +471,7 @@ exports.Cluster = class Cluster { if (stdioTarget) { stdioTarget.write(chunk); } else { - this._log.error(chalk.red()); + this._log.error(chalk.red(chunk.trim())); } }); @@ -483,7 +487,7 @@ exports.Cluster = class Cluster { }); } - // observe the exit code of the process and reflect in _outcome promies + // observe the exit code of the process and reflect in _outcome promises const exitCode = new Promise((resolve) => this._process.once('exit', resolve)); this._outcome = exitCode.then((code) => { if (this._stopCalled) { @@ -558,4 +562,30 @@ exports.Cluster = class Cluster { } return esJavaOpts.trim(); } + + /** + * Run an Elasticsearch Serverless Docker cluster + * + * @param {ServerlessOptions} options + */ + async runServerless(options = {}) { + if (this._process || this._outcome) { + throw new Error('ES has already been started'); + } + + await runServerlessCluster(this._log, options); + } + + /** + * Run an Elasticsearch Docker container + * + * @param {DockerOptions} options + */ + async runDocker(options = {}) { + if (this._process || this._outcome) { + throw new Error('ES has already been started'); + } + + this._process = await runDockerContainer(this._log, options); + } }; diff --git a/packages/kbn-es/src/cluster_exec_options.ts b/packages/kbn-es/src/cluster_exec_options.ts index f1b91bb52ff7ef..30aeabbab903aa 100644 --- a/packages/kbn-es/src/cluster_exec_options.ts +++ b/packages/kbn-es/src/cluster_exec_options.ts @@ -10,7 +10,7 @@ export interface EsClusterExecOptions { skipNativeRealmSetup?: boolean; reportTime?: (...args: any[]) => void; startTime?: number; - esArgs?: string[]; + esArgs?: string[] | string; esJavaOpts?: string; password?: string; skipReadyCheck?: boolean; diff --git a/packages/kbn-es/src/utils/docker.test.ts b/packages/kbn-es/src/utils/docker.test.ts new file mode 100644 index 00000000000000..ef978fe76c4098 --- /dev/null +++ b/packages/kbn-es/src/utils/docker.test.ts @@ -0,0 +1,370 @@ +/* + * Copyright 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 mockFs from 'mock-fs'; + +import { existsSync } from 'fs'; +import { stat } from 'fs/promises'; + +import { + DOCKER_IMG, + maybeCreateDockerNetwork, + resolveDockerCmd, + resolveDockerImage, + resolveEsArgs, + runDockerContainer, + runServerlessCluster, + runServerlessEsNode, + SERVERLESS_IMG, + setupServerlessVolumes, + verifyDockerInstalled, +} from './docker'; +import { ToolingLog, ToolingLogCollectingWriter } from '@kbn/tooling-log'; + +jest.mock('execa'); +const execa = jest.requireMock('execa'); + +const log = new ToolingLog(); +const logWriter = new ToolingLogCollectingWriter(); +log.setWriters([logWriter]); + +const KIBANA_ROOT = process.cwd(); +const baseEsPath = `${KIBANA_ROOT}/.es`; +const serverlessDir = 'stateless'; +const serverlessObjectStorePath = `${baseEsPath}/${serverlessDir}`; + +beforeEach(() => { + jest.resetAllMocks(); + log.indent(-log.getIndent()); + logWriter.messages.length = 0; + + // jest relies on the filesystem to get sourcemaps when using console.log + // which breaks with the mocked FS, see https://github.com/tschaub/mock-fs/issues/234 + // hijacking logging to process.stdout as a workaround for this suite. + jest.spyOn(console, 'log').mockImplementation((...args) => { + process.stdout.write(args + '\n'); + }); +}); + +afterEach(() => { + mockFs.restore(); + // restore the console.log behavior + jest.clearAllMocks(); +}); + +const volumeCmdTest = async (volumeCmd: string[]) => { + expect(volumeCmd).toHaveLength(2); + expect(volumeCmd).toEqual(expect.arrayContaining(['--volume', `${baseEsPath}:/objectstore:z`])); + + // extract only permission from mode + // eslint-disable-next-line no-bitwise + expect((await stat(serverlessObjectStorePath)).mode & 0o777).toBe(0o766); +}; + +describe('resolveDockerImage()', () => { + const defaultRepo = 'another/repo'; + const defaultImg = 'default/reg/repo:tag'; + const tag = '8.8.2'; + + test('should return default image when no options', () => { + const image = resolveDockerImage({ repo: defaultRepo, defaultImg }); + + expect(image).toEqual(defaultImg); + }); + + test('should return tag with default repo when tag is passed', () => { + const image = resolveDockerImage({ repo: defaultRepo, tag, defaultImg }); + + expect(image).toMatchInlineSnapshot(`"another/repo:8.8.2"`); + }); + + test('should return image when tag is also passed', () => { + const image = resolveDockerImage({ repo: defaultRepo, tag, image: DOCKER_IMG, defaultImg }); + + expect(image).toEqual(DOCKER_IMG); + }); + + test('should error when invalid registry is passed', () => { + expect(() => + resolveDockerImage({ + repo: defaultRepo, + tag, + image: 'another.registry.co/es/es:latest', + defaultImg, + }) + ).toThrowErrorMatchingInlineSnapshot(` + "Only verified images from docker.elastic.co are currently allowed. + If you require this functionality in @kbn/es please contact the Kibana Operations Team." + `); + }); +}); + +describe('verifyDockerInstalled()', () => { + test('should call the correct Docker command and log the version', async () => { + execa.mockImplementationOnce(() => Promise.resolve({ stdout: 'Docker Version 123' })); + + await verifyDockerInstalled(log); + + expect(execa.mock.calls).toMatchInlineSnapshot(` + Array [ + Array [ + "docker", + Array [ + "--version", + ], + ], + ] + `); + + expect(logWriter.messages).toMatchInlineSnapshot(` + Array [ + " info Verifying Docker is installed.", + " │ info Docker Version 123", + ] + `); + }); + + test('should reject when Docker is not installed', async () => { + execa.mockImplementationOnce(() => Promise.reject({ message: 'Hello World' })); + + await expect(verifyDockerInstalled(log)).rejects.toThrowErrorMatchingInlineSnapshot(` + "Docker not found locally. Install it from: https://www.docker.com + + Hello World" + `); + }); +}); + +describe('maybeCreateDockerNetwork()', () => { + test('should call the correct Docker command and create the network if needed', async () => { + execa.mockImplementationOnce(() => Promise.resolve({ exitCode: 0 })); + + await maybeCreateDockerNetwork(log); + + expect(execa.mock.calls).toMatchInlineSnapshot(` + Array [ + Array [ + "docker", + Array [ + "network", + "create", + "elastic", + ], + ], + ] + `); + + expect(logWriter.messages).toMatchInlineSnapshot(` + Array [ + " info Checking status of elastic Docker network.", + " │ info Created new network.", + ] + `); + }); + + test('should use an existing network', async () => { + execa.mockImplementationOnce(() => + Promise.reject({ message: 'network with name elastic already exists' }) + ); + + await maybeCreateDockerNetwork(log); + + expect(logWriter.messages).toMatchInlineSnapshot(` + Array [ + " info Checking status of elastic Docker network.", + " │ info Using existing network.", + ] + `); + }); + + test('should reject for any other Docker error', async () => { + execa.mockImplementationOnce(() => Promise.reject({ message: 'some error' })); + + await expect(maybeCreateDockerNetwork(log)).rejects.toThrowErrorMatchingInlineSnapshot( + `"some error"` + ); + }); +}); + +describe('resolveEsArgs()', () => { + const defaultEsArgs: Array<[string, string]> = [ + ['foo', 'bar'], + ['qux', 'zip'], + ]; + + test('should return default args when no options', () => { + const esArgs = resolveEsArgs(defaultEsArgs, {}); + + expect(esArgs).toHaveLength(4); + expect(esArgs).toMatchInlineSnapshot(` + Array [ + "--env", + "foo=bar", + "--env", + "qux=zip", + ] + `); + }); + + test('should override default args when options is a string', () => { + const esArgs = resolveEsArgs(defaultEsArgs, { esArgs: 'foo=true' }); + + expect(esArgs).toHaveLength(4); + expect(esArgs).toMatchInlineSnapshot(` + Array [ + "--env", + "foo=true", + "--env", + "qux=zip", + ] + `); + }); + + test('should override default args when options is an array', () => { + const esArgs = resolveEsArgs(defaultEsArgs, { esArgs: ['foo=false', 'qux=true'] }); + + expect(esArgs).toHaveLength(4); + expect(esArgs).toMatchInlineSnapshot(` + Array [ + "--env", + "foo=false", + "--env", + "qux=true", + ] + `); + }); + + test('should override defaults args and handle password option', () => { + const esArgs = resolveEsArgs(defaultEsArgs, { esArgs: 'foo=false', password: 'hello' }); + + expect(esArgs).toHaveLength(6); + expect(esArgs).toMatchInlineSnapshot(` + Array [ + "--env", + "foo=false", + "--env", + "qux=zip", + "--env", + "ELASTIC_PASSWORD=hello", + ] + `); + }); +}); + +describe('setupServerlessVolumes()', () => { + const existingObjectStore = { + [baseEsPath]: { + [serverlessDir]: { + cluster_state: { 0: {}, 1: {}, lease: 'hello world' }, + }, + }, + }; + + test('should create stateless directory and return volume docker command', async () => { + mockFs({ + [baseEsPath]: {}, + }); + + const volumeCmd = await setupServerlessVolumes(log, { basePath: baseEsPath }); + + volumeCmdTest(volumeCmd); + expect(existsSync(serverlessObjectStorePath)).toBe(true); + }); + + test('should use an existing object store', async () => { + mockFs(existingObjectStore); + + const volumeCmd = await setupServerlessVolumes(log, { basePath: baseEsPath }); + + volumeCmdTest(volumeCmd); + expect(existsSync(`${serverlessObjectStorePath}/cluster_state/lease`)).toBe(true); + }); + + test('should remove an existing object store when clean is passed', async () => { + mockFs(existingObjectStore); + + const volumeCmd = await setupServerlessVolumes(log, { basePath: baseEsPath, clean: true }); + + volumeCmdTest(volumeCmd); + expect(existsSync(`${serverlessObjectStorePath}/cluster_state/lease`)).toBe(false); + }); +}); + +describe('runServerlessEsNode()', () => { + const node = { + params: ['--env', 'foo=bar', '--volume', 'foo/bar'], + name: 'es01', + image: SERVERLESS_IMG, + }; + + test('should call the correct Docker command', async () => { + execa.mockImplementationOnce(() => Promise.resolve({ stdout: 'containerId1234' })); + + await runServerlessEsNode(log, node); + + expect(execa.mock.calls[0][0]).toEqual('docker'); + expect(execa.mock.calls[0][1]).toEqual( + expect.arrayContaining([ + SERVERLESS_IMG, + ...node.params, + '--name', + node.name, + '--env', + `node.name=${node.name}`, + 'run', + '--detach', + '--net', + 'elastic', + ]) + ); + }); +}); + +describe('runServerlessCluster()', () => { + test('should start 3 serverless nodes', async () => { + mockFs({ + [baseEsPath]: {}, + }); + execa.mockImplementation(() => Promise.resolve({ stdout: '' })); + + await runServerlessCluster(log, { basePath: baseEsPath }); + + // Verify Docker and network then run three nodes + expect(execa.mock.calls).toHaveLength(5); + }); +}); + +describe('resolveDockerCmd()', () => { + test('should return default command when no options', () => { + const dockerCmd = resolveDockerCmd({}); + + expect(dockerCmd).toEqual(expect.arrayContaining(['run', DOCKER_IMG])); + }); + + test('should return custom command when passed', () => { + const dockerCmd = resolveDockerCmd({ dockerCmd: 'start -a es01' }); + + expect(dockerCmd).toHaveLength(3); + expect(dockerCmd).toMatchInlineSnapshot(` + Array [ + "start", + "-a", + "es01", + ] + `); + }); +}); + +describe('runDockerContainer()', () => { + test('should resolve', async () => { + execa.mockImplementation(() => Promise.resolve({ stdout: '' })); + + await expect(runDockerContainer(log, {})).resolves.toEqual({ stdout: '' }); + // Verify Docker and network then run container + expect(execa.mock.calls).toHaveLength(3); + }); +}); diff --git a/packages/kbn-es/src/utils/docker.ts b/packages/kbn-es/src/utils/docker.ts new file mode 100644 index 00000000000000..6552545e10a3ed --- /dev/null +++ b/packages/kbn-es/src/utils/docker.ts @@ -0,0 +1,398 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import chalk from 'chalk'; +import execa from 'execa'; +import fs from 'fs'; +import Fsp from 'fs/promises'; +import { resolve } from 'path'; + +import { ToolingLog } from '@kbn/tooling-log'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; + +import { createCliError } from '../errors'; +import { EsClusterExecOptions } from '../cluster_exec_options'; + +interface BaseOptions { + tag?: string; + image?: string; +} + +export interface DockerOptions extends EsClusterExecOptions, BaseOptions { + dockerCmd?: string; +} + +export interface ServerlessOptions extends EsClusterExecOptions, BaseOptions { + clean?: boolean; + basePath: string; +} + +interface ServerlessEsNodeArgs { + esArgs?: Array<[string, string]>; + image: string; + name: string; + params: string[]; +} + +const DOCKER_REGISTRY = 'docker.elastic.co'; + +const DOCKER_BASE_CMD = [ + 'run', + + '--rm', + + '-t', + + '--net', + 'elastic', + + '--name', + 'es01', + + '-p', + '127.0.0.1:9200:9200', + + '-p', + '127.0.0.1:9300:9300', +]; + +const DEFAULT_DOCKER_ESARGS: Array<[string, string]> = [ + ['ES_JAVA_OPTS', '-Xms1536m -Xmx1536m'], + + ['ES_LOG_STYLE', 'file'], + + ['discovery.type', 'single-node'], + + ['xpack.security.enabled', 'false'], +]; + +export const DOCKER_REPO = `${DOCKER_REGISTRY}/elasticsearch/elasticsearch`; +export const DOCKER_TAG = `${pkg.version}-SNAPSHOT`; +export const DOCKER_IMG = `${DOCKER_REPO}:${DOCKER_TAG}`; + +export const SERVERLESS_REPO = `${DOCKER_REGISTRY}/elasticsearch-ci/elasticsearch-serverless`; +export const SERVERLESS_TAG = 'latest'; +export const SERVERLESS_IMG = `${SERVERLESS_REPO}:${SERVERLESS_TAG}`; + +const SHARED_SERVERLESS_PARAMS = [ + 'run', + + '--rm', + + '--detach', + + '--net', + 'elastic', + + '--env', + 'cluster.initial_master_nodes=es01,es02,es03', + + '--env', + 'stateless.enabled=true', + + '--env', + 'stateless.object_store.type=fs', + + '--env', + 'stateless.object_store.bucket=stateless', + + '--env', + 'path.repo=/objectstore', +]; + +// only allow certain ES args to be overwrote by options +const DEFAULT_SERVERLESS_ESARGS: Array<[string, string]> = [ + ['ES_JAVA_OPTS', '-Xms1g -Xmx1g'], + + ['xpack.security.enabled', 'false'], + + ['cluster.name', 'stateless'], +]; + +const SERVERLESS_NODES: Array> = [ + { + name: 'es01', + params: [ + '-p', + '127.0.0.1:9200:9200', + + '-p', + '127.0.0.1:9300:9300', + + '--env', + 'discovery.seed_hosts=es02,es03', + + '--env', + 'node.roles=["master","index"]', + ], + esArgs: [['xpack.searchable.snapshot.shared_cache.size', '1gb']], + }, + { + name: 'es02', + params: [ + '-p', + '127.0.0.1:9202:9202', + + '-p', + '127.0.0.1:9302:9302', + + '--env', + 'discovery.seed_hosts=es01,es03', + + '--env', + 'node.roles=["master","search"]', + ], + esArgs: [['xpack.searchable.snapshot.shared_cache.size', '1gb']], + }, + { + name: 'es03', + params: [ + '-p', + '127.0.0.1:9203:9203', + + '-p', + '127.0.0.1:9303:9303', + + '--env', + 'discovery.seed_hosts=es01,es02', + + '--env', + 'node.roles=["master"]', + ], + }, +]; + +/** + * Determine the Docker image from CLI options and defaults + */ +export function resolveDockerImage({ + tag, + image, + repo, + defaultImg, +}: (ServerlessOptions | DockerOptions) & { repo: string; defaultImg: string }) { + if (image) { + if (!image.includes(DOCKER_REGISTRY)) { + throw createCliError( + `Only verified images from ${DOCKER_REGISTRY} are currently allowed.\nIf you require this functionality in @kbn/es please contact the Kibana Operations Team.` + ); + } + + return image; + } else if (tag) { + return `${repo}:${tag}`; + } + + return defaultImg; +} + +/** + * Verify that Docker is installed locally + */ +export async function verifyDockerInstalled(log: ToolingLog) { + log.info(chalk.bold('Verifying Docker is installed.')); + + const { stdout } = await execa('docker', ['--version']).catch(({ message }) => { + throw createCliError( + `Docker not found locally. Install it from: https://www.docker.com\n\n${message}` + ); + }); + + log.indent(4, () => log.info(stdout)); +} + +/** + * Setup elastic Docker network if needed + */ +export async function maybeCreateDockerNetwork(log: ToolingLog) { + log.info(chalk.bold('Checking status of elastic Docker network.')); + log.indent(4); + + const process = await execa('docker', ['network', 'create', 'elastic']).catch(({ message }) => { + if (message.includes('network with name elastic already exists')) { + log.info('Using existing network.'); + } else { + throw createCliError(message); + } + }); + + if (process?.exitCode === 0) { + log.info('Created new network.'); + } + + log.indent(-4); +} + +/** + * Common setup for Docker and Serverless containers + */ +async function setupDocker(log: ToolingLog) { + await verifyDockerInstalled(log); + await maybeCreateDockerNetwork(log); +} + +/** + * Override default esArgs with options.esArgs + */ +export function resolveEsArgs( + defaultEsArgs: Array<[string, string]>, + options: ServerlessOptions | DockerOptions +) { + const esArgs = new Map(defaultEsArgs); + + if (options.esArgs) { + const args = typeof options.esArgs === 'string' ? [options.esArgs] : options.esArgs; + + args.forEach((arg) => { + const [key, ...value] = arg.split('='); + esArgs.set(key.trim(), value.join('=').trim()); + }); + } + + if (options.password) { + esArgs.set('ELASTIC_PASSWORD', options.password); + } + + return Array.from(esArgs).flatMap((e) => ['--env', e.join('=')]); +} + +/** + * Setup local volumes for Serverless ES + */ +export async function setupServerlessVolumes(log: ToolingLog, options: ServerlessOptions) { + const volumePath = resolve(options.basePath, 'stateless'); + + log.info(chalk.bold(`Checking for local Serverless ES object store at ${volumePath}`)); + log.indent(4); + + if (options.clean && fs.existsSync(volumePath)) { + log.info('Cleaning existing object store.'); + await Fsp.rm(volumePath, { recursive: true, force: true }); + } + + if (options.clean || !fs.existsSync(volumePath)) { + await Fsp.mkdir(volumePath, { recursive: true }).then(() => + log.info('Created new object store.') + ); + } else { + log.info('Using existing object store.'); + } + + // Permissions are set separately from mkdir due to default umask + await Fsp.chmod(volumePath, 0o766).then(() => + log.info('Setup object store permissions (chmod 766).') + ); + + log.indent(-4); + + return ['--volume', `${options.basePath}:/objectstore:z`]; +} + +/** + * Resolve the Serverless ES image based on defaults and CLI options + */ +function getServerlessImage(options: ServerlessOptions) { + return resolveDockerImage({ + ...options, + repo: SERVERLESS_REPO, + defaultImg: SERVERLESS_IMG, + }); +} + +/** + * Run a single node in the ES Serverless cluster + */ +export async function runServerlessEsNode( + log: ToolingLog, + { params, name, image }: ServerlessEsNodeArgs +) { + const dockerCmd = SHARED_SERVERLESS_PARAMS.concat( + params, + ['--name', name, '--env', `node.name=${name}`], + image + ); + + log.info(chalk.bold(`Running Serverless ES node: ${name}`)); + log.indent(4, () => log.info(chalk.dim(`docker ${dockerCmd.join(' ')}`))); + + const { stdout } = await execa('docker', dockerCmd); + + log.indent(4, () => + log.info(`${name} is running. + Container Name: ${name} + Container Id: ${stdout} + + View logs: ${chalk.bold(`docker logs -f ${name}`)} + Shell access: ${chalk.bold(`docker exec -it ${name} /bin/bash`)} +`) + ); +} + +/** + * Runs an ES Serverless Cluster through Docker + */ +export async function runServerlessCluster(log: ToolingLog, options: ServerlessOptions) { + await setupDocker(log); + + const volumeCmd = await setupServerlessVolumes(log, options); + const image = getServerlessImage(options); + + const nodeNames = await Promise.all( + SERVERLESS_NODES.map(async (node) => { + await runServerlessEsNode(log, { + ...node, + image, + params: node.params.concat( + resolveEsArgs(DEFAULT_SERVERLESS_ESARGS.concat(node.esArgs ?? []), options), + volumeCmd + ), + }); + return node.name; + }) + ); + + log.success(`Serverless ES cluster running. + Stop the cluster: ${chalk.bold(`docker container stop ${nodeNames.join(' ')}`)} + `); +} + +/** + * Resolve the Elasticsearch image based on defaults and CLI options + */ +function getDockerImage(options: DockerOptions) { + return resolveDockerImage({ ...options, repo: DOCKER_REPO, defaultImg: DOCKER_IMG }); +} + +/** + * Resolve the full command to run Elasticsearch Docker container + */ +export function resolveDockerCmd(options: DockerOptions) { + if (options.dockerCmd) { + return options.dockerCmd.split(' '); + } + + return DOCKER_BASE_CMD.concat( + resolveEsArgs(DEFAULT_DOCKER_ESARGS, options), + getDockerImage(options) + ); +} + +/** + * + * Runs an Elasticsearch Docker Container + */ +export async function runDockerContainer(log: ToolingLog, options: DockerOptions) { + await setupDocker(log); + + const dockerCmd = resolveDockerCmd(options); + + log.info(chalk.dim(`docker ${dockerCmd.join(' ')}`)); + return await execa('docker', dockerCmd, { + // inherit is required to show Docker pull output and Java console output for pw, enrollment token, etc + stdio: ['ignore', 'inherit', 'inherit'], + }); +} diff --git a/packages/kbn-es/src/utils/index.ts b/packages/kbn-es/src/utils/index.ts index 79a57846cc00a7..25591a786603ce 100644 --- a/packages/kbn-es/src/utils/index.ts +++ b/packages/kbn-es/src/utils/index.ts @@ -16,3 +16,4 @@ export { NativeRealm, SYSTEM_INDICES_SUPERUSER } from './native_realm'; export { buildSnapshot } from './build_snapshot'; export { archiveForPlatform } from './build_snapshot'; export * from './parse_timeout_to_ms'; +export * from './docker'; diff --git a/packages/kbn-es/tsconfig.json b/packages/kbn-es/tsconfig.json index 95253080f47be1..deece402b37941 100644 --- a/packages/kbn-es/tsconfig.json +++ b/packages/kbn-es/tsconfig.json @@ -16,5 +16,6 @@ "@kbn/dev-proc-runner", "@kbn/ci-stats-reporter", "@kbn/jest-serializers", + "@kbn/repo-info", ] } From 09ed3fc8a054dda5e88bc29c6c0183611143af68 Mon Sep 17 00:00:00 2001 From: Jeramy Soucy Date: Wed, 26 Jul 2023 14:27:38 -0400 Subject: [PATCH 15/58] Bump @elastic/request-crypto v2.0.1 -> v2.0.2 (#162532) ## Summary Upgrades @elastic/request-crypto from 2.0.1 to 2.0.2. --- package.json | 2 +- yarn.lock | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 564b38c8cce305..889b60b621b89b 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "@elastic/numeral": "^2.5.1", "@elastic/react-search-ui": "^1.20.2", "@elastic/react-search-ui-views": "^1.20.2", - "@elastic/request-crypto": "2.0.1", + "@elastic/request-crypto": "2.0.2", "@elastic/search-ui": "^1.20.2", "@elastic/search-ui-app-search-connector": "^1.20.2", "@elastic/search-ui-engines-connector": "^1.20.2", diff --git a/yarn.lock b/yarn.lock index 598254d38bd360..39a0d3f1183bb7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1649,14 +1649,14 @@ "@elastic/react-search-ui-views" "1.20.2" "@elastic/search-ui" "1.20.2" -"@elastic/request-crypto@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@elastic/request-crypto/-/request-crypto-2.0.1.tgz#88dc41e4bbba6764c323e1a820757607e2f4f720" - integrity sha512-ZFZ+CF1hb22+BLAe93D4Kc1EMPfVDKckd8SY6IHk/N4H1WUthQ9xXfPVx06r+pTkz62HliyQfXgLKFTQa+aSmw== +"@elastic/request-crypto@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@elastic/request-crypto/-/request-crypto-2.0.2.tgz#4e5216783be82371012857a76da75195828d3f45" + integrity sha512-DdTMs4ZZKo9Hl6XNHmR8eOuooImpvQp/+4Wzkzw1VdSR+bBsDa8TT6UrIuCgl5n6WI/WujjTneLTKmtSYm+HpA== dependencies: "@elastic/node-crypto" "1.1.1" "@types/node-jose" "1.1.10" - node-jose "2.1.0" + node-jose "2.2.0" "@elastic/search-ui-app-search-connector@^1.20.2": version "1.20.2" @@ -21943,10 +21943,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-jose@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-jose/-/node-jose-2.1.0.tgz#a2d12a7ff2d386f23979c1bf77f939449ce073d8" - integrity sha512-Zmm8vFPJabphGBc5Wz1/LUMPS+1cynqw16RIhgVNQMEI2yEQrvl7Gx2EwN9GhP8tkm8f7SH53K2nIx8TeNTIdg== +node-jose@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-jose/-/node-jose-2.2.0.tgz#b64f3225ad6bec328509a420800de597ba2bf3ed" + integrity sha512-XPCvJRr94SjLrSIm4pbYHKLEaOsDvJCpyFw/6V/KK/IXmyZ6SFBzAUDO9HQf4DB/nTEFcRGH87mNciOP23kFjw== dependencies: base64url "^3.0.1" buffer "^6.0.3" @@ -21956,7 +21956,7 @@ node-jose@2.1.0: node-forge "^1.2.1" pako "^2.0.4" process "^0.11.10" - uuid "^8.3.2" + uuid "^9.0.0" node-libs-browser@^2.2.1: version "2.2.1" @@ -28592,7 +28592,7 @@ uuid-browser@^3.1.0: resolved "https://registry.yarnpkg.com/uuid-browser/-/uuid-browser-3.1.0.tgz#0f05a40aef74f9e5951e20efbf44b11871e56410" integrity sha1-DwWkCu90+eWVHiDvv0SxGHHlZBA= -uuid@9.0.0, uuid@^9: +uuid@9.0.0, uuid@^9, uuid@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== From 4654a5244de85acd9fc2655a73f25293c3b06f0a Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Wed, 26 Jul 2023 21:29:13 +0300 Subject: [PATCH 16/58] [Cloud Security] AWS Organization form (#162571) --- .../policy_template_form.test.tsx | 16 ++++-- .../fleet_extensions/policy_template_form.tsx | 56 ++++++++++++++----- 2 files changed, 52 insertions(+), 20 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx index 71b8b430857a8d..aa1a26fbeea7f2 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx @@ -6,7 +6,11 @@ */ import React from 'react'; import { render } from '@testing-library/react'; -import { CspPolicyTemplateForm } from './policy_template_form'; +import { + CspPolicyTemplateForm, + AWS_ORGANIZATION_ACCOUNT, + AWS_SINGLE_ACCOUNT, +} from './policy_template_form'; import { TestProvider } from '../../test/test_provider'; import { getMockPackageInfoCspmAWS, @@ -712,10 +716,10 @@ describe('', () => { }); describe('AWS Credentials input fields', () => { - it(`renders ${CLOUDBEAT_AWS} Account Type field`, () => { + it(`renders ${CLOUDBEAT_AWS} Account Type field, AWS Organization is enabled for supported versions`, () => { let policy = getMockPolicyAWS(); policy = getPosturePolicy(policy, CLOUDBEAT_AWS, { - 'aws.account_type': { value: 'single_account' }, + 'aws.account_type': { value: AWS_ORGANIZATION_ACCOUNT }, }); const { getByLabelText } = render( @@ -724,13 +728,14 @@ describe('', () => { expect(getByLabelText('Single Account')).toBeInTheDocument(); expect(getByLabelText('AWS Organization')).toBeInTheDocument(); + expect(getByLabelText('AWS Organization')).toBeEnabled(); }); it(`${CLOUDBEAT_AWS} form displays upgrade message for unsupported versions and aws organization option is disabled`, () => { let policy = getMockPolicyAWS(); policy = getPosturePolicy(policy, CLOUDBEAT_AWS, { 'aws.credentials.type': { value: 'cloud_formation' }, - 'aws.account_type': { value: 'single_account' }, + 'aws.account_type': { value: AWS_SINGLE_ACCOUNT }, }); const { getByText, getByLabelText } = render( @@ -743,13 +748,14 @@ describe('', () => { ) ).toBeInTheDocument(); expect(getByLabelText('AWS Organization')).toBeDisabled(); + expect(getByLabelText('Single Account')).toBeEnabled(); }); it(`${CLOUDBEAT_AWS} form do not displays upgrade message for supported versions and aws organization option is enabled`, () => { let policy = getMockPolicyAWS(); policy = getPosturePolicy(policy, CLOUDBEAT_AWS, { 'aws.credentials.type': { value: 'cloud_formation' }, - 'aws.account_type': { value: 'single_account' }, + 'aws.account_type': { value: AWS_ORGANIZATION_ACCOUNT }, }); const { queryByText, getByLabelText } = render( diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx index c83c2844f68f4d..5242de03a00584 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { memo, useCallback, useEffect, useState } from 'react'; +import React, { memo, useCallback, useEffect, useMemo, useState } from 'react'; import semverCompare from 'semver/functions/compare'; import semverValid from 'semver/functions/valid'; import { @@ -79,17 +79,13 @@ interface IntegrationInfoFieldsProps { onChange(field: string, value: string): void; } -type AwsAccountType = 'single_account' | 'organization_account'; +export const AWS_SINGLE_ACCOUNT = 'single-account'; +export const AWS_ORGANIZATION_ACCOUNT = 'organization-account'; +type AwsAccountType = typeof AWS_SINGLE_ACCOUNT | typeof AWS_ORGANIZATION_ACCOUNT; const getAwsAccountTypeOptions = (isAwsOrgDisabled: boolean): CspRadioGroupProps['options'] => [ { - id: 'single_account', - label: i18n.translate('xpack.csp.fleetIntegration.awsAccountType.singleAccountLabel', { - defaultMessage: 'Single Account', - }), - }, - { - id: 'organization_account', + id: AWS_ORGANIZATION_ACCOUNT, label: i18n.translate('xpack.csp.fleetIntegration.awsAccountType.awsOrganizationLabel', { defaultMessage: 'AWS Organization', }), @@ -100,13 +96,19 @@ const getAwsAccountTypeOptions = (isAwsOrgDisabled: boolean): CspRadioGroupProps }) : undefined, }, + { + id: AWS_SINGLE_ACCOUNT, + label: i18n.translate('xpack.csp.fleetIntegration.awsAccountType.singleAccountLabel', { + defaultMessage: 'Single Account', + }), + }, ]; const getAwsAccountType = ( input: Extract ): AwsAccountType | undefined => input.streams[0].vars?.['aws.account_type']?.value; -const AWS_ORG_MINIMUM_PACKAGE_VERSION = '1.5.0'; +const AWS_ORG_MINIMUM_PACKAGE_VERSION = '1.5.0-preview20'; const AwsAccountTypeSelect = ({ input, @@ -119,28 +121,30 @@ const AwsAccountTypeSelect = ({ updatePolicy: (updatedPolicy: NewPackagePolicy) => void; packageInfo: PackageInfo; }) => { - // This will disable the aws org option for any version LOWER than 1.5.0 + // This will disable the aws org option for any version below 1.5.0-preview20 which introduced support for account_type. https://github.com/elastic/integrations/pull/6682 const isValidSemantic = semverValid(packageInfo.version); const isAwsOrgDisabled = isValidSemantic ? semverCompare(packageInfo.version, AWS_ORG_MINIMUM_PACKAGE_VERSION) < 0 : true; - const awsAccountTypeOptions = getAwsAccountTypeOptions(isAwsOrgDisabled); + const awsAccountTypeOptions = useMemo( + () => getAwsAccountTypeOptions(isAwsOrgDisabled), + [isAwsOrgDisabled] + ); useEffect(() => { if (!getAwsAccountType(input)) { updatePolicy( getPosturePolicy(newPolicy, input.type, { 'aws.account_type': { - value: awsAccountTypeOptions[0].id, + value: isAwsOrgDisabled ? AWS_SINGLE_ACCOUNT : AWS_ORGANIZATION_ACCOUNT, type: 'text', }, }) ); } - // we only wish to call this once on mount // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }, [input]); return ( <> @@ -177,6 +181,28 @@ const AwsAccountTypeSelect = ({ }} size="m" /> + {getAwsAccountType(input) === AWS_ORGANIZATION_ACCOUNT && ( + <> + + + + + + )} + {getAwsAccountType(input) === AWS_SINGLE_ACCOUNT && ( + <> + + + + + + )} ); From 07639afa945d71b214bd3f2c7c36ae85bb2928cb Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 26 Jul 2023 16:07:51 -0400 Subject: [PATCH 17/58] skip failing test suite (#162594) --- .../test/api_integration/apis/synthetics/sync_global_params.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/api_integration/apis/synthetics/sync_global_params.ts b/x-pack/test/api_integration/apis/synthetics/sync_global_params.ts index e8182d97e0fee2..d38f4830ee538e 100644 --- a/x-pack/test/api_integration/apis/synthetics/sync_global_params.ts +++ b/x-pack/test/api_integration/apis/synthetics/sync_global_params.ts @@ -21,7 +21,8 @@ import { PrivateLocationTestService } from './services/private_location_test_ser import { comparePolicies, getTestSyntheticsPolicy } from './sample_data/test_policy'; export default function ({ getService }: FtrProviderContext) { - describe('SyncGlobalParams', function () { + // Failing: See https://github.com/elastic/kibana/issues/162594 + describe.skip('SyncGlobalParams', function () { this.tags('skipCloud'); const supertestAPI = getService('supertest'); const kServer = getService('kibanaServer'); From 028457b2196f5d19d11a6c568bf8c5cc084a916a Mon Sep 17 00:00:00 2001 From: Alexi Doak <109488926+doakalexi@users.noreply.github.com> Date: Wed, 26 Jul 2023 16:34:03 -0400 Subject: [PATCH 18/58] =?UTF-8?q?[ResponseOps][Alerting]=20Flaky=20test=20?= =?UTF-8?q?x-pack/test/alerting=5Fapi=5Fintegration/spaces=5Fonly/tests/al?= =?UTF-8?q?erting/group3/builtin=5Falert=5Ftypes/es=5Fquery/rule=C2=B7ts?= =?UTF-8?q?=20(#162579)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves https://github.com/elastic/kibana/issues/154073 ## Summary Fixes ES query flaky test https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/2723 x 250 --- .../group3/builtin_alert_types/es_query/rule.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group3/builtin_alert_types/es_query/rule.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group3/builtin_alert_types/es_query/rule.ts index cf4e8cf17b1453..622e4878a6750a 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group3/builtin_alert_types/es_query/rule.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group3/builtin_alert_types/es_query/rule.ts @@ -40,8 +40,7 @@ export default function ruleTests({ getService }: FtrProviderContext) { createGroupedEsDocumentsInGroups, } = getRuleServices(getService); - // FLAKY: https://github.com/elastic/kibana/issues/154073 - describe.skip('rule', async () => { + describe('rule', async () => { let endDate: string; let connectorId: string; const objectRemover = new ObjectRemover(supertest); @@ -773,11 +772,7 @@ export default function ruleTests({ getService }: FtrProviderContext) { it(`runs correctly and populates recovery context for ${searchType} search type`, async () => { await initData(); - // delay to let rule run once before adding data - await new Promise((resolve) => setTimeout(resolve, 3000)); - await createEsDocumentsInGroups(1, endDate); - - const docs = await waitForDocs(2); + let docs = await waitForDocs(1); const activeDoc = docs[0]; const { name: activeName, @@ -793,6 +788,8 @@ export default function ruleTests({ getService }: FtrProviderContext) { /rule 'fire then recovers' is active:\n\n- Value: \d+\n- Conditions Met: Number of matching documents is less than 1 over 4s\n- Timestamp: \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z\n- Link:/ ); + await createEsDocumentsInGroups(1, endDate); + docs = await waitForDocs(2); const recoveredDoc = docs[1]; const { name: recoveredName, From 6440075a8b2492821d0ee7b533b3fb9b4b5ce7a5 Mon Sep 17 00:00:00 2001 From: Lukas Olson Date: Wed, 26 Jul 2023 14:11:30 -0700 Subject: [PATCH 19/58] Move constants into @kbn/discover-utils (#162360) ## Summary Moves constants from the Discover plugin into the `@kbn/discover-utils` package. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- packages/kbn-discover-utils/index.ts | 21 ++++++++++++++ packages/kbn-discover-utils/package.json | 3 +- packages/kbn-discover-utils/src/constants.ts | 29 +++++++++++++++++++ packages/kbn-discover-utils/src/index.ts | 1 + .../field_list_sidebar.tsx | 4 +-- packages/kbn-unified-field-list/tsconfig.json | 1 + src/plugins/discover/common/index.ts | 21 -------------- .../with_discover_services.tsx | 2 +- .../discover/public/__mocks__/config.ts | 2 +- .../discover/public/__mocks__/services.ts | 2 +- .../discover/public/__mocks__/ui_settings.ts | 2 +- .../application/context/context_app.tsx | 2 +- .../context/context_app_content.tsx | 2 +- .../hooks/use_context_app_fetch.test.tsx | 2 +- .../context/hooks/use_context_app_fetch.tsx | 2 +- .../context/hooks/use_context_app_state.ts | 2 +- .../context/services/context_state.test.ts | 2 +- .../application/doc/components/doc.test.tsx | 2 +- .../document_explorer_callout.tsx | 2 +- .../components/layout/discover_documents.tsx | 14 ++++----- .../components/layout/discover_layout.tsx | 2 +- .../components/top_nav/discover_topnav.tsx | 2 +- .../components/top_nav/on_save_search.tsx | 2 +- .../main/hooks/utils/change_data_view.ts | 2 +- .../services/discover_data_state_container.ts | 2 +- .../application/main/utils/fetch_documents.ts | 3 +- .../main/utils/get_state_defaults.ts | 8 ++--- .../main/utils/update_search_source.ts | 2 +- .../discover_grid/discover_grid.tsx | 10 +++---- .../discover_grid/get_render_cell_value.tsx | 3 +- .../components/doc_table/actions/columns.ts | 2 +- .../table_header/table_header.test.tsx | 2 +- .../components/table_header/table_header.tsx | 2 +- .../doc_table/components/table_row.test.tsx | 2 +- .../doc_table/components/table_row.tsx | 2 +- .../doc_table/doc_table_embeddable.tsx | 3 +- .../doc_table/doc_table_infinite.tsx | 2 +- .../doc_table/doc_table_wrapper.tsx | 3 +- .../view_mode_toggle/view_mode_toggle.tsx | 2 +- .../discover/public/embeddable/constants.ts | 2 +- .../saved_search_embeddable.test.ts | 2 +- .../embeddable/saved_search_embeddable.tsx | 16 +++++----- .../embeddable/view_saved_search_action.ts | 2 +- .../public/hooks/use_es_doc_search.test.tsx | 6 ++-- .../public/hooks/use_es_doc_search.ts | 3 +- .../public/hooks/use_row_heights_options.ts | 2 +- src/plugins/discover/public/plugin.tsx | 2 +- .../components/doc_viewer_source/source.tsx | 2 +- .../doc_viewer_table/legacy/table.tsx | 2 +- .../components/doc_viewer_table/table.tsx | 2 +- .../public/utils/get_sharing_data.test.ts | 2 +- .../discover/public/utils/get_sharing_data.ts | 10 +++---- .../public/utils/rows_per_page.test.ts | 2 +- .../discover/public/utils/rows_per_page.ts | 2 +- .../discover/public/utils/sorting/get_sort.ts | 2 +- .../discover/public/utils/state_helpers.ts | 2 +- .../locator/columns_from_locator.test.ts | 3 +- .../server/locator/columns_from_locator.ts | 7 ++--- .../locator/searchsource_from_locator.test.ts | 3 +- .../server/locator/title_from_locator.test.ts | 3 +- src/plugins/discover/server/ui_settings.ts | 2 +- .../expression_types/embeddable_types.ts | 2 +- x-pack/plugins/canvas/kibana.jsonc | 1 - x-pack/plugins/canvas/tsconfig.json | 1 + 64 files changed, 142 insertions(+), 115 deletions(-) create mode 100644 packages/kbn-discover-utils/src/constants.ts diff --git a/packages/kbn-discover-utils/index.ts b/packages/kbn-discover-utils/index.ts index bc29d27636495d..dae9c268f80db6 100644 --- a/packages/kbn-discover-utils/index.ts +++ b/packages/kbn-discover-utils/index.ts @@ -7,6 +7,27 @@ */ export { + CONTEXT_DEFAULT_SIZE_SETTING, + CONTEXT_STEP_SETTING, + CONTEXT_TIE_BREAKER_FIELDS_SETTING, + DEFAULT_COLUMNS_SETTING, + DOC_HIDE_TIME_COLUMN_SETTING, + DOC_TABLE_LEGACY, + ENABLE_SQL, + FIELDS_LIMIT_SETTING, + HIDE_ANNOUNCEMENTS, + MAX_DOC_FIELDS_DISPLAYED, + MODIFY_COLUMNS_ON_SWITCH, + ROW_HEIGHT_OPTION, + SAMPLE_ROWS_PER_PAGE_SETTING, + SAMPLE_SIZE_SETTING, + SEARCH_EMBEDDABLE_TYPE, + SEARCH_FIELDS_FROM_SOURCE, + SEARCH_ON_PAGE_LOAD_SETTING, + SHOW_FIELD_STATISTICS, + SHOW_MULTIFIELDS, + SORT_DEFAULT_ORDER_SETTING, + TRUNCATE_MAX_HEIGHT, IgnoredReason, buildDataTableRecord, buildDataTableRecordList, diff --git a/packages/kbn-discover-utils/package.json b/packages/kbn-discover-utils/package.json index 0a3257d65ec586..0b52bb98d633fb 100644 --- a/packages/kbn-discover-utils/package.json +++ b/packages/kbn-discover-utils/package.json @@ -2,5 +2,6 @@ "name": "@kbn/discover-utils", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-discover-utils/src/constants.ts b/packages/kbn-discover-utils/src/constants.ts new file mode 100644 index 00000000000000..60aaf63d9c70e2 --- /dev/null +++ b/packages/kbn-discover-utils/src/constants.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export const CONTEXT_DEFAULT_SIZE_SETTING = 'context:defaultSize'; +export const CONTEXT_STEP_SETTING = 'context:step'; +export const CONTEXT_TIE_BREAKER_FIELDS_SETTING = 'context:tieBreakerFields'; +export const DEFAULT_COLUMNS_SETTING = 'defaultColumns'; +export const DOC_HIDE_TIME_COLUMN_SETTING = 'doc_table:hideTimeColumn'; +export const DOC_TABLE_LEGACY = 'doc_table:legacy'; +export const ENABLE_SQL = 'discover:enableSql'; +export const FIELDS_LIMIT_SETTING = 'fields:popularLimit'; +export const HIDE_ANNOUNCEMENTS = 'hideAnnouncements'; +export const MAX_DOC_FIELDS_DISPLAYED = 'discover:maxDocFieldsDisplayed'; +export const MODIFY_COLUMNS_ON_SWITCH = 'discover:modifyColumnsOnSwitch'; +export const ROW_HEIGHT_OPTION = 'discover:rowHeightOption'; +export const SAMPLE_ROWS_PER_PAGE_SETTING = 'discover:sampleRowsPerPage'; +export const SAMPLE_SIZE_SETTING = 'discover:sampleSize'; +export const SEARCH_EMBEDDABLE_TYPE = 'search'; +export const SEARCH_FIELDS_FROM_SOURCE = 'discover:searchFieldsFromSource'; +export const SEARCH_ON_PAGE_LOAD_SETTING = 'discover:searchOnPageLoad'; +export const SHOW_FIELD_STATISTICS = 'discover:showFieldStatistics'; +export const SHOW_MULTIFIELDS = 'discover:showMultiFields'; +export const SORT_DEFAULT_ORDER_SETTING = 'discover:sort:defaultOrder'; +export const TRUNCATE_MAX_HEIGHT = 'truncate:maxHeight'; diff --git a/packages/kbn-discover-utils/src/index.ts b/packages/kbn-discover-utils/src/index.ts index 5a07d3fceee7ab..abc14f31911fe5 100644 --- a/packages/kbn-discover-utils/src/index.ts +++ b/packages/kbn-discover-utils/src/index.ts @@ -6,5 +6,6 @@ * Side Public License, v 1. */ +export * from './constants'; export * from './hooks'; export * from './utils'; diff --git a/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.tsx b/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.tsx index 8796df69f9d82d..12eb7209cd05a7 100644 --- a/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.tsx +++ b/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.tsx @@ -12,6 +12,7 @@ import { i18n } from '@kbn/i18n'; import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiPageSidebar } from '@elastic/eui'; import { type DataViewField } from '@kbn/data-views-plugin/public'; import { getDataViewFieldSubtypeMulti } from '@kbn/es-query/src/utils'; +import { FIELDS_LIMIT_SETTING, SEARCH_FIELDS_FROM_SOURCE } from '@kbn/discover-utils'; import { FieldList } from '../../components/field_list'; import { FieldListFilters } from '../../components/field_list_filters'; import { FieldListGrouped, type FieldListGroupedProps } from '../../components/field_list_grouped'; @@ -25,9 +26,6 @@ import { INITIAL_SELECTED_FIELDS_RESULT, } from './group_fields'; -const FIELDS_LIMIT_SETTING = 'fields:popularLimit'; -const SEARCH_FIELDS_FROM_SOURCE = 'discover:searchFieldsFromSource'; - export type UnifiedFieldListSidebarCustomizableProps = Pick< UnifiedFieldListItemProps, | 'services' diff --git a/packages/kbn-unified-field-list/tsconfig.json b/packages/kbn-unified-field-list/tsconfig.json index 77edc97585a811..f944471d56a112 100644 --- a/packages/kbn-unified-field-list/tsconfig.json +++ b/packages/kbn-unified-field-list/tsconfig.json @@ -27,6 +27,7 @@ "@kbn/data-view-field-editor-plugin", "@kbn/dom-drag-drop", "@kbn/shared-ux-utility", + "@kbn/discover-utils", ], "exclude": ["target/**/*"] } diff --git a/src/plugins/discover/common/index.ts b/src/plugins/discover/common/index.ts index 7cfec194603dd9..67ef77fdb9dee6 100644 --- a/src/plugins/discover/common/index.ts +++ b/src/plugins/discover/common/index.ts @@ -8,27 +8,6 @@ export const PLUGIN_ID = 'discover'; export const APP_ICON = 'discoverApp'; -export const DEFAULT_COLUMNS_SETTING = 'defaultColumns'; -export const SAMPLE_SIZE_SETTING = 'discover:sampleSize'; -export const SAMPLE_ROWS_PER_PAGE_SETTING = 'discover:sampleRowsPerPage'; -export const SORT_DEFAULT_ORDER_SETTING = 'discover:sort:defaultOrder'; -export const SEARCH_ON_PAGE_LOAD_SETTING = 'discover:searchOnPageLoad'; -export const DOC_HIDE_TIME_COLUMN_SETTING = 'doc_table:hideTimeColumn'; -export const FIELDS_LIMIT_SETTING = 'fields:popularLimit'; -export const CONTEXT_DEFAULT_SIZE_SETTING = 'context:defaultSize'; -export const CONTEXT_STEP_SETTING = 'context:step'; -export const CONTEXT_TIE_BREAKER_FIELDS_SETTING = 'context:tieBreakerFields'; -export const DOC_TABLE_LEGACY = 'doc_table:legacy'; -export const MODIFY_COLUMNS_ON_SWITCH = 'discover:modifyColumnsOnSwitch'; -export const SEARCH_FIELDS_FROM_SOURCE = 'discover:searchFieldsFromSource'; -export const MAX_DOC_FIELDS_DISPLAYED = 'discover:maxDocFieldsDisplayed'; -export const SHOW_FIELD_STATISTICS = 'discover:showFieldStatistics'; -export const SHOW_MULTIFIELDS = 'discover:showMultiFields'; -export const TRUNCATE_MAX_HEIGHT = 'truncate:maxHeight'; -export const ROW_HEIGHT_OPTION = 'discover:rowHeightOption'; -export const SEARCH_EMBEDDABLE_TYPE = 'search'; -export const HIDE_ANNOUNCEMENTS = 'hideAnnouncements'; -export const ENABLE_SQL = 'discover:enableSql'; export { DISCOVER_APP_LOCATOR, DiscoverAppLocatorDefinition } from './locator'; export type { DiscoverAppLocator, DiscoverAppLocatorParams } from './locator'; diff --git a/src/plugins/discover/public/__mocks__/__storybook_mocks__/with_discover_services.tsx b/src/plugins/discover/public/__mocks__/__storybook_mocks__/with_discover_services.tsx index 57dc4e55651ff4..62b04533c2a41d 100644 --- a/src/plugins/discover/public/__mocks__/__storybook_mocks__/with_discover_services.tsx +++ b/src/plugins/discover/public/__mocks__/__storybook_mocks__/with_discover_services.tsx @@ -20,7 +20,7 @@ import { SAMPLE_SIZE_SETTING, SEARCH_FIELDS_FROM_SOURCE, SHOW_MULTIFIELDS, -} from '../../../common'; +} from '@kbn/discover-utils'; import { SIDEBAR_CLOSED_KEY } from '../../application/main/components/layout/discover_layout'; import { LocalStorageMock } from '../local_storage_mock'; import { DiscoverServices } from '../../build_services'; diff --git a/src/plugins/discover/public/__mocks__/config.ts b/src/plugins/discover/public/__mocks__/config.ts index 135ebd3d99f751..1988792bea1a6c 100644 --- a/src/plugins/discover/public/__mocks__/config.ts +++ b/src/plugins/discover/public/__mocks__/config.ts @@ -7,7 +7,7 @@ */ import { IUiSettingsClient } from '@kbn/core/public'; -import { SORT_DEFAULT_ORDER_SETTING } from '../../common'; +import { SORT_DEFAULT_ORDER_SETTING } from '@kbn/discover-utils'; export const configMock = { get: (key: string) => { diff --git a/src/plugins/discover/public/__mocks__/services.ts b/src/plugins/discover/public/__mocks__/services.ts index 8a624a03269368..5aa6b6551bc11c 100644 --- a/src/plugins/discover/public/__mocks__/services.ts +++ b/src/plugins/discover/public/__mocks__/services.ts @@ -22,7 +22,7 @@ import { SORT_DEFAULT_ORDER_SETTING, HIDE_ANNOUNCEMENTS, SEARCH_ON_PAGE_LOAD_SETTING, -} from '../../common'; +} from '@kbn/discover-utils'; import { UI_SETTINGS, calculateBounds, diff --git a/src/plugins/discover/public/__mocks__/ui_settings.ts b/src/plugins/discover/public/__mocks__/ui_settings.ts index 7ef7ad3cf2c819..3a1094ec5dd857 100644 --- a/src/plugins/discover/public/__mocks__/ui_settings.ts +++ b/src/plugins/discover/public/__mocks__/ui_settings.ts @@ -16,7 +16,7 @@ import { SHOW_MULTIFIELDS, SEARCH_FIELDS_FROM_SOURCE, ROW_HEIGHT_OPTION, -} from '../../common'; +} from '@kbn/discover-utils'; export const uiSettingsMock = { get: (key: string) => { diff --git a/src/plugins/discover/public/application/context/context_app.tsx b/src/plugins/discover/public/application/context/context_app.tsx index 311bc3f5ca039b..ef4b70045a9a16 100644 --- a/src/plugins/discover/public/application/context/context_app.tsx +++ b/src/plugins/discover/public/application/context/context_app.tsx @@ -17,7 +17,7 @@ import { useExecutionContext } from '@kbn/kibana-react-plugin/public'; import { generateFilters } from '@kbn/data-plugin/public'; import { i18n } from '@kbn/i18n'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; -import { DOC_TABLE_LEGACY, SEARCH_FIELDS_FROM_SOURCE } from '../../../common'; +import { DOC_TABLE_LEGACY, SEARCH_FIELDS_FROM_SOURCE } from '@kbn/discover-utils'; import { ContextErrorMessage } from './components/context_error_message'; import { LoadingStatus } from './services/context_query_state'; import { AppState, GlobalState, isEqualFilters } from './services/context_state'; diff --git a/src/plugins/discover/public/application/context/context_app_content.tsx b/src/plugins/discover/public/application/context/context_app_content.tsx index 595a3239763cdc..940c426817a968 100644 --- a/src/plugins/discover/public/application/context/context_app_content.tsx +++ b/src/plugins/discover/public/application/context/context_app_content.tsx @@ -14,7 +14,7 @@ import { SortDirection } from '@kbn/data-plugin/public'; import type { SortOrder } from '@kbn/saved-search-plugin/public'; import { CellActionsProvider } from '@kbn/cell-actions'; import type { DataTableRecord } from '@kbn/discover-utils/types'; -import { CONTEXT_STEP_SETTING, DOC_HIDE_TIME_COLUMN_SETTING } from '../../../common'; +import { CONTEXT_STEP_SETTING, DOC_HIDE_TIME_COLUMN_SETTING } from '@kbn/discover-utils'; import { LoadingStatus } from './services/context_query_state'; import { ActionBar } from './components/action_bar/action_bar'; import { DiscoverGrid } from '../../components/discover_grid/discover_grid'; diff --git a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.test.tsx b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.test.tsx index cdbc9cabf9b9ad..f11eedf8e6599c 100644 --- a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.test.tsx +++ b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { act, renderHook } from '@testing-library/react-hooks'; import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock'; -import { CONTEXT_TIE_BREAKER_FIELDS_SETTING } from '../../../../common'; +import { CONTEXT_TIE_BREAKER_FIELDS_SETTING } from '@kbn/discover-utils'; import { DiscoverServices } from '../../../build_services'; import { FailureReason, LoadingStatus } from '../services/context_query_state'; import { ContextAppFetchProps, useContextAppFetch } from './use_context_app_fetch'; diff --git a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx index ef4dfc62a6c0bf..0f7da6d678cfd1 100644 --- a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx +++ b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx @@ -11,7 +11,7 @@ import { MarkdownSimple, toMountPoint, wrapWithTheme } from '@kbn/kibana-react-p import type { DataView } from '@kbn/data-views-plugin/public'; import { SortDirection } from '@kbn/data-plugin/public'; import type { DataTableRecord } from '@kbn/discover-utils/types'; -import { CONTEXT_TIE_BREAKER_FIELDS_SETTING } from '../../../../common'; +import { CONTEXT_TIE_BREAKER_FIELDS_SETTING } from '@kbn/discover-utils'; import { fetchAnchor } from '../services/anchor'; import { fetchSurroundingDocs, SurrDocType } from '../services/context'; import { diff --git a/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts b/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts index ac3a0879d53791..74e4bab053329b 100644 --- a/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts +++ b/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts @@ -8,7 +8,7 @@ import { DataView } from '@kbn/data-views-plugin/common'; import { useEffect, useMemo, useState } from 'react'; -import { CONTEXT_DEFAULT_SIZE_SETTING } from '../../../../common'; +import { CONTEXT_DEFAULT_SIZE_SETTING } from '@kbn/discover-utils'; import { DiscoverServices } from '../../../build_services'; import { AppState, getState, GlobalState } from '../services/context_state'; diff --git a/src/plugins/discover/public/application/context/services/context_state.test.ts b/src/plugins/discover/public/application/context/services/context_state.test.ts index 5a0a1aacbde573..fba653cc32bc13 100644 --- a/src/plugins/discover/public/application/context/services/context_state.test.ts +++ b/src/plugins/discover/public/application/context/services/context_state.test.ts @@ -12,7 +12,7 @@ import { getState } from './context_state'; import { createBrowserHistory, History } from 'history'; import { FilterManager } from '@kbn/data-plugin/public'; import { coreMock } from '@kbn/core/public/mocks'; -import { SEARCH_FIELDS_FROM_SOURCE } from '../../../../common'; +import { SEARCH_FIELDS_FROM_SOURCE } from '@kbn/discover-utils'; import { discoverServiceMock } from '../../../__mocks__/services'; import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; diff --git a/src/plugins/discover/public/application/doc/components/doc.test.tsx b/src/plugins/discover/public/application/doc/components/doc.test.tsx index c9dfdc3b595c01..dc93a5718e1e03 100644 --- a/src/plugins/discover/public/application/doc/components/doc.test.tsx +++ b/src/plugins/discover/public/application/doc/components/doc.test.tsx @@ -13,7 +13,7 @@ import { mountWithIntl } from '@kbn/test-jest-helpers'; import { ReactWrapper } from 'enzyme'; import { findTestSubject } from '@elastic/eui/lib/test'; import { Doc, DocProps } from './doc'; -import { SEARCH_FIELDS_FROM_SOURCE as mockSearchFieldsFromSource } from '../../../../common'; +import { SEARCH_FIELDS_FROM_SOURCE as mockSearchFieldsFromSource } from '@kbn/discover-utils'; import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; diff --git a/src/plugins/discover/public/application/main/components/document_explorer_callout/document_explorer_callout.tsx b/src/plugins/discover/public/application/main/components/document_explorer_callout/document_explorer_callout.tsx index 7d64e9b515a9a5..a18389806f8f93 100644 --- a/src/plugins/discover/public/application/main/components/document_explorer_callout/document_explorer_callout.tsx +++ b/src/plugins/discover/public/application/main/components/document_explorer_callout/document_explorer_callout.tsx @@ -21,8 +21,8 @@ import { } from '@elastic/eui'; import { css } from '@emotion/react'; import { Storage } from '@kbn/kibana-utils-plugin/public'; +import { DOC_TABLE_LEGACY } from '@kbn/discover-utils'; import { useDiscoverServices } from '../../../../hooks/use_discover_services'; -import { DOC_TABLE_LEGACY } from '../../../../../common'; export const CALLOUT_STATE_KEY = 'discover:docExplorerCalloutClosed'; diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx index 6e72857ef2acaf..24b0b6ba9fb898 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx @@ -20,19 +20,19 @@ import { DataView } from '@kbn/data-views-plugin/public'; import { SortOrder } from '@kbn/saved-search-plugin/public'; import { CellActionsProvider } from '@kbn/cell-actions'; import type { DataTableRecord } from '@kbn/discover-utils/types'; -import { useInternalStateSelector } from '../../services/discover_internal_state_container'; -import { useAppStateSelector } from '../../services/discover_app_state_container'; -import { useDiscoverServices } from '../../../../hooks/use_discover_services'; -import { DocViewFilterFn } from '../../../../services/doc_views/doc_views_types'; -import { DiscoverGrid } from '../../../../components/discover_grid/discover_grid'; -import { FetchStatus } from '../../../types'; import { DOC_HIDE_TIME_COLUMN_SETTING, DOC_TABLE_LEGACY, SAMPLE_SIZE_SETTING, SEARCH_FIELDS_FROM_SOURCE, HIDE_ANNOUNCEMENTS, -} from '../../../../../common'; +} from '@kbn/discover-utils'; +import { useInternalStateSelector } from '../../services/discover_internal_state_container'; +import { useAppStateSelector } from '../../services/discover_app_state_container'; +import { useDiscoverServices } from '../../../../hooks/use_discover_services'; +import { DocViewFilterFn } from '../../../../services/doc_views/doc_views_types'; +import { DiscoverGrid } from '../../../../components/discover_grid/discover_grid'; +import { FetchStatus } from '../../../types'; import { useColumns } from '../../../../hooks/use_data_grid_columns'; import { RecordRawType } from '../../services/discover_data_state_container'; import { DiscoverStateContainer } from '../../services/discover_state'; diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx index 09c4206fb6d683..e1172a0e869d56 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx @@ -23,6 +23,7 @@ import classNames from 'classnames'; import { generateFilters } from '@kbn/data-plugin/public'; import { useDragDropContext } from '@kbn/dom-drag-drop'; import { DataViewField, DataViewType } from '@kbn/data-views-plugin/public'; +import { SEARCH_FIELDS_FROM_SOURCE, SHOW_FIELD_STATISTICS } from '@kbn/discover-utils'; import { useSavedSearchInitial } from '../../services/discover_state_provider'; import { DiscoverStateContainer } from '../../services/discover_state'; import { VIEW_MODE } from '../../../../../common/constants'; @@ -33,7 +34,6 @@ import { useDiscoverServices } from '../../../../hooks/use_discover_services'; import { DiscoverNoResults } from '../no_results'; import { LoadingSpinner } from '../loading_spinner/loading_spinner'; import { DiscoverSidebarResponsive } from '../sidebar'; -import { SEARCH_FIELDS_FROM_SOURCE, SHOW_FIELD_STATISTICS } from '../../../../../common'; import { popularizeField } from '../../../../utils/popularize_field'; import { DiscoverTopNav } from '../top_nav/discover_topnav'; import { DocViewFilterFn } from '../../../../services/doc_views/doc_views_types'; diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx index d54e6490da4d15..402b3637f6e7c1 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx @@ -9,9 +9,9 @@ import React, { useCallback, useEffect, useMemo, useRef } from 'react'; import type { Query, TimeRange, AggregateQuery } from '@kbn/es-query'; import { DataViewType, type DataView } from '@kbn/data-views-plugin/public'; import type { DataViewPickerProps } from '@kbn/unified-search-plugin/public'; +import { ENABLE_SQL } from '@kbn/discover-utils'; import { useSavedSearchInitial } from '../../services/discover_state_provider'; import { useInternalStateSelector } from '../../services/discover_internal_state_container'; -import { ENABLE_SQL } from '../../../../../common'; import { useDiscoverServices } from '../../../../hooks/use_discover_services'; import { getTopNavLinks } from './get_top_nav_links'; import { getHeaderActionMenuMounter } from '../../../../kibana_services'; diff --git a/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx b/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx index 47a81b1c324478..4d1b9ccbdc22de 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx @@ -12,9 +12,9 @@ import { EuiFormRow, EuiSwitch } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { SavedObjectSaveModal, showSaveModal, OnSaveProps } from '@kbn/saved-objects-plugin/public'; import { SavedSearch, SaveSavedSearchOptions } from '@kbn/saved-search-plugin/public'; +import { DOC_TABLE_LEGACY } from '@kbn/discover-utils'; import { DiscoverServices } from '../../../../build_services'; import { DiscoverStateContainer } from '../../services/discover_state'; -import { DOC_TABLE_LEGACY } from '../../../../../common'; async function saveDataSource({ savedSearch, diff --git a/src/plugins/discover/public/application/main/hooks/utils/change_data_view.ts b/src/plugins/discover/public/application/main/hooks/utils/change_data_view.ts index 0912758b746638..db7a4b0c00bbe1 100644 --- a/src/plugins/discover/public/application/main/hooks/utils/change_data_view.ts +++ b/src/plugins/discover/public/application/main/hooks/utils/change_data_view.ts @@ -8,12 +8,12 @@ import { SortOrder } from '@kbn/saved-search-plugin/public'; import { DataView } from '@kbn/data-views-plugin/common'; +import { MODIFY_COLUMNS_ON_SWITCH, SORT_DEFAULT_ORDER_SETTING } from '@kbn/discover-utils'; import { DiscoverInternalStateContainer } from '../../services/discover_internal_state_container'; import { DiscoverAppStateContainer } from '../../services/discover_app_state_container'; import { addLog } from '../../../../utils/add_log'; import { DiscoverServices } from '../../../../build_services'; import { getDataViewAppState } from '../../utils/get_switch_data_view_app_state'; -import { MODIFY_COLUMNS_ON_SWITCH, SORT_DEFAULT_ORDER_SETTING } from '../../../../../common'; /** * Function executed when switching data view in the UI diff --git a/src/plugins/discover/public/application/main/services/discover_data_state_container.ts b/src/plugins/discover/public/application/main/services/discover_data_state_container.ts index 1e45a6f81b0d7e..57b21ecaf70629 100644 --- a/src/plugins/discover/public/application/main/services/discover_data_state_container.ts +++ b/src/plugins/discover/public/application/main/services/discover_data_state_container.ts @@ -15,13 +15,13 @@ import type { SearchResponse } from '@elastic/elasticsearch/lib/api/types'; import { DataView } from '@kbn/data-views-plugin/common'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import type { DataTableRecord } from '@kbn/discover-utils/types'; +import { SEARCH_FIELDS_FROM_SOURCE, SEARCH_ON_PAGE_LOAD_SETTING } from '@kbn/discover-utils'; import { getDataViewByTextBasedQueryLang } from '../utils/get_data_view_by_text_based_query_lang'; import { isTextBasedQuery } from '../utils/is_text_based_query'; import { getRawRecordType } from '../utils/get_raw_record_type'; import { DiscoverAppState } from './discover_app_state_container'; import { DiscoverServices } from '../../../build_services'; import { DiscoverSearchSessionManager } from './discover_search_session'; -import { SEARCH_FIELDS_FROM_SOURCE, SEARCH_ON_PAGE_LOAD_SETTING } from '../../../../common'; import { FetchStatus } from '../../types'; import { validateTimeRange } from '../utils/validate_time_range'; import { fetchAll } from '../utils/fetch_all'; diff --git a/src/plugins/discover/public/application/main/utils/fetch_documents.ts b/src/plugins/discover/public/application/main/utils/fetch_documents.ts index 97a0661f40ded8..4a4e388a273673 100644 --- a/src/plugins/discover/public/application/main/utils/fetch_documents.ts +++ b/src/plugins/discover/public/application/main/utils/fetch_documents.ts @@ -9,10 +9,9 @@ import { i18n } from '@kbn/i18n'; import { filter, map } from 'rxjs/operators'; import { lastValueFrom } from 'rxjs'; import { isCompleteResponse, ISearchSource } from '@kbn/data-plugin/public'; -import { buildDataTableRecordList } from '@kbn/discover-utils'; +import { SAMPLE_SIZE_SETTING, buildDataTableRecordList } from '@kbn/discover-utils'; import type { EsHitRecord } from '@kbn/discover-utils/types'; import type { RecordsFetchResponse } from '../../../types'; -import { SAMPLE_SIZE_SETTING } from '../../../../common'; import { FetchDeps } from './fetch_all'; /** diff --git a/src/plugins/discover/public/application/main/utils/get_state_defaults.ts b/src/plugins/discover/public/application/main/utils/get_state_defaults.ts index 1ec3be8c3ec1a5..78c89468253742 100644 --- a/src/plugins/discover/public/application/main/utils/get_state_defaults.ts +++ b/src/plugins/discover/public/application/main/utils/get_state_defaults.ts @@ -10,15 +10,15 @@ import { cloneDeep, isEqual } from 'lodash'; import { IUiSettingsClient } from '@kbn/core/public'; import { SavedSearch } from '@kbn/saved-search-plugin/public'; import { getChartHidden } from '@kbn/unified-histogram-plugin/public'; -import { DiscoverAppState } from '../services/discover_app_state_container'; -import { DiscoverServices } from '../../../build_services'; -import { getDefaultSort, getSortArray } from '../../../utils/sorting'; import { DEFAULT_COLUMNS_SETTING, DOC_HIDE_TIME_COLUMN_SETTING, SEARCH_FIELDS_FROM_SOURCE, SORT_DEFAULT_ORDER_SETTING, -} from '../../../../common'; +} from '@kbn/discover-utils'; +import { DiscoverAppState } from '../services/discover_app_state_container'; +import { DiscoverServices } from '../../../build_services'; +import { getDefaultSort, getSortArray } from '../../../utils/sorting'; import { isTextBasedQuery } from './is_text_based_query'; import { getValidViewMode } from './get_valid_view_mode'; diff --git a/src/plugins/discover/public/application/main/utils/update_search_source.ts b/src/plugins/discover/public/application/main/utils/update_search_source.ts index 4152b57a34a0f4..a0a1cec7811b08 100644 --- a/src/plugins/discover/public/application/main/utils/update_search_source.ts +++ b/src/plugins/discover/public/application/main/utils/update_search_source.ts @@ -9,7 +9,7 @@ import { ISearchSource } from '@kbn/data-plugin/public'; import { DataViewType, DataView } from '@kbn/data-views-plugin/public'; import type { SortOrder } from '@kbn/saved-search-plugin/public'; -import { SEARCH_FIELDS_FROM_SOURCE, SORT_DEFAULT_ORDER_SETTING } from '../../../../common'; +import { SEARCH_FIELDS_FROM_SOURCE, SORT_DEFAULT_ORDER_SETTING } from '@kbn/discover-utils'; import { DiscoverServices } from '../../../build_services'; import { getSortForSearchSource } from '../../../utils/sorting'; diff --git a/src/plugins/discover/public/components/discover_grid/discover_grid.tsx b/src/plugins/discover/public/components/discover_grid/discover_grid.tsx index d99a9551c5efd2..ef9afe2b418220 100644 --- a/src/plugins/discover/public/components/discover_grid/discover_grid.tsx +++ b/src/plugins/discover/public/components/discover_grid/discover_grid.tsx @@ -37,6 +37,11 @@ import { DataViewFieldEditorStart } from '@kbn/data-view-field-editor-plugin/pub import { Serializable } from '@kbn/utility-types'; import type { DataTableRecord } from '@kbn/discover-utils/types'; import { getShouldShowFieldHandler } from '@kbn/discover-utils'; +import { + DOC_HIDE_TIME_COLUMN_SETTING, + MAX_DOC_FIELDS_DISPLAYED, + SHOW_MULTIFIELDS, +} from '@kbn/discover-utils'; import { DocViewFilterFn } from '../../services/doc_views/doc_views_types'; import { getSchemaDetectors } from './discover_grid_schema'; import { DiscoverGridFlyout } from './discover_grid_flyout'; @@ -50,11 +55,6 @@ import { } from './discover_grid_columns'; import { GRID_STYLE, toolbarVisibility as toolbarVisibilityDefaults } from './constants'; import { getDisplayedColumns } from '../../utils/columns'; -import { - DOC_HIDE_TIME_COLUMN_SETTING, - MAX_DOC_FIELDS_DISPLAYED, - SHOW_MULTIFIELDS, -} from '../../../common'; import { DiscoverGridDocumentToolbarBtn } from './discover_grid_document_selection'; import type { ValueToStringConverter } from '../../types'; import { useRowHeightsOptions } from '../../hooks/use_row_heights_options'; diff --git a/src/plugins/discover/public/components/discover_grid/get_render_cell_value.tsx b/src/plugins/discover/public/components/discover_grid/get_render_cell_value.tsx index 78fefd53c1e279..b5e8e0d8d8d5bc 100644 --- a/src/plugins/discover/public/components/discover_grid/get_render_cell_value.tsx +++ b/src/plugins/discover/public/components/discover_grid/get_render_cell_value.tsx @@ -26,12 +26,11 @@ import type { EsHitRecord, ShouldShowFieldInTableHandler, } from '@kbn/discover-utils/types'; -import { formatFieldValue, formatHit } from '@kbn/discover-utils'; +import { MAX_DOC_FIELDS_DISPLAYED, formatFieldValue, formatHit } from '@kbn/discover-utils'; import { DiscoverGridContext } from './discover_grid_context'; import { JsonCodeEditor } from '../json_code_editor/json_code_editor'; import { defaultMonacoEditorWidth } from './constants'; import { useDiscoverServices } from '../../hooks/use_discover_services'; -import { MAX_DOC_FIELDS_DISPLAYED } from '../../../common'; const CELL_CLASS = 'dscDiscoverGrid__cellValue'; diff --git a/src/plugins/discover/public/components/doc_table/actions/columns.ts b/src/plugins/discover/public/components/doc_table/actions/columns.ts index 75c52356c88fbe..b45d95433165af 100644 --- a/src/plugins/discover/public/components/doc_table/actions/columns.ts +++ b/src/plugins/discover/public/components/doc_table/actions/columns.ts @@ -8,8 +8,8 @@ import { Capabilities, IUiSettingsClient } from '@kbn/core/public'; import { DataViewsContract } from '@kbn/data-plugin/public'; import { DataView } from '@kbn/data-views-plugin/public'; +import { SORT_DEFAULT_ORDER_SETTING } from '@kbn/discover-utils'; import { DiscoverAppStateContainer } from '../../../application/main/services/discover_app_state_container'; -import { SORT_DEFAULT_ORDER_SETTING } from '../../../../common'; import { GetStateReturn as ContextGetStateReturn } from '../../../application/context/services/context_state'; import { popularizeField } from '../../../utils/popularize_field'; diff --git a/src/plugins/discover/public/components/doc_table/components/table_header/table_header.test.tsx b/src/plugins/discover/public/components/doc_table/components/table_header/table_header.test.tsx index 78d15870e6353e..d0aa7186f728d7 100644 --- a/src/plugins/discover/public/components/doc_table/components/table_header/table_header.test.tsx +++ b/src/plugins/discover/public/components/doc_table/components/table_header/table_header.test.tsx @@ -13,7 +13,7 @@ import type { SortOrder } from '@kbn/saved-search-plugin/public'; import { TableHeader } from './table_header'; import { findTestSubject } from '@elastic/eui/lib/test'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; -import { DOC_HIDE_TIME_COLUMN_SETTING } from '../../../../../common'; +import { DOC_HIDE_TIME_COLUMN_SETTING } from '@kbn/discover-utils'; import { FORMATS_UI_SETTINGS } from '@kbn/field-formats-plugin/common'; const defaultUiSettings = { diff --git a/src/plugins/discover/public/components/doc_table/components/table_header/table_header.tsx b/src/plugins/discover/public/components/doc_table/components/table_header/table_header.tsx index 78a7ab5f44ff83..dcc47ec5e88f34 100644 --- a/src/plugins/discover/public/components/doc_table/components/table_header/table_header.tsx +++ b/src/plugins/discover/public/components/doc_table/components/table_header/table_header.tsx @@ -10,11 +10,11 @@ import React, { useMemo } from 'react'; import type { DataView } from '@kbn/data-views-plugin/public'; import { FORMATS_UI_SETTINGS } from '@kbn/field-formats-plugin/common'; import type { SortOrder } from '@kbn/saved-search-plugin/public'; +import { DOC_HIDE_TIME_COLUMN_SETTING, SORT_DEFAULT_ORDER_SETTING } from '@kbn/discover-utils'; import { TableHeaderColumn } from './table_header_column'; import { getDisplayedColumns } from './helpers'; import { getDefaultSort } from '../../../../utils/sorting'; import { useDiscoverServices } from '../../../../hooks/use_discover_services'; -import { DOC_HIDE_TIME_COLUMN_SETTING, SORT_DEFAULT_ORDER_SETTING } from '../../../../../common'; interface Props { columns: string[]; diff --git a/src/plugins/discover/public/components/doc_table/components/table_row.test.tsx b/src/plugins/discover/public/components/doc_table/components/table_row.test.tsx index b82166494538c2..d9fbe1e8071ce1 100644 --- a/src/plugins/discover/public/components/doc_table/components/table_row.test.tsx +++ b/src/plugins/discover/public/components/doc_table/components/table_row.test.tsx @@ -17,7 +17,7 @@ import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { discoverServiceMock } from '../../../__mocks__/services'; import { DocViewer } from '../../../services/doc_views/components/doc_viewer'; -import { DOC_HIDE_TIME_COLUMN_SETTING, MAX_DOC_FIELDS_DISPLAYED } from '../../../../common'; +import { DOC_HIDE_TIME_COLUMN_SETTING, MAX_DOC_FIELDS_DISPLAYED } from '@kbn/discover-utils'; import { buildDataTableRecord } from '@kbn/discover-utils'; import type { EsHitRecord } from '@kbn/discover-utils/types'; diff --git a/src/plugins/discover/public/components/doc_table/components/table_row.tsx b/src/plugins/discover/public/components/doc_table/components/table_row.tsx index 94b14caf863212..a38e082778a68d 100644 --- a/src/plugins/discover/public/components/doc_table/components/table_row.tsx +++ b/src/plugins/discover/public/components/doc_table/components/table_row.tsx @@ -18,13 +18,13 @@ import type { ShouldShowFieldInTableHandler, } from '@kbn/discover-utils/types'; import { formatFieldValue } from '@kbn/discover-utils'; +import { DOC_HIDE_TIME_COLUMN_SETTING, MAX_DOC_FIELDS_DISPLAYED } from '@kbn/discover-utils'; import { DocViewRenderProps } from '../../../services/doc_views/doc_views_types'; import { TableCell } from './table_row/table_cell'; import { formatRow, formatTopLevelObject } from '../utils/row_formatter'; import { DocViewFilterFn } from '../../../services/doc_views/doc_views_types'; import { TableRowDetails } from './table_row_details'; import { useDiscoverServices } from '../../../hooks/use_discover_services'; -import { DOC_HIDE_TIME_COLUMN_SETTING, MAX_DOC_FIELDS_DISPLAYED } from '../../../../common'; export type DocTableRow = EsHitRecord & { isAnchor?: boolean; diff --git a/src/plugins/discover/public/components/doc_table/doc_table_embeddable.tsx b/src/plugins/discover/public/components/doc_table/doc_table_embeddable.tsx index 577807f27dfa43..97ed5f3af9d14e 100644 --- a/src/plugins/discover/public/components/doc_table/doc_table_embeddable.tsx +++ b/src/plugins/discover/public/components/doc_table/doc_table_embeddable.tsx @@ -10,8 +10,7 @@ import React, { memo, useCallback, useMemo, useRef } from 'react'; import './index.scss'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiText } from '@elastic/eui'; -import { usePager } from '@kbn/discover-utils'; -import { SAMPLE_SIZE_SETTING } from '../../../common'; +import { SAMPLE_SIZE_SETTING, usePager } from '@kbn/discover-utils'; import { ToolBarPagination, MAX_ROWS_PER_PAGE_OPTION, diff --git a/src/plugins/discover/public/components/doc_table/doc_table_infinite.tsx b/src/plugins/discover/public/components/doc_table/doc_table_infinite.tsx index f68e05290c6f99..cb285746963acf 100644 --- a/src/plugins/discover/public/components/doc_table/doc_table_infinite.tsx +++ b/src/plugins/discover/public/components/doc_table/doc_table_infinite.tsx @@ -11,7 +11,7 @@ import './index.scss'; import { FormattedMessage } from '@kbn/i18n-react'; import { debounce } from 'lodash'; import { EuiButtonEmpty } from '@elastic/eui'; -import { SAMPLE_SIZE_SETTING } from '../../../common'; +import { SAMPLE_SIZE_SETTING } from '@kbn/discover-utils'; import { DocTableProps, DocTableRenderProps, DocTableWrapper } from './doc_table_wrapper'; import { SkipBottomButton } from '../../application/main/components/skip_bottom_button'; import { shouldLoadNextDocPatch } from './utils/should_load_next_doc_patch'; diff --git a/src/plugins/discover/public/components/doc_table/doc_table_wrapper.tsx b/src/plugins/discover/public/components/doc_table/doc_table_wrapper.tsx index 9d870fc3d8babd..8e32b97956ceab 100644 --- a/src/plugins/discover/public/components/doc_table/doc_table_wrapper.tsx +++ b/src/plugins/discover/public/components/doc_table/doc_table_wrapper.tsx @@ -13,9 +13,8 @@ import type { SortOrder } from '@kbn/saved-search-plugin/public'; import { FormattedMessage } from '@kbn/i18n-react'; import { Filter } from '@kbn/es-query'; import type { DataTableRecord } from '@kbn/discover-utils/types'; -import { getShouldShowFieldHandler } from '@kbn/discover-utils'; +import { SHOW_MULTIFIELDS, getShouldShowFieldHandler } from '@kbn/discover-utils'; import { TableHeader } from './components/table_header/table_header'; -import { SHOW_MULTIFIELDS } from '../../../common'; import { TableRow } from './components/table_row'; import { DocViewFilterFn, DocViewRenderProps } from '../../services/doc_views/doc_views_types'; import { useDiscoverServices } from '../../hooks/use_discover_services'; diff --git a/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.tsx b/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.tsx index befe62ef42fbda..b897ea278ebab4 100644 --- a/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.tsx +++ b/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.tsx @@ -11,8 +11,8 @@ import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { css } from '@emotion/react'; import { euiThemeVars } from '@kbn/ui-theme'; +import { SHOW_FIELD_STATISTICS } from '@kbn/discover-utils'; import { VIEW_MODE } from '../../../common/constants'; -import { SHOW_FIELD_STATISTICS } from '../../../common'; import { useDiscoverServices } from '../../hooks/use_discover_services'; export const DocumentViewModeToggle = ({ diff --git a/src/plugins/discover/public/embeddable/constants.ts b/src/plugins/discover/public/embeddable/constants.ts index be717e18cfb5aa..84c1babfc79496 100644 --- a/src/plugins/discover/public/embeddable/constants.ts +++ b/src/plugins/discover/public/embeddable/constants.ts @@ -8,7 +8,7 @@ import type { Trigger } from '@kbn/ui-actions-plugin/public'; -export { SEARCH_EMBEDDABLE_TYPE } from '../../common'; +export { SEARCH_EMBEDDABLE_TYPE } from '@kbn/discover-utils'; export const SEARCH_EMBEDDABLE_CELL_ACTIONS_TRIGGER_ID = 'SEARCH_EMBEDDABLE_CELL_ACTIONS_TRIGGER_ID'; diff --git a/src/plugins/discover/public/embeddable/saved_search_embeddable.test.ts b/src/plugins/discover/public/embeddable/saved_search_embeddable.test.ts index 6f27a11e149edf..3e2e0e2402c4f1 100644 --- a/src/plugins/discover/public/embeddable/saved_search_embeddable.test.ts +++ b/src/plugins/discover/public/embeddable/saved_search_embeddable.test.ts @@ -18,7 +18,7 @@ import { render } from 'react-dom'; import { createSearchSourceMock } from '@kbn/data-plugin/public/mocks'; import { Observable, of, throwError } from 'rxjs'; import { ReactWrapper } from 'enzyme'; -import { SHOW_FIELD_STATISTICS } from '../../common'; +import { SHOW_FIELD_STATISTICS } from '@kbn/discover-utils'; import { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { SavedSearchEmbeddableComponent } from './saved_search_embeddable_component'; import { VIEW_MODE } from '../../common/constants'; diff --git a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx index 5f1a145eba2439..7136d8b1ab8d30 100644 --- a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx +++ b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx @@ -36,14 +36,7 @@ import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-pl import { SavedSearch } from '@kbn/saved-search-plugin/public'; import { METRIC_TYPE } from '@kbn/analytics'; import { CellActionsProvider } from '@kbn/cell-actions'; -import { buildDataTableRecord } from '@kbn/discover-utils'; import type { DataTableRecord, EsHitRecord } from '@kbn/discover-utils/types'; -import { VIEW_MODE } from '../../common/constants'; -import { getSortForEmbeddable, SortPair } from '../utils/sorting'; -import { ISearchEmbeddable, SearchInput, SearchOutput } from './types'; -import { SEARCH_EMBEDDABLE_TYPE, SEARCH_EMBEDDABLE_CELL_ACTIONS_TRIGGER_ID } from './constants'; -import { DiscoverServices } from '../build_services'; -import { SavedSearchEmbeddableComponent } from './saved_search_embeddable_component'; import { DOC_HIDE_TIME_COLUMN_SETTING, DOC_TABLE_LEGACY, @@ -51,7 +44,14 @@ import { SEARCH_FIELDS_FROM_SOURCE, SHOW_FIELD_STATISTICS, SORT_DEFAULT_ORDER_SETTING, -} from '../../common'; + buildDataTableRecord, +} from '@kbn/discover-utils'; +import { VIEW_MODE } from '../../common/constants'; +import { getSortForEmbeddable, SortPair } from '../utils/sorting'; +import { ISearchEmbeddable, SearchInput, SearchOutput } from './types'; +import { SEARCH_EMBEDDABLE_TYPE, SEARCH_EMBEDDABLE_CELL_ACTIONS_TRIGGER_ID } from './constants'; +import { DiscoverServices } from '../build_services'; +import { SavedSearchEmbeddableComponent } from './saved_search_embeddable_component'; import * as columnActions from '../components/doc_table/actions/columns'; import { handleSourceColumnState } from '../utils/state_helpers'; import { DiscoverGridProps } from '../components/discover_grid/discover_grid'; diff --git a/src/plugins/discover/public/embeddable/view_saved_search_action.ts b/src/plugins/discover/public/embeddable/view_saved_search_action.ts index 1b584893364233..dde5889aa1fdba 100644 --- a/src/plugins/discover/public/embeddable/view_saved_search_action.ts +++ b/src/plugins/discover/public/embeddable/view_saved_search_action.ts @@ -11,8 +11,8 @@ import { i18n } from '@kbn/i18n'; import { IEmbeddable, ViewMode } from '@kbn/embeddable-plugin/public'; import { Action } from '@kbn/ui-actions-plugin/public'; import { getSavedSearchUrl } from '@kbn/saved-search-plugin/public'; +import { SEARCH_EMBEDDABLE_TYPE } from '@kbn/discover-utils'; import { SavedSearchEmbeddable } from './saved_search_embeddable'; -import { SEARCH_EMBEDDABLE_TYPE } from '../../common'; export const ACTION_VIEW_SAVED_SEARCH = 'ACTION_VIEW_SAVED_SEARCH'; diff --git a/src/plugins/discover/public/hooks/use_es_doc_search.test.tsx b/src/plugins/discover/public/hooks/use_es_doc_search.test.tsx index 60f2eed7acdca3..64a998a542069e 100644 --- a/src/plugins/discover/public/hooks/use_es_doc_search.test.tsx +++ b/src/plugins/discover/public/hooks/use_es_doc_search.test.tsx @@ -12,10 +12,12 @@ import { Subject } from 'rxjs'; import { DataView } from '@kbn/data-views-plugin/public'; import { DocProps } from '../application/doc/components/doc'; import { ElasticRequestState } from '../application/doc/types'; -import { SEARCH_FIELDS_FROM_SOURCE as mockSearchFieldsFromSource } from '../../common'; +import { + SEARCH_FIELDS_FROM_SOURCE as mockSearchFieldsFromSource, + buildDataTableRecord, +} from '@kbn/discover-utils'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import React from 'react'; -import { buildDataTableRecord } from '@kbn/discover-utils'; const index = 'test-index'; const mockSearchResult = new Subject(); diff --git a/src/plugins/discover/public/hooks/use_es_doc_search.ts b/src/plugins/discover/public/hooks/use_es_doc_search.ts index c78ee2cd0041fa..b430d6b4531b9c 100644 --- a/src/plugins/discover/public/hooks/use_es_doc_search.ts +++ b/src/plugins/discover/public/hooks/use_es_doc_search.ts @@ -11,11 +11,10 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { lastValueFrom } from 'rxjs'; import { DataView } from '@kbn/data-views-plugin/public'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; -import { buildDataTableRecord } from '@kbn/discover-utils'; import type { DataTableRecord } from '@kbn/discover-utils/types'; +import { SEARCH_FIELDS_FROM_SOURCE, buildDataTableRecord } from '@kbn/discover-utils'; import { DocProps } from '../application/doc/components/doc'; import { ElasticRequestState } from '../application/doc/types'; -import { SEARCH_FIELDS_FROM_SOURCE } from '../../common'; import { useDiscoverServices } from './use_discover_services'; type RequestBody = Pick; diff --git a/src/plugins/discover/public/hooks/use_row_heights_options.ts b/src/plugins/discover/public/hooks/use_row_heights_options.ts index d932ef3f75ef11..a9ef67ace530b7 100644 --- a/src/plugins/discover/public/hooks/use_row_heights_options.ts +++ b/src/plugins/discover/public/hooks/use_row_heights_options.ts @@ -8,7 +8,7 @@ import type { EuiDataGridRowHeightOption, EuiDataGridRowHeightsOptions } from '@elastic/eui'; import { useMemo } from 'react'; -import { ROW_HEIGHT_OPTION } from '../../common'; +import { ROW_HEIGHT_OPTION } from '@kbn/discover-utils'; import { isValidRowHeight } from '../utils/validate_row_height'; import { useDiscoverServices } from './use_discover_services'; import { diff --git a/src/plugins/discover/public/plugin.tsx b/src/plugins/discover/public/plugin.tsx index 41d3ba10f9b2db..6226484778fa2d 100644 --- a/src/plugins/discover/public/plugin.tsx +++ b/src/plugins/discover/public/plugin.tsx @@ -43,6 +43,7 @@ import type { SavedSearchPublicPluginStart } from '@kbn/saved-search-plugin/publ import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; import type { LensPublicStart } from '@kbn/lens-plugin/public'; +import { DOC_TABLE_LEGACY, TRUNCATE_MAX_HEIGHT } from '@kbn/discover-utils'; import { PLUGIN_ID } from '../common'; import { DocViewInput, DocViewInputFn } from './services/doc_views/doc_views_types'; import { DocViewsRegistry } from './services/doc_views/doc_views_registry'; @@ -60,7 +61,6 @@ import { SearchEmbeddableFactory } from './embeddable'; import { DeferredSpinner } from './components'; import { ViewSavedSearchAction } from './embeddable/view_saved_search_action'; import { injectTruncateStyles } from './utils/truncate_styles'; -import { DOC_TABLE_LEGACY, TRUNCATE_MAX_HEIGHT } from '../common'; import { useDiscoverServices } from './hooks/use_discover_services'; import { initializeKbnUrlTracking } from './utils/initialize_kbn_url_tracking'; import { diff --git a/src/plugins/discover/public/services/doc_views/components/doc_viewer_source/source.tsx b/src/plugins/discover/public/services/doc_views/components/doc_viewer_source/source.tsx index 4ea6a0ff1ace87..95c3b8b34e5d9a 100644 --- a/src/plugins/discover/public/services/doc_views/components/doc_viewer_source/source.tsx +++ b/src/plugins/discover/public/services/doc_views/components/doc_viewer_source/source.tsx @@ -14,9 +14,9 @@ import { EuiButton, EuiEmptyPrompt, EuiLoadingSpinner, EuiSpacer, EuiText } from import { i18n } from '@kbn/i18n'; import { DataView } from '@kbn/data-views-plugin/public'; import type { DataTableRecord } from '@kbn/discover-utils/types'; +import { DOC_TABLE_LEGACY, SEARCH_FIELDS_FROM_SOURCE } from '@kbn/discover-utils'; import { useDiscoverServices } from '../../../../hooks/use_discover_services'; import { JSONCodeEditorCommonMemoized } from '../../../../components/json_code_editor/json_code_editor_common'; -import { DOC_TABLE_LEGACY, SEARCH_FIELDS_FROM_SOURCE } from '../../../../../common'; import { useEsDocSearch } from '../../../../hooks/use_es_doc_search'; import { ElasticRequestState } from '../../../../application/doc/types'; import { getHeight } from './get_height'; diff --git a/src/plugins/discover/public/services/doc_views/components/doc_viewer_table/legacy/table.tsx b/src/plugins/discover/public/services/doc_views/components/doc_viewer_table/legacy/table.tsx index 0bb8d43ca9a2da..1d465978b17b19 100644 --- a/src/plugins/discover/public/services/doc_views/components/doc_viewer_table/legacy/table.tsx +++ b/src/plugins/discover/public/services/doc_views/components/doc_viewer_table/legacy/table.tsx @@ -11,13 +11,13 @@ import React, { useCallback, useMemo } from 'react'; import { EuiInMemoryTable } from '@elastic/eui'; import { getFieldIconType } from '@kbn/unified-field-list/src/utils/field_types/get_field_icon_type'; import { + SHOW_MULTIFIELDS, formatFieldValue, getIgnoredReason, getShouldShowFieldHandler, isNestedFieldParent, } from '@kbn/discover-utils'; import { useDiscoverServices } from '../../../../../hooks/use_discover_services'; -import { SHOW_MULTIFIELDS } from '../../../../../../common'; import { DocViewRenderProps, FieldRecordLegacy } from '../../../doc_views_types'; import { ACTIONS_COLUMN, MAIN_COLUMNS } from './table_columns'; diff --git a/src/plugins/discover/public/services/doc_views/components/doc_viewer_table/table.tsx b/src/plugins/discover/public/services/doc_views/components/doc_viewer_table/table.tsx index c83de24955fbc2..de13406d649109 100644 --- a/src/plugins/discover/public/services/doc_views/components/doc_viewer_table/table.tsx +++ b/src/plugins/discover/public/services/doc_views/components/doc_viewer_table/table.tsx @@ -31,6 +31,7 @@ import { debounce } from 'lodash'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { getFieldIconType } from '@kbn/unified-field-list/src/utils/field_types/get_field_icon_type'; import { + SHOW_MULTIFIELDS, formatFieldValue, getIgnoredReason, getShouldShowFieldHandler, @@ -39,7 +40,6 @@ import { } from '@kbn/discover-utils'; import { useDiscoverServices } from '../../../../hooks/use_discover_services'; import { FieldName } from '../../../../components/field_name/field_name'; -import { SHOW_MULTIFIELDS } from '../../../../../common'; import { DocViewRenderProps, FieldRecordLegacy } from '../../doc_views_types'; import { TableFieldValue } from './table_cell_value'; import { TableActions } from './table_cell_actions'; diff --git a/src/plugins/discover/public/utils/get_sharing_data.test.ts b/src/plugins/discover/public/utils/get_sharing_data.test.ts index 75d3204dfab5ca..4865e58f3becba 100644 --- a/src/plugins/discover/public/utils/get_sharing_data.test.ts +++ b/src/plugins/discover/public/utils/get_sharing_data.test.ts @@ -15,7 +15,7 @@ import { DOC_HIDE_TIME_COLUMN_SETTING, SORT_DEFAULT_ORDER_SETTING, SEARCH_FIELDS_FROM_SOURCE, -} from '../../common'; +} from '@kbn/discover-utils'; import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import { getSharingData, showPublicUrlSwitch } from './get_sharing_data'; diff --git a/src/plugins/discover/public/utils/get_sharing_data.ts b/src/plugins/discover/public/utils/get_sharing_data.ts index 0cc407a8221637..3334ecd7220c4d 100644 --- a/src/plugins/discover/public/utils/get_sharing_data.ts +++ b/src/plugins/discover/public/utils/get_sharing_data.ts @@ -15,16 +15,16 @@ import type { } from '@kbn/data-plugin/public'; import type { Filter } from '@kbn/es-query'; import type { SavedSearch, SortOrder } from '@kbn/saved-search-plugin/public'; +import { + DOC_HIDE_TIME_COLUMN_SETTING, + SEARCH_FIELDS_FROM_SOURCE, + SORT_DEFAULT_ORDER_SETTING, +} from '@kbn/discover-utils'; import { DiscoverAppState, isEqualFilters, } from '../application/main/services/discover_app_state_container'; import { getSortForSearchSource } from './sorting'; -import { - DOC_HIDE_TIME_COLUMN_SETTING, - SEARCH_FIELDS_FROM_SOURCE, - SORT_DEFAULT_ORDER_SETTING, -} from '../../common'; /** * Preparing data to share the current state as link or CSV/Report diff --git a/src/plugins/discover/public/utils/rows_per_page.test.ts b/src/plugins/discover/public/utils/rows_per_page.test.ts index 257e2259492f2e..25eddf9a44de26 100644 --- a/src/plugins/discover/public/utils/rows_per_page.test.ts +++ b/src/plugins/discover/public/utils/rows_per_page.test.ts @@ -7,7 +7,7 @@ */ import { discoverServiceMock } from '../__mocks__/services'; -import { SAMPLE_ROWS_PER_PAGE_SETTING } from '../../common'; +import { SAMPLE_ROWS_PER_PAGE_SETTING } from '@kbn/discover-utils'; import { getRowsPerPageOptions, getDefaultRowsPerPage } from './rows_per_page'; const SORTED_OPTIONS = [10, 25, 50, 100, 250, 500]; diff --git a/src/plugins/discover/public/utils/rows_per_page.ts b/src/plugins/discover/public/utils/rows_per_page.ts index fb087dc1d0aec0..bc5f07f6253d33 100644 --- a/src/plugins/discover/public/utils/rows_per_page.ts +++ b/src/plugins/discover/public/utils/rows_per_page.ts @@ -7,8 +7,8 @@ */ import { sortBy, uniq } from 'lodash'; +import { SAMPLE_ROWS_PER_PAGE_SETTING } from '@kbn/discover-utils'; import { DEFAULT_ROWS_PER_PAGE, ROWS_PER_PAGE_OPTIONS } from '../../common/constants'; -import { SAMPLE_ROWS_PER_PAGE_SETTING } from '../../common'; import { DiscoverServices } from '../build_services'; export const getRowsPerPageOptions = (currentRowsPerPage?: number): number[] => { diff --git a/src/plugins/discover/public/utils/sorting/get_sort.ts b/src/plugins/discover/public/utils/sorting/get_sort.ts index 39fcaeb64febed..4b6337d2b581d8 100644 --- a/src/plugins/discover/public/utils/sorting/get_sort.ts +++ b/src/plugins/discover/public/utils/sorting/get_sort.ts @@ -9,7 +9,7 @@ import { DataView } from '@kbn/data-views-plugin/common'; import { IUiSettingsClient } from '@kbn/core/public'; import type { SortOrder } from '@kbn/saved-search-plugin/public'; -import { DOC_HIDE_TIME_COLUMN_SETTING, SORT_DEFAULT_ORDER_SETTING } from '../../../common'; +import { DOC_HIDE_TIME_COLUMN_SETTING, SORT_DEFAULT_ORDER_SETTING } from '@kbn/discover-utils'; import { getDefaultSort, getSortArray, SortInput } from '../../../common/utils/sorting'; /** diff --git a/src/plugins/discover/public/utils/state_helpers.ts b/src/plugins/discover/public/utils/state_helpers.ts index 7a2bc6f4408851..9219fa2f757759 100644 --- a/src/plugins/discover/public/utils/state_helpers.ts +++ b/src/plugins/discover/public/utils/state_helpers.ts @@ -8,7 +8,7 @@ import { IUiSettingsClient } from '@kbn/core/public'; import { isEqual } from 'lodash'; -import { SEARCH_FIELDS_FROM_SOURCE, DEFAULT_COLUMNS_SETTING } from '../../common'; +import { SEARCH_FIELDS_FROM_SOURCE, DEFAULT_COLUMNS_SETTING } from '@kbn/discover-utils'; /** * Makes sure the current state is not referencing the source column when using the fields api diff --git a/src/plugins/discover/server/locator/columns_from_locator.test.ts b/src/plugins/discover/server/locator/columns_from_locator.test.ts index d866cb585f1694..6bc53afda9b189 100644 --- a/src/plugins/discover/server/locator/columns_from_locator.test.ts +++ b/src/plugins/discover/server/locator/columns_from_locator.test.ts @@ -15,7 +15,8 @@ import { DataView } from '@kbn/data-views-plugin/common'; import { createStubDataView } from '@kbn/data-views-plugin/common/stubs'; import { SavedSearchAttributes } from '@kbn/saved-search-plugin/common'; import { LocatorServicesDeps as Services } from '.'; -import { DiscoverAppLocatorParams, DOC_HIDE_TIME_COLUMN_SETTING } from '../../common'; +import { DiscoverAppLocatorParams } from '../../common'; +import { DOC_HIDE_TIME_COLUMN_SETTING } from '@kbn/discover-utils'; import { columnsFromLocatorFactory } from './columns_from_locator'; const mockSavedSearchId = 'abc-test-123'; diff --git a/src/plugins/discover/server/locator/columns_from_locator.ts b/src/plugins/discover/server/locator/columns_from_locator.ts index 65146168052353..a872298f515cc9 100644 --- a/src/plugins/discover/server/locator/columns_from_locator.ts +++ b/src/plugins/discover/server/locator/columns_from_locator.ts @@ -9,12 +9,9 @@ import { DataView } from '@kbn/data-views-plugin/common'; import { SavedSearch } from '@kbn/saved-search-plugin/common'; import { getSavedSearch } from '@kbn/saved-search-plugin/server'; +import { DOC_HIDE_TIME_COLUMN_SETTING, SEARCH_FIELDS_FROM_SOURCE } from '@kbn/discover-utils'; import { LocatorServicesDeps } from '.'; -import { - DiscoverAppLocatorParams, - DOC_HIDE_TIME_COLUMN_SETTING, - SEARCH_FIELDS_FROM_SOURCE, -} from '../../common'; +import { DiscoverAppLocatorParams } from '../../common'; function isStringArray(arr: unknown | string[]): arr is string[] { return Array.isArray(arr) && arr.every((p) => typeof p === 'string'); diff --git a/src/plugins/discover/server/locator/searchsource_from_locator.test.ts b/src/plugins/discover/server/locator/searchsource_from_locator.test.ts index e2315cf2e48729..c774b0f373a3e6 100644 --- a/src/plugins/discover/server/locator/searchsource_from_locator.test.ts +++ b/src/plugins/discover/server/locator/searchsource_from_locator.test.ts @@ -15,7 +15,8 @@ import { DataView } from '@kbn/data-views-plugin/common'; import { createStubDataView } from '@kbn/data-views-plugin/common/stubs'; import { SavedSearchAttributes } from '@kbn/saved-search-plugin/common'; import { LocatorServicesDeps as Services } from '.'; -import { DiscoverAppLocatorParams, DOC_HIDE_TIME_COLUMN_SETTING } from '../../common'; +import { DiscoverAppLocatorParams } from '../../common'; +import { DOC_HIDE_TIME_COLUMN_SETTING } from '@kbn/discover-utils'; import { searchSourceFromLocatorFactory } from './searchsource_from_locator'; const mockSavedSearchId = 'abc-test-123'; diff --git a/src/plugins/discover/server/locator/title_from_locator.test.ts b/src/plugins/discover/server/locator/title_from_locator.test.ts index 7328a577238e7e..f3e459a8bf39b3 100644 --- a/src/plugins/discover/server/locator/title_from_locator.test.ts +++ b/src/plugins/discover/server/locator/title_from_locator.test.ts @@ -12,7 +12,8 @@ import { ISearchStartSearchSource } from '@kbn/data-plugin/common'; import { dataPluginMock } from '@kbn/data-plugin/server/mocks'; import { SavedSearchAttributes } from '@kbn/saved-search-plugin/common'; import { LocatorServicesDeps as Services } from '.'; -import { DiscoverAppLocatorParams, DOC_HIDE_TIME_COLUMN_SETTING } from '../../common'; +import { DiscoverAppLocatorParams } from '../../common'; +import { DOC_HIDE_TIME_COLUMN_SETTING } from '@kbn/discover-utils'; import { titleFromLocatorFactory } from './title_from_locator'; const mockSavedSearchId = 'abc-test-123'; diff --git a/src/plugins/discover/server/ui_settings.ts b/src/plugins/discover/server/ui_settings.ts index be3dde9392f665..99748053b958ec 100644 --- a/src/plugins/discover/server/ui_settings.ts +++ b/src/plugins/discover/server/ui_settings.ts @@ -31,7 +31,7 @@ import { SHOW_FIELD_STATISTICS, ROW_HEIGHT_OPTION, ENABLE_SQL, -} from '../common'; +} from '@kbn/discover-utils'; import { DEFAULT_ROWS_PER_PAGE, ROWS_PER_PAGE_OPTIONS } from '../common/constants'; const technicalPreviewLabel = i18n.translate('discover.advancedSettings.technicalPreviewLabel', { diff --git a/x-pack/plugins/canvas/canvas_plugin_src/expression_types/embeddable_types.ts b/x-pack/plugins/canvas/canvas_plugin_src/expression_types/embeddable_types.ts index a5d9cfef549559..c86aa178ab1b92 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/expression_types/embeddable_types.ts +++ b/x-pack/plugins/canvas/canvas_plugin_src/expression_types/embeddable_types.ts @@ -8,7 +8,7 @@ import { MAP_SAVED_OBJECT_TYPE } from '@kbn/maps-plugin/common'; import { VISUALIZE_EMBEDDABLE_TYPE } from '@kbn/visualizations-plugin/common/constants'; import { LENS_EMBEDDABLE_TYPE } from '@kbn/lens-plugin/common/constants'; -import { SEARCH_EMBEDDABLE_TYPE } from '@kbn/discover-plugin/common'; +import { SEARCH_EMBEDDABLE_TYPE } from '@kbn/discover-utils'; export const EmbeddableTypes: { lens: string; diff --git a/x-pack/plugins/canvas/kibana.jsonc b/x-pack/plugins/canvas/kibana.jsonc index c52f6628b4fad8..05d86386d341f6 100644 --- a/x-pack/plugins/canvas/kibana.jsonc +++ b/x-pack/plugins/canvas/kibana.jsonc @@ -41,7 +41,6 @@ "savedObjects", ], "requiredBundles": [ - "discover", "kibanaReact", "kibanaUtils", "lens", diff --git a/x-pack/plugins/canvas/tsconfig.json b/x-pack/plugins/canvas/tsconfig.json index 6bd18423c138c8..c921bde079b5e4 100644 --- a/x-pack/plugins/canvas/tsconfig.json +++ b/x-pack/plugins/canvas/tsconfig.json @@ -81,6 +81,7 @@ "@kbn/saved-objects-finder-plugin", "@kbn/saved-objects-management-plugin", "@kbn/core-saved-objects-server", + "@kbn/discover-utils", ], "exclude": [ "target/**/*", From c37b78ef6877df5655028b1fa5b8fb24b82d7f34 Mon Sep 17 00:00:00 2001 From: Karl Godard Date: Wed, 26 Jul 2023 16:39:55 -0700 Subject: [PATCH 20/58] [Cloud Security] Findings tab redirection logic. (#162289) ## Summary Part of the CSP teams quick wins effort, this PR aims to improve the experience for users first landing on the Findings page, or returning to it. Currently we always set the "Misconfigurations" tab as default regardless of whether there are misconfigs or not. Even if there are vulnerabilities (the primary tab), it will still default to misconfigs. A small component was created to handle the root route for 'findings' and decide which Tab to be redirected to. Vulnerabilities or Misconfigurations. If a user has never made a tab selection, there are no vulnerabilities, but there are findings, the user will be redirected to the "Misconfigurations" tab. If the user had previously clicked to select a tab, it will always remember which tab they came from last. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../common/utils/helpers.ts | 16 +++++- .../public/common/constants.ts | 1 + .../public/pages/findings/findings.tsx | 56 ++++++++++++++++--- 3 files changed, 64 insertions(+), 9 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/common/utils/helpers.ts b/x-pack/plugins/cloud_security_posture/common/utils/helpers.ts index a7f07f70fd89ea..4483ed17da3e53 100644 --- a/x-pack/plugins/cloud_security_posture/common/utils/helpers.ts +++ b/x-pack/plugins/cloud_security_posture/common/utils/helpers.ts @@ -18,7 +18,7 @@ import { CLOUDBEAT_VANILLA, CSP_RULE_TEMPLATE_SAVED_OBJECT_TYPE, } from '../constants'; -import type { BenchmarkId, Score } from '../types'; +import type { BenchmarkId, Score, BaseCspSetupStatus } from '../types'; /** * @example @@ -84,3 +84,17 @@ export const calculatePostureScore = (passed: number, failed: number): Score => return roundScore(passed / (passed + failed)); }; + +export const getStatusForIndexName = (indexName: string, status?: BaseCspSetupStatus) => { + if (status) { + const indexDetail = status.indicesDetails.find( + (details) => details.index.indexOf(indexName) !== -1 + ); + + if (indexDetail) { + return indexDetail.status; + } + } + + return 'unknown'; +}; diff --git a/x-pack/plugins/cloud_security_posture/public/common/constants.ts b/x-pack/plugins/cloud_security_posture/public/common/constants.ts index 8c4bdfcb41c379..6a0a82c10c9dbb 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/constants.ts @@ -42,6 +42,7 @@ export const LOCAL_STORAGE_PAGE_SIZE_BENCHMARK_KEY = 'cloudPosture:benchmark:pag export const LOCAL_STORAGE_PAGE_SIZE_RULES_KEY = 'cloudPosture:rules:pageSize'; export const LOCAL_STORAGE_DASHBOARD_CLUSTER_SORT_KEY = 'cloudPosture:complianceDashboard:clusterSort'; +export const LOCAL_STORAGE_FINDINGS_LAST_SELECTED_TAB_KEY = 'cloudPosture:findings:lastSelectedTab'; export type CloudPostureIntegrations = Record< CloudSecurityPolicyTemplate, diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx index b5ae6ea5447f48..b5990a9a3a77ab 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx @@ -5,6 +5,7 @@ * 2.0. */ import React from 'react'; +import useLocalStorage from 'react-use/lib/useLocalStorage'; import { EuiBetaBadge, EuiFlexGroup, @@ -20,16 +21,62 @@ import { Redirect, useHistory, useLocation, matchPath } from 'react-router-dom'; import { Routes, Route } from '@kbn/shared-ux-router'; import { Configurations } from '../configurations'; import { cloudPosturePages, findingsNavigation } from '../../common/navigation/constants'; +import { LOCAL_STORAGE_FINDINGS_LAST_SELECTED_TAB_KEY } from '../../common/constants'; +import { VULNERABILITIES_INDEX_NAME, FINDINGS_INDEX_NAME } from '../../../common/constants'; +import { useCspSetupStatusApi } from '../../common/api/use_setup_status_api'; +import { getStatusForIndexName } from '../../../common/utils/helpers'; import { Vulnerabilities } from '../vulnerabilities'; +type FindingsTabKey = 'vuln_mgmt' | 'configurations'; + +const FindingsTabRedirecter = ({ lastTabSelected }: { lastTabSelected?: FindingsTabKey }) => { + const location = useLocation(); + const getSetupStatus = useCspSetupStatusApi(); + + if (!getSetupStatus.data) { + return null; + } + + const vulnStatus = getStatusForIndexName(VULNERABILITIES_INDEX_NAME, getSetupStatus.data); + const findingsStatus = getStatusForIndexName(FINDINGS_INDEX_NAME, getSetupStatus.data); + const hasVulnerabilities = vulnStatus === 'not-empty'; + const hasFindings = findingsStatus === 'not-empty'; + + // if the user has not yet made a tab selection + // switch to misconfigurations page if there are misconfigurations, and no vulnerabilities + const redirectToMisconfigurationsTab = + lastTabSelected === 'configurations' || + (!lastTabSelected && !hasVulnerabilities && hasFindings); + + if (redirectToMisconfigurationsTab) { + return ( + + ); + } + + // otherwise stay on the vulnerabilities tab, since it's the first one. + return ( + + ); +}; + export const Findings = () => { const history = useHistory(); const location = useLocation(); + // restore the users most recent tab selection + const [lastTabSelected, setLastTabSelected] = useLocalStorage( + LOCAL_STORAGE_FINDINGS_LAST_SELECTED_TAB_KEY + ); + const navigateToVulnerabilitiesTab = () => { + setLastTabSelected('vuln_mgmt'); history.push({ pathname: findingsNavigation.vulnerabilities.path }); }; const navigateToConfigurationsTab = () => { + setLastTabSelected('configurations'); history.push({ pathname: findingsNavigation.findings_default.path }); }; @@ -107,14 +154,7 @@ export const Findings = () => { ( - - )} + render={() => } /> From ceb7ad761d74a711474341bc312234f26c0d8915 Mon Sep 17 00:00:00 2001 From: Youhei Sakurai Date: Thu, 27 Jul 2023 09:30:52 +0900 Subject: [PATCH 21/58] Sort out objectization in variable substitution (#162382) Closes #162381 ## Summary This PR is,,, 1. Adding documentation about objectization in variable substitution. 2. Fixing a glitch in the illegal double quotes `""`.
details For example, `""${ZERO}""` may have substituted `"0"` but this substitution must not occur because no quotes surround the `${ZERO}` in the context of JSON syntax. `""${ZERO}""` is jut `${ZERO}` with forward and training `""`.
3. Promoting triple quotes `"""` as an alternative to the illegal double quotes `""`.
details Now `"""${ZERO}"""` is a way to substitute `"""0"""` rather than `0` that `"${ZERO}"` may substitute. The same as before, these single and triple quotes work only in the request body.
### Checklist - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) Note: Regex negative lookahead `x(?!y)` and ~~lookbehind `(? https://developer.apple.com/documentation/safari-release-notes/safari-16_4-release-notes > Added support for RegExp lookbehind assertions. Steps: 1. Go to Dev Tools > Console. 2. Click `Variables` on the top. 4. Define variable `ZERO` with `0`. 6. Run the following command. ```http POST test/_doc { "field": "${ZERO}" } ``` ### For maintainers - [x] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) ## Release note Improves a way of variable substitution and its documentation --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- docs/dev-tools/console/console.asciidoc | 28 ++++++++++ src/plugins/console/public/lib/utils/index.ts | 34 ++++++++---- .../console/public/lib/utils/utils.test.js | 55 +++++++++++++++++++ 3 files changed, 107 insertions(+), 10 deletions(-) diff --git a/docs/dev-tools/console/console.asciidoc b/docs/dev-tools/console/console.asciidoc index 3c72a02967e82a..c65a2f8b760eba 100644 --- a/docs/dev-tools/console/console.asciidoc +++ b/docs/dev-tools/console/console.asciidoc @@ -122,6 +122,34 @@ GET ${pathVariable} } ---------------------------------- +By default, variables in the body may be substituted as a boolean, number, array, or +object by removing nearby quotes instead of a string with surrounding quotes. Triple +quotes overwrite this default behavior and enforce simple replacement as a string. + +[source,js] +---------------------------------- +GET /locations/_search +{ + "query": { + "bool": { + "must": { + "match": { + // ${shopName} shall be replaced as a string if the variable exists. + "shop.name": """${shopName}""" + } + }, + "filter": { + "geo_distance": { + "distance": "12km", + // "${pinLocation}" may be substituted with an array such as [-70, 40]. + "pin.location": "${pinLocation}" + } + } + } + } +} +---------------------------------- + [float] [[auto-formatting]] ==== Auto-formatting diff --git a/src/plugins/console/public/lib/utils/index.ts b/src/plugins/console/public/lib/utils/index.ts index 340ccc9eab6e8e..996384e07939e9 100644 --- a/src/plugins/console/public/lib/utils/index.ts +++ b/src/plugins/console/public/lib/utils/index.ts @@ -117,13 +117,18 @@ export const replaceVariables = ( requests: RequestArgs['requests'], variables: DevToolsVariable[] ) => { - const urlRegex = /(\${\w+})/g; - const bodyRegex = /("\${\w+}")/g; + const urlRegex = /\${(\w+)}/g; + + // The forward part '([\\"]?)"' of regex matches '\\"', '""', and '"', but the only + // last match is preferable. The unwanted ones can be filtered out by checking whether + // the first capturing group is empty. This functionality is identical to the one + // achievable by negative lookbehind assertion - i.e. '(? { if (urlRegex.test(req.url)) { - req.url = req.url.replaceAll(urlRegex, (match) => { - // Sanitize variable name - const key = match.replace('${', '').replace('}', ''); + req.url = req.url.replaceAll(urlRegex, (match, key) => { const variable = variables.find(({ name }) => name === key); return variable?.value ?? match; @@ -131,13 +136,11 @@ export const replaceVariables = ( } if (req.data && req.data.length) { - if (bodyRegex.test(req.data[0])) { - const data = req.data[0].replaceAll(bodyRegex, (match) => { - // Sanitize variable name - const key = match.replace('"${', '').replace('}"', ''); + if (bodyRegexSingleQuote.test(req.data[0])) { + const data = req.data[0].replaceAll(bodyRegexSingleQuote, (match, lookbehind, key) => { const variable = variables.find(({ name }) => name === key); - if (variable) { + if (!lookbehind && variable) { // All values must be stringified to send a successful request to ES. const { value } = variable; @@ -171,6 +174,17 @@ export const replaceVariables = ( }); req.data = [data]; } + + if (bodyRegexTripleQuotes.test(req.data[0])) { + const data = req.data[0].replaceAll(bodyRegexTripleQuotes, (match, lookbehind, key) => { + const variable = variables.find(({ name }) => name === key); + + return !lookbehind && variable?.value + ? '""' + JSON.stringify(variable?.value) + '""' + : match; + }); + req.data = [data]; + } } return req; diff --git a/src/plugins/console/public/lib/utils/utils.test.js b/src/plugins/console/public/lib/utils/utils.test.js index 39632f33bdb871..7788aedeb78298 100644 --- a/src/plugins/console/public/lib/utils/utils.test.js +++ b/src/plugins/console/public/lib/utils/utils.test.js @@ -263,5 +263,60 @@ describe('Utils class', () => { { url: 'test', data: ['{\n "f": "9893617a-a08f-4e5c-bc41-95610dc2ded8"\n}'] } ); }); + + it('with illegal double quotes should not replace variables in body', () => { + testVariables( + { url: 'test/_doc/${v8}', data: ['{\n "f": ""${v8}""\n}'] }, + { name: 'v8', value: '0' }, + { + url: 'test/_doc/0', + data: ['{\n "f": ""${v8}""\n}'], + } + ); + }); + + it('with heredoc triple quotes should replace variables as strings in body', () => { + testVariables( + { url: 'test/_doc/${v9}', data: ['{\n "f": """${v9}"""\n}'] }, + { name: 'v9', value: '0' }, + { + url: 'test/_doc/0', + data: ['{\n "f": """0"""\n}'], + } + ); + }); + + it('with illegal quadruple quotes should not replace variables in body', () => { + testVariables( + { url: 'test/_doc/${v10}', data: ['{\n "f": """"${v10}""""\n}'] }, + { name: 'v10', value: '0' }, + { + url: 'test/_doc/0', + data: ['{\n "f": """"${v10}""""\n}'], + } + ); + }); + + it('with escaped pre quote should not replace variables in body', () => { + testVariables( + { url: 'test/_doc/${v11}', data: ['{\n "f": "\\"${v11}"\n}'] }, + { name: 'v11', value: '0' }, + { + url: 'test/_doc/0', + data: ['{\n "f": "\\"${v11}"\n}'], + } + ); + }); + + it('with escaped pre triple quotes should not replace variables in body', () => { + testVariables( + { url: 'test/_doc/${v12}', data: ['{\n "f": "\\"""${v12}"""\n}'] }, + { name: 'v12', value: '0' }, + { + url: 'test/_doc/0', + data: ['{\n "f": "\\"""${v12}"""\n}'], + } + ); + }); }); }); From 682c772e098e3862a8cc76af81c008cff34a42e7 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 27 Jul 2023 01:04:38 -0400 Subject: [PATCH 22/58] [api-docs] 2023-07-27 Daily api_docs build (#162606) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/411 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.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.devdocs.json | 744 +++++++++++++++--- api_docs/cases.mdx | 4 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_chat.mdx | 2 +- api_docs/cloud_chat_provider.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/deprecations_by_api.mdx | 6 +- api_docs/deprecations_by_plugin.mdx | 4 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.devdocs.json | 317 +------- api_docs/discover.mdx | 4 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/ecs_data_quality_dashboard.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_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/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_utils.mdx | 2 +- api_docs/kbn_alerting_state_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 +- ..._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_analytics_shippers_gainsight.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_cases_components.devdocs.json | 4 +- api_docs/kbn_cases_components.mdx | 4 +- 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_mocks.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 +- ...ntent_management_table_list_view_table.mdx | 2 +- .../kbn_content_management_utils.devdocs.json | 160 ++++ api_docs/kbn_content_management_utils.mdx | 4 +- 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 +- ...kbn_core_elasticsearch_server.devdocs.json | 4 + api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 32 +- 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 +- 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 | 16 - api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_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 +- ...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_internal.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_cypress_config.mdx | 2 +- api_docs/kbn_data_service.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.devdocs.json | 318 +++++++- api_docs/kbn_discover_utils.mdx | 7 +- 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.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_assistant.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_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- .../kbn_ftr_common_functional_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_generate_csv_types.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_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.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_category_validator.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_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_url_state.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_observability_alert_details.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 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.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_rison.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_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 +- ...n_securitysolution_data_table.devdocs.json | 4 +- 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 +- ..._securitysolution_io_ts_utils.devdocs.json | 6 +- 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_project_switcher.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 +- ...ared_ux_avatar_user_profile_components.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- ...hared_ux_button_exit_full_screen_mocks.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_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_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_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_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_field_list.mdx | 2 +- api_docs/kbn_url_state.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_yarn_lock_validator.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/lists.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/ml.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/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/plugin_directory.mdx | 14 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/reporting_export_types.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.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/text_based_languages.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.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 +- 559 files changed, 1730 insertions(+), 1004 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 5478c820115f67..8e411680977067 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: 2023-07-26 +date: 2023-07-27 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 8c181317513bf2..b7f3f17066c6fb 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index d11fe89f727991..1f97cf56c5bf20 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: 2023-07-26 +date: 2023-07-27 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 60d5e040c8e4ca..076e69e6e07757 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: 2023-07-26 +date: 2023-07-27 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 be41dc4ef1902f..2c03a8b6bba164 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 5a3b8b232c3325..c7677853a3f893 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: 2023-07-26 +date: 2023-07-27 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 2fde8703fde914..c629cd996e5269 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: 2023-07-26 +date: 2023-07-27 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 3153d79ab971ae..6c8cdb115f76a9 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: 2023-07-26 +date: 2023-07-27 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 3e06e2f09ea6d0..b2376792cc6e91 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.devdocs.json b/api_docs/cases.devdocs.json index d7975a35756fcb..571132a26bfd76 100644 --- a/api_docs/cases.devdocs.json +++ b/api_docs/cases.devdocs.json @@ -573,24 +573,24 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".user; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".alert; alertId: string | string[]; index: string | string[]; rule: { id: string | null; name: string | null; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".actions; comment: string; actions: { targets: { hostname: string; endpointId: string; }[]; type: string; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | (({ externalReferenceId: string; externalReferenceStorage: { type: ", { @@ -613,8 +613,8 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".externalReference; owner: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", { @@ -637,16 +637,16 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".externalReference; owner: string; }) & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".persistableState; owner: string; persistableStateAttachmentTypeId: string; persistableStateAttachmentState: { [x: string]: ", { @@ -1125,6 +1125,39 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "cases", + "id": "def-common.getCaseFindUserActionsUrl", + "type": "Function", + "tags": [], + "label": "getCaseFindUserActionsUrl", + "description": [], + "signature": [ + "(id: string) => string" + ], + "path": "x-pack/plugins/cases/common/api/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "cases", + "id": "def-common.getCaseFindUserActionsUrl.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/cases/common/api/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "cases", "id": "def-common.getCasesFromAlertsUrl", @@ -1349,36 +1382,28 @@ "enums": [ { "parentPluginId": "cases", - "id": "def-common.CaseSeverity", + "id": "def-common.AttachmentType", "type": "Enum", "tags": [], - "label": "CaseSeverity", - "description": [], - "path": "x-pack/plugins/cases/common/api/cases/case.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "cases", - "id": "def-common.CaseStatuses", - "type": "Enum", - "tags": [], - "label": "CaseStatuses", - "description": [], - "path": "packages/kbn-cases-components/src/status/types.ts", + "label": "AttachmentType", + "description": [ + "\nUser comment" + ], + "path": "x-pack/plugins/cases/common/types/domain/attachment/v1.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "cases", - "id": "def-common.CommentType", + "id": "def-common.CaseSeverity", "type": "Enum", "tags": [], - "label": "CommentType", - "description": [], - "path": "x-pack/plugins/cases/common/api/cases/comment/index.ts", + "label": "CaseSeverity", + "description": [ + "\nSeverity" + ], + "path": "x-pack/plugins/cases/common/types/domain/case/v1.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1401,8 +1426,10 @@ "type": "Enum", "tags": [], "label": "ExternalReferenceStorageType", - "description": [], - "path": "x-pack/plugins/cases/common/api/cases/comment/index.ts", + "description": [ + "\nExternal reference" + ], + "path": "x-pack/plugins/cases/common/types/domain/attachment/v1.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1426,6 +1453,109 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "cases", + "id": "def-common.AttachmentAttributes", + "type": "Type", + "tags": [], + "label": "AttachmentAttributes", + "description": [], + "signature": [ + "({ comment: string; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".user; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".alert; alertId: string | string[]; index: string | string[]; rule: { id: string | null; name: string | null; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".actions; comment: string; actions: { targets: { hostname: string; endpointId: string; }[]; type: string; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | (({ externalReferenceId: string; externalReferenceStorage: { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ExternalReferenceStorageType", + "text": "ExternalReferenceStorageType" + }, + ".elasticSearchDoc; }; externalReferenceAttachmentTypeId: string; externalReferenceMetadata: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; } | null; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".externalReference; owner: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ExternalReferenceStorageType", + "text": "ExternalReferenceStorageType" + }, + ".savedObject; soType: string; }; externalReferenceAttachmentTypeId: string; externalReferenceMetadata: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; } | null; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".externalReference; owner: string; }) & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".persistableState; owner: string; persistableStateAttachmentTypeId: string; persistableStateAttachmentState: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; }; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; })" + ], + "path": "x-pack/plugins/cases/common/types/domain/attachment/v1.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "cases", "id": "def-common.Case", @@ -1511,24 +1641,24 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".user; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".alert; alertId: string | string[]; index: string | string[]; rule: { id: string | null; name: string | null; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".actions; comment: string; actions: { targets: { hostname: string; endpointId: string; }[]; type: string; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | (({ externalReferenceId: string; externalReferenceStorage: { type: ", { @@ -1551,8 +1681,8 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".externalReference; owner: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", { @@ -1575,16 +1705,16 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".externalReference; owner: string; }) & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".persistableState; owner: string; persistableStateAttachmentTypeId: string; persistableStateAttachmentState: { [x: string]: ", { @@ -1596,7 +1726,101 @@ }, "; }; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; })) & { id: string; version: string; })[] | undefined; }" ], - "path": "x-pack/plugins/cases/common/api/cases/case.ts", + "path": "x-pack/plugins/cases/common/types/domain/case/v1.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "cases", + "id": "def-common.CASE_COMMENT_SAVED_OBJECT", + "type": "string", + "tags": [], + "label": "CASE_COMMENT_SAVED_OBJECT", + "description": [], + "signature": [ + "\"cases-comments\"" + ], + "path": "x-pack/plugins/cases/common/constants/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "cases", + "id": "def-common.CasePostRequest", + "type": "Type", + "tags": [], + "label": "CasePostRequest", + "description": [], + "signature": [ + "{ description: string; tags: string[]; title: string; connector: { id: string; } & (({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".casesWebhook; fields: null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".jira; fields: { issueType: string | null; priority: string | null; parent: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".none; fields: null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".resilient; fields: { incidentTypes: string[] | null; severityCode: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".serviceNowITSM; fields: { impact: string | null; severity: string | null; urgency: string | null; category: string | null; subcategory: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".serviceNowSIR; fields: { category: string | null; destIp: boolean | null; malwareHash: boolean | null; malwareUrl: boolean | null; priority: string | null; sourceIp: boolean | null; subcategory: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); settings: { syncAlerts: boolean; }; owner: string; } & { assignees?: { uid: string; }[] | undefined; severity?: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CaseSeverity", + "text": "CaseSeverity" + }, + " | undefined; category?: string | null | undefined; }" + ], + "path": "x-pack/plugins/cases/common/types/api/case/v1.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1686,24 +1910,24 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".user; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".alert; alertId: string | string[]; index: string | string[]; rule: { id: string | null; name: string | null; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".actions; comment: string; actions: { targets: { hostname: string; endpointId: string; }[]; type: string; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | (({ externalReferenceId: string; externalReferenceStorage: { type: ", { @@ -1726,8 +1950,8 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".externalReference; owner: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", { @@ -1750,16 +1974,16 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".externalReference; owner: string; }) & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".persistableState; owner: string; persistableStateAttachmentTypeId: string; persistableStateAttachmentState: { [x: string]: ", { @@ -1771,7 +1995,7 @@ }, "; }; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; })) & { id: string; version: string; })[] | undefined; })[]" ], - "path": "x-pack/plugins/cases/common/api/cases/case.ts", + "path": "x-pack/plugins/cases/common/types/domain/case/v1.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1878,24 +2102,24 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".user; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".alert; alertId: string | string[]; index: string | string[]; rule: { id: string | null; name: string | null; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".actions; comment: string; actions: { targets: { hostname: string; endpointId: string; }[]; type: string; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | (({ externalReferenceId: string; externalReferenceStorage: { type: ", { @@ -1918,8 +2142,8 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".externalReference; owner: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", { @@ -1942,16 +2166,16 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".externalReference; owner: string; }) & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".persistableState; owner: string; persistableStateAttachmentTypeId: string; persistableStateAttachmentState: { [x: string]: ", { @@ -1963,7 +2187,7 @@ }, "; }; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; })) & { id: string; version: string; })[] | undefined; })[]; errors: { error: string; message: string; status: number | undefined; caseId: string; }[]; }" ], - "path": "x-pack/plugins/cases/common/api/cases/case.ts", + "path": "x-pack/plugins/cases/common/types/api/case/v1.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2053,24 +2277,24 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".user; owner: string; createdAt: string; createdBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; }; pushedAt: string | null; pushedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; updatedAt: string | null; updatedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; id: string; version: string; } | { type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".alert; alertId: string | string[]; index: string | string[]; rule: { id: string | null; name: string | null; }; owner: string; createdAt: string; createdBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; }; pushedAt: string | null; pushedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; updatedAt: string | null; updatedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; id: string; version: string; } | { type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".actions; comment: string; actions: { targets: { hostname: string; endpointId: string; }[]; type: string; }; owner: string; createdAt: string; createdBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; }; pushedAt: string | null; pushedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; updatedAt: string | null; updatedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; id: string; version: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", { @@ -2085,8 +2309,8 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".externalReference; owner: string; createdAt: string; createdBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; }; pushedAt: string | null; pushedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; updatedAt: string | null; updatedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; id: string; version: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", { @@ -2101,16 +2325,16 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".externalReference; owner: string; createdAt: string; createdBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; }; pushedAt: string | null; pushedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; updatedAt: string | null; updatedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; id: string; version: string; } | { type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".persistableState; owner: string; persistableStateAttachmentTypeId: string; persistableStateAttachmentState: { [x: string]: string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | any | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | any | null; } | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null; }; createdAt: string; createdBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; }; pushedAt: string | null; pushedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; updatedAt: string | null; updatedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; id: string; version: string; })[] | undefined; }[]; page: number; perPage: number; total: number; countOpenCases: number; countInProgressCases: number; countClosedCases: number; }, \"cases\"> & { cases: ", { @@ -2127,6 +2351,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "cases", + "id": "def-common.CasesStatus", + "type": "Type", + "tags": [], + "label": "CasesStatus", + "description": [], + "signature": [ + "{ countOpenCases: number; countInProgressCases: number; countClosedCases: number; }" + ], + "path": "x-pack/plugins/cases/common/ui/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "cases", "id": "def-common.CasesUI", @@ -2234,24 +2473,24 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".user; owner: string; createdAt: string; createdBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; }; pushedAt: string | null; pushedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; updatedAt: string | null; updatedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; id: string; version: string; } | { type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".alert; alertId: string | string[]; index: string | string[]; rule: { id: string | null; name: string | null; }; owner: string; createdAt: string; createdBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; }; pushedAt: string | null; pushedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; updatedAt: string | null; updatedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; id: string; version: string; } | { type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".actions; comment: string; actions: { targets: { hostname: string; endpointId: string; }[]; type: string; }; owner: string; createdAt: string; createdBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; }; pushedAt: string | null; pushedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; updatedAt: string | null; updatedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; id: string; version: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", { @@ -2266,8 +2505,8 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".externalReference; owner: string; createdAt: string; createdBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; }; pushedAt: string | null; pushedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; updatedAt: string | null; updatedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; id: string; version: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", { @@ -2282,19 +2521,19 @@ "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".externalReference; owner: string; createdAt: string; createdBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; }; pushedAt: string | null; pushedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; updatedAt: string | null; updatedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; id: string; version: string; } | { type: ", { "pluginId": "cases", "scope": "common", "docId": "kibCasesPluginApi", - "section": "def-common.CommentType", - "text": "CommentType" + "section": "def-common.AttachmentType", + "text": "AttachmentType" }, ".persistableState; owner: string; persistableStateAttachmentTypeId: string; persistableStateAttachmentState: { [x: string]: string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | (string | number | boolean | any | any | null)[] | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | (string | number | boolean | any | any | null)[] | null; } | (string | number | boolean | { [x: string]: string | number | boolean | any | any | null; } | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null; }; createdAt: string; createdBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; }; pushedAt: string | null; pushedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; updatedAt: string | null; updatedBy: { email: string | null | undefined; fullName: string | null | undefined; username: string | null | undefined; profileUid?: string | undefined; } | null; id: string; version: string; })[] | undefined; }, \"comments\"> & { comments: ", - "CommentUI", + "AttachmentUI", "[]; }" ], "path": "x-pack/plugins/cases/common/ui/types.ts", @@ -2366,6 +2605,44 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "cases", + "id": "def-common.GetRelatedCasesByAlertResponse", + "type": "Type", + "tags": [], + "label": "GetRelatedCasesByAlertResponse", + "description": [], + "signature": [ + "{ id: string; title: string; description: string; status: ", + { + "pluginId": "@kbn/cases-components", + "scope": "common", + "docId": "kibKbnCasesComponentsPluginApi", + "section": "def-common.CaseStatuses", + "text": "CaseStatuses" + }, + "; createdAt: string; totals: { alerts: number; userComments: number; }; }[]" + ], + "path": "x-pack/plugins/cases/common/types/api/case/v1.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "cases", + "id": "def-common.INTERNAL_BULK_CREATE_ATTACHMENTS_URL", + "type": "string", + "tags": [], + "label": "INTERNAL_BULK_CREATE_ATTACHMENTS_URL", + "description": [], + "signature": [ + "\"/internal/cases/{case_id}/attachments/_bulk_create\"" + ], + "path": "x-pack/plugins/cases/common/constants/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "cases", "id": "def-common.INTERNAL_BULK_GET_CASES_URL", @@ -2441,6 +2718,46 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "cases", + "id": "def-common.RelatedCase", + "type": "Type", + "tags": [], + "label": "RelatedCase", + "description": [], + "signature": [ + "{ id: string; title: string; description: string; status: ", + { + "pluginId": "@kbn/cases-components", + "scope": "common", + "docId": "kibKbnCasesComponentsPluginApi", + "section": "def-common.CaseStatuses", + "text": "CaseStatuses" + }, + "; createdAt: string; totals: { alerts: number; userComments: number; }; }" + ], + "path": "x-pack/plugins/cases/common/types/domain/case/v1.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "cases", + "id": "def-common.SAVED_OBJECT_TYPES", + "type": "Array", + "tags": [], + "label": "SAVED_OBJECT_TYPES", + "description": [ + "\nIf more values are added here please also add them here: x-pack/test/cases_api_integration/common/plugins" + ], + "signature": [ + "(\"cases\" | \"cases-connector-mappings\" | \"cases-user-actions\" | \"cases-comments\" | \"cases-configure\")[]" + ], + "path": "x-pack/plugins/cases/common/constants/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "cases", "id": "def-common.SECURITY_SOLUTION_OWNER", @@ -2487,6 +2804,237 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "cases", + "id": "def-common.UserActionFindResponse", + "type": "Type", + "tags": [], + "label": "UserActionFindResponse", + "description": [], + "signature": [ + "{ userActions: (((({ type: \"description\"; payload: { description: string; }; } | { type: \"tags\"; payload: { tags: string[]; }; } | { type: \"title\"; payload: { title: string; }; } | { type: \"settings\"; payload: { settings: { syncAlerts: boolean; }; }; } | { type: \"status\"; payload: { status: ", + { + "pluginId": "@kbn/cases-components", + "scope": "common", + "docId": "kibKbnCasesComponentsPluginApi", + "section": "def-common.CaseStatuses", + "text": "CaseStatuses" + }, + "; }; } | { type: \"severity\"; payload: { severity: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CaseSeverity", + "text": "CaseSeverity" + }, + "; }; } | { type: \"assignees\"; payload: { assignees: { uid: string; }[]; }; } | { type: \"delete_case\"; payload: {}; } | { type: \"category\"; payload: { category: string | null; }; } | { type: \"comment\"; payload: { comment: { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".alert; alertId: string | string[]; index: string | string[]; rule: { id: string | null; name: string | null; }; owner: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ExternalReferenceStorageType", + "text": "ExternalReferenceStorageType" + }, + ".elasticSearchDoc; }; externalReferenceAttachmentTypeId: string; externalReferenceMetadata: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; } | null; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".externalReference; owner: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ExternalReferenceStorageType", + "text": "ExternalReferenceStorageType" + }, + ".savedObject; soType: string; }; externalReferenceAttachmentTypeId: string; externalReferenceMetadata: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; } | null; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".externalReference; owner: string; } | { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".persistableState; owner: string; persistableStateAttachmentTypeId: string; persistableStateAttachmentState: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; }; } | { comment: string; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".user; owner: string; } | { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".actions; comment: string; actions: { targets: { hostname: string; endpointId: string; }[]; type: string; }; owner: string; }; }; } | ({ type: \"create_case\"; } & { payload: { connector: { id: string; } & (({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".casesWebhook; fields: null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".jira; fields: { issueType: string | null; priority: string | null; parent: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".none; fields: null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".resilient; fields: { incidentTypes: string[] | null; severityCode: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".serviceNowITSM; fields: { impact: string | null; severity: string | null; urgency: string | null; category: string | null; subcategory: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".serviceNowSIR; fields: { category: string | null; destIp: boolean | null; malwareHash: boolean | null; malwareUrl: boolean | null; priority: string | null; sourceIp: boolean | null; subcategory: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); } & { assignees: { uid: string; }[]; description: string; status: string; severity: string; tags: string[]; title: string; settings: { syncAlerts: boolean; }; owner: string; } & { category?: string | null | undefined; }; }) | { type: \"connector\"; payload: { connector: { id: string; } & (({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".casesWebhook; fields: null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".jira; fields: { issueType: string | null; priority: string | null; parent: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".none; fields: null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".resilient; fields: { incidentTypes: string[] | null; severityCode: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".serviceNowITSM; fields: { impact: string | null; severity: string | null; urgency: string | null; category: string | null; subcategory: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".serviceNowSIR; fields: { category: string | null; destIp: boolean | null; malwareHash: boolean | null; malwareUrl: boolean | null; priority: string | null; sourceIp: boolean | null; subcategory: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); }; } | { type: \"pushed\"; payload: { externalService: { connector_id: string; } & { connector_name: string; external_id: string; external_title: string; external_url: string; pushed_at: string; pushed_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; }; }; }) & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; action: \"create\" | \"update\" | \"delete\" | \"add\" | \"push_to_service\"; }) & { comment_id: string | null; }) & { id: string; version: string; })[]; page: number; perPage: number; total: number; }" + ], + "path": "x-pack/plugins/cases/common/types/api/user_action/v1.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [] diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index cd96f47ff6f7e3..4ed5fbec8f94c2 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.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 | |-------------------|-----------|------------------------|-----------------| -| 80 | 0 | 65 | 27 | +| 90 | 0 | 71 | 27 | ## Client diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 9cd74a2aed5a11..81b9fbd1984f74 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: 2023-07-26 +date: 2023-07-27 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 35341b2f90f72a..d1dbb1364546fe 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index 591aa43aa502e2..aa9b317065bb45 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_chat_provider.mdx b/api_docs/cloud_chat_provider.mdx index 768b887152decf..3be804a8859646 100644 --- a/api_docs/cloud_chat_provider.mdx +++ b/api_docs/cloud_chat_provider.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChatProvider title: "cloudChatProvider" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChatProvider plugin -date: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChatProvider'] --- import cloudChatProviderObj from './cloud_chat_provider.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 880dfecde3041a..cac97aa5c2a279 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: 2023-07-26 +date: 2023-07-27 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 9ea5d0cc3a1502..5393af34378879 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: 2023-07-26 +date: 2023-07-27 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 678ae71f9447fc..673a7c193e25d0 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: 2023-07-26 +date: 2023-07-27 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 22165b108d7ccc..8c4292ddd871fa 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: 2023-07-26 +date: 2023-07-27 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 fd56569726cad8..a445a434ef2057 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: 2023-07-26 +date: 2023-07-27 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 fc428d817366e3..9069226f17cb1d 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: 2023-07-26 +date: 2023-07-27 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 04621f585705f1..d77da6d29efbda 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: 2023-07-26 +date: 2023-07-27 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 96ac72f1f07c4c..1d2f33a57c077e 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: 2023-07-26 +date: 2023-07-27 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 1fca054c6b50d5..3849805b5f8da7 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: 2023-07-26 +date: 2023-07-27 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 d53335a0a8179d..6e4f12f8634f67 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: 2023-07-26 +date: 2023-07-27 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 a5b35921cfa4d0..459040e8f1a6ba 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: 2023-07-26 +date: 2023-07-27 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 b64b887c91ab1e..4dd059b9740d04 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: 2023-07-26 +date: 2023-07-27 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 0471ceb7f22e35..00d531fe0b066d 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: 2023-07-26 +date: 2023-07-27 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 312775cc458cc8..9bc66e83611829 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: 2023-07-26 +date: 2023-07-27 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 45b33cff252fb3..8591ce3a50013b 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: 2023-07-26 +date: 2023-07-27 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 0cd2bc7b6b2a32..26f84e5481c8c0 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: 2023-07-26 +date: 2023-07-27 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 46732b8e485951..072ee66e9f6c6f 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: 2023-07-26 +date: 2023-07-27 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 46f2e882a66fc4..9f6f1614313cba 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 6c2b6e71e26d7d..b4b45759f096fa 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -31,7 +31,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, presentationUtil, visualizations, aiops, ml, dataVisualizer, dashboardEnhanced, graph, uptime, 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 | - | | | observability, @kbn/securitysolution-data-table, securitySolution | - | -| | @kbn/core-saved-objects-api-browser, @kbn/core, savedObjects, savedObjectsManagement, visualizations, savedObjectsTagging, eventAnnotation, lens, graph, dashboard, savedObjectsTaggingOss, kibanaUtils, expressions, data, embeddable, controls, uiActionsEnhanced, cases, maps, canvas, dashboardEnhanced, globalSearchProviders, infra | - | +| | @kbn/core-saved-objects-api-browser, @kbn/core, savedObjects, savedObjectsManagement, visualizations, savedObjectsTagging, eventAnnotation, lens, graph, dashboard, savedObjectsTaggingOss, kibanaUtils, expressions, data, embeddable, controls, uiActionsEnhanced, maps, canvas, dashboardEnhanced, globalSearchProviders, infra | - | | | monitoring | - | | | alerting, discover, securitySolution | - | | | @kbn/core-saved-objects-api-browser, @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-api-server-internal, @kbn/core-saved-objects-import-export-server-internal, @kbn/core-saved-objects-server-internal, home, fleet, graph, lists, osquery, securitySolution, alerting | - | @@ -128,13 +128,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | visTypeGauge | - | | | visTypePie | - | | | visTypePie | - | +| | @kbn/core-elasticsearch-server-internal, @kbn/core-plugins-server-internal, observabilityOnboarding, console | - | | | encryptedSavedObjects | - | | | @kbn/content-management-table-list-view, filesManagement | - | | | @kbn/core | - | | | @kbn/core | - | | | @kbn/core-lifecycle-browser-mocks, @kbn/core, @kbn/core-plugins-browser-internal | - | | | @kbn/core | - | -| | @kbn/core-elasticsearch-server-internal, @kbn/core-plugins-server-internal, console | - | | | @kbn/core-plugins-server-internal | - | | | security, licenseManagement, ml, profiling, apm, crossClusterReplication, logstash, painlessLab, searchprofiler, watcher | 8.8.0 | | | spaces, security, actions, alerting, ml, remoteClusters, graph, indexLifecycleManagement, mapsEms, osquery, painlessLab, rollup, searchprofiler, securitySolution, snapshotRestore, transform, upgradeAssistant | 8.8.0 | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index f96f5c43cf7153..23ce12e742ed2f 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -453,7 +453,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [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) | - | -| | [so_references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/attachment_framework/so_references.ts#:~:text=SavedObjectReference), [so_references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/attachment_framework/so_references.ts#:~:text=SavedObjectReference), [so_references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/attachment_framework/so_references.ts#:~:text=SavedObjectReference), [so_references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/attachment_framework/so_references.ts#:~:text=SavedObjectReference) | - | | | [cases.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cases/server/saved_object_types/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) | - | @@ -980,6 +979,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_onboarding/public/application/app.tsx#:~:text=RedirectAppLinks), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_onboarding/public/application/app.tsx#:~:text=RedirectAppLinks), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_onboarding/public/application/app.tsx#:~:text=RedirectAppLinks) | - | +| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_onboarding/server/plugin.ts#:~:text=legacy) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 418fa3ea2897b5..72853f72c37d46 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 076307fc6c5072..347e6ebd3ed900 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.devdocs.json b/api_docs/discover.devdocs.json index a733024dc56450..c3ac29e09e0796 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -689,7 +689,7 @@ "signature": [ "\"search\"" ], - "path": "src/plugins/discover/common/index.ts", + "path": "packages/kbn-discover-utils/src/constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1772,66 +1772,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "discover", - "id": "def-common.CONTEXT_DEFAULT_SIZE_SETTING", - "type": "string", - "tags": [], - "label": "CONTEXT_DEFAULT_SIZE_SETTING", - "description": [], - "signature": [ - "\"context:defaultSize\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.CONTEXT_STEP_SETTING", - "type": "string", - "tags": [], - "label": "CONTEXT_STEP_SETTING", - "description": [], - "signature": [ - "\"context:step\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.CONTEXT_TIE_BREAKER_FIELDS_SETTING", - "type": "string", - "tags": [], - "label": "CONTEXT_TIE_BREAKER_FIELDS_SETTING", - "description": [], - "signature": [ - "\"context:tieBreakerFields\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.DEFAULT_COLUMNS_SETTING", - "type": "string", - "tags": [], - "label": "DEFAULT_COLUMNS_SETTING", - "description": [], - "signature": [ - "\"defaultColumns\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "discover", "id": "def-common.DISCOVER_APP_LOCATOR", @@ -1877,111 +1817,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "discover", - "id": "def-common.DOC_HIDE_TIME_COLUMN_SETTING", - "type": "string", - "tags": [], - "label": "DOC_HIDE_TIME_COLUMN_SETTING", - "description": [], - "signature": [ - "\"doc_table:hideTimeColumn\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.DOC_TABLE_LEGACY", - "type": "string", - "tags": [], - "label": "DOC_TABLE_LEGACY", - "description": [], - "signature": [ - "\"doc_table:legacy\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.ENABLE_SQL", - "type": "string", - "tags": [], - "label": "ENABLE_SQL", - "description": [], - "signature": [ - "\"discover:enableSql\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.FIELDS_LIMIT_SETTING", - "type": "string", - "tags": [], - "label": "FIELDS_LIMIT_SETTING", - "description": [], - "signature": [ - "\"fields:popularLimit\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.HIDE_ANNOUNCEMENTS", - "type": "string", - "tags": [], - "label": "HIDE_ANNOUNCEMENTS", - "description": [], - "signature": [ - "\"hideAnnouncements\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.MAX_DOC_FIELDS_DISPLAYED", - "type": "string", - "tags": [], - "label": "MAX_DOC_FIELDS_DISPLAYED", - "description": [], - "signature": [ - "\"discover:maxDocFieldsDisplayed\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.MODIFY_COLUMNS_ON_SWITCH", - "type": "string", - "tags": [], - "label": "MODIFY_COLUMNS_ON_SWITCH", - "description": [], - "signature": [ - "\"discover:modifyColumnsOnSwitch\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "discover", "id": "def-common.PLUGIN_ID", @@ -1996,156 +1831,6 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.ROW_HEIGHT_OPTION", - "type": "string", - "tags": [], - "label": "ROW_HEIGHT_OPTION", - "description": [], - "signature": [ - "\"discover:rowHeightOption\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.SAMPLE_ROWS_PER_PAGE_SETTING", - "type": "string", - "tags": [], - "label": "SAMPLE_ROWS_PER_PAGE_SETTING", - "description": [], - "signature": [ - "\"discover:sampleRowsPerPage\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.SAMPLE_SIZE_SETTING", - "type": "string", - "tags": [], - "label": "SAMPLE_SIZE_SETTING", - "description": [], - "signature": [ - "\"discover:sampleSize\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.SEARCH_EMBEDDABLE_TYPE", - "type": "string", - "tags": [], - "label": "SEARCH_EMBEDDABLE_TYPE", - "description": [], - "signature": [ - "\"search\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.SEARCH_FIELDS_FROM_SOURCE", - "type": "string", - "tags": [], - "label": "SEARCH_FIELDS_FROM_SOURCE", - "description": [], - "signature": [ - "\"discover:searchFieldsFromSource\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.SEARCH_ON_PAGE_LOAD_SETTING", - "type": "string", - "tags": [], - "label": "SEARCH_ON_PAGE_LOAD_SETTING", - "description": [], - "signature": [ - "\"discover:searchOnPageLoad\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.SHOW_FIELD_STATISTICS", - "type": "string", - "tags": [], - "label": "SHOW_FIELD_STATISTICS", - "description": [], - "signature": [ - "\"discover:showFieldStatistics\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.SHOW_MULTIFIELDS", - "type": "string", - "tags": [], - "label": "SHOW_MULTIFIELDS", - "description": [], - "signature": [ - "\"discover:showMultiFields\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.SORT_DEFAULT_ORDER_SETTING", - "type": "string", - "tags": [], - "label": "SORT_DEFAULT_ORDER_SETTING", - "description": [], - "signature": [ - "\"discover:sort:defaultOrder\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-common.TRUNCATE_MAX_HEIGHT", - "type": "string", - "tags": [], - "label": "TRUNCATE_MAX_HEIGHT", - "description": [], - "signature": [ - "\"truncate:maxHeight\"" - ], - "path": "src/plugins/discover/common/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false } ], "objects": [] diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 752c10c48dcc48..293322d465a8d5 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 107 | 0 | 81 | 15 | +| 86 | 0 | 60 | 15 | ## Client diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 4914d13254f7bb..f04e723fc5950d 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: 2023-07-26 +date: 2023-07-27 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 896f13036ef17a..0617d36fdff7bb 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 013fd355d92742..3d081d3247e150 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: 2023-07-26 +date: 2023-07-27 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 0fe9701fe40023..47b428e0ebef2b 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: 2023-07-26 +date: 2023-07-27 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 d780b0700144bf..37dce2ad391e4e 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: 2023-07-26 +date: 2023-07-27 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 c9c3bd5b2b96f5..f5614988a69809 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: 2023-07-26 +date: 2023-07-27 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 3d2b46d6fb8b02..7ea0c94bc19c52 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: 2023-07-26 +date: 2023-07-27 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 a76a602f902b4d..0f5abff437b4f8 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 1d7ba5494023e5..d91851eb6cd7f3 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: 2023-07-26 +date: 2023-07-27 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 f506b093914bea..95aab622ead6a8 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: 2023-07-26 +date: 2023-07-27 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 9b93fa6179d607..9db1cb0b11c221 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: 2023-07-26 +date: 2023-07-27 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 785a4f2896c9c5..462e87f5ef6ed9 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: 2023-07-26 +date: 2023-07-27 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 ce262a3f7b7791..b946f5d9ffd909 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: 2023-07-26 +date: 2023-07-27 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 5d4de9f113e0ea..1da6fbd3fb233b 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: 2023-07-26 +date: 2023-07-27 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 acc75076e0b880..602eef9a8e7d7f 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: 2023-07-26 +date: 2023-07-27 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 9401cd21af7aff..c4583f0b72ce3c 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: 2023-07-26 +date: 2023-07-27 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 3bd731f933f3e2..c97e9c8b1a2f01 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: 2023-07-26 +date: 2023-07-27 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 9f71fdff4b20d5..a88bad685a53b6 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: 2023-07-26 +date: 2023-07-27 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 92e2368e57bd53..2cc8ed77ef80e2 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: 2023-07-26 +date: 2023-07-27 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 d0959a41f31e26..7fafcdabe07378 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: 2023-07-26 +date: 2023-07-27 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 58cbabe1309d98..53fba3c96d56d4 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: 2023-07-26 +date: 2023-07-27 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 b21018a9e133c6..dcc4edc530848c 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: 2023-07-26 +date: 2023-07-27 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 3ea4a865a0fba6..efd2945a3e6aea 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: 2023-07-26 +date: 2023-07-27 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 3775968ee8a616..497a533b537d85 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: 2023-07-26 +date: 2023-07-27 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 fd10b93993b932..2928313fc3d79c 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: 2023-07-26 +date: 2023-07-27 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 c5055265cad960..c7401a6bdad9e7 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: 2023-07-26 +date: 2023-07-27 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 4c6b194239e9c2..54811851e7dad8 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: 2023-07-26 +date: 2023-07-27 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 dc10b73354e05f..93d50d91c48a0b 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: 2023-07-26 +date: 2023-07-27 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 c48ac442b8046c..856c3a49764e6c 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: 2023-07-26 +date: 2023-07-27 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 1ce4d449ed8b13..2e6d384de33d67 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: 2023-07-26 +date: 2023-07-27 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 452de3acbe0fdf..c3d389620a3770 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: 2023-07-26 +date: 2023-07-27 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 a4b36d5b794b66..1c8922c84c721a 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: 2023-07-26 +date: 2023-07-27 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 23823ff31b3408..978189fe71718c 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: 2023-07-26 +date: 2023-07-27 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 83aa174e2aa701..c2bb1d6b98b2c9 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: 2023-07-26 +date: 2023-07-27 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 c8923f01bf3796..6aead681a664e2 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: 2023-07-26 +date: 2023-07-27 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 e40952a55578e8..22111e13c39727 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: 2023-07-26 +date: 2023-07-27 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 4a1d174638b07a..7aa805fa3879a9 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index c1395e1dffb490..a2be604ec1ce50 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: 2023-07-26 +date: 2023-07-27 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 476134db79c10e..fe207806944189 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: 2023-07-26 +date: 2023-07-27 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 5a8c815e2fb89a..fbbae2843571ca 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 52ae5470f169bc..0808c219b7ea4d 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: 2023-07-26 +date: 2023-07-27 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 a06fc70139776e..7599682b180a8d 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index ea77c5423e891b..fe6fa33f03fc78 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 16705a61a0d1b4..d97388c661e07d 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: 2023-07-26 +date: 2023-07-27 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 0a995d2a1103dc..f49430d2adfb45 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: 2023-07-26 +date: 2023-07-27 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 485d6bf7a33b1f..51c6c9fbeff481 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: 2023-07-26 +date: 2023-07-27 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 9020254afaa682..567971e124c4e0 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.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 b0b24ae96bea1b..a9ab5e8ff28635 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: 2023-07-26 +date: 2023-07-27 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 8fe3abdd179db9..c16de0b3dd1425 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: 2023-07-26 +date: 2023-07-27 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 948fb8d9eec8ad..d98dc4986fbd9c 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: 2023-07-26 +date: 2023-07-27 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 552ab44ada2ff0..5e9d511b012d28 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index 86532aaef9089d..626d46ffd9e1f6 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 40701c73165da5..089844c4a02efb 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: 2023-07-26 +date: 2023-07-27 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 6035d38f14de5b..13f693dc3968ac 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: 2023-07-26 +date: 2023-07-27 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 7419f23c79f65a..5ba76b5246d33a 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: 2023-07-26 +date: 2023-07-27 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 d26942e7a9132e..fb858ae4603527 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: 2023-07-26 +date: 2023-07-27 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 22d1a1551568be..ea01b64ef5487b 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.devdocs.json b/api_docs/kbn_cases_components.devdocs.json index 0d0cf52bf71ea0..45a0779eaea00c 100644 --- a/api_docs/kbn_cases_components.devdocs.json +++ b/api_docs/kbn_cases_components.devdocs.json @@ -308,7 +308,9 @@ "type": "Enum", "tags": [], "label": "CaseStatuses", - "description": [], + "description": [ + "\nThis is being used by Cases in\nx-pack/plugins/cases/common/types/domain/case/v1.ts.\nIntroducing a breaking change in this enum will\nforce cases to create a version of the domain object\nwhich in turn will force cases to create a new version\nto most of the Cases APIs." + ], "path": "packages/kbn-cases-components/src/status/types.ts", "deprecated": false, "trackAdoption": false, diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 3846d2e4550560..1090dc8ce25e9e 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.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 | |-------------------|-----------|------------------------|-----------------| -| 19 | 0 | 17 | 0 | +| 19 | 0 | 16 | 0 | ## Common diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 6fbf1d0b8a89fc..9d3b4dec2da568 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: 2023-07-26 +date: 2023-07-27 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 fc50127ff3d32e..931d9e5077ad69 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: 2023-07-26 +date: 2023-07-27 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 b7ffd8d5ffde84..12b4e98d165357 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: 2023-07-26 +date: 2023-07-27 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 c9850183041249..0d5a4d2946962b 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: 2023-07-26 +date: 2023-07-27 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 62fcf80d408e08..9a1538033f7fb5 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: 2023-07-26 +date: 2023-07-27 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 ab1ae655541666..559a4862618455 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: 2023-07-26 +date: 2023-07-27 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 afe0f1e7a3574a..175923ba5098c9 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: 2023-07-26 +date: 2023-07-27 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 947dd872430b2c..e6a842378fd74d 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index 53c6f7062bf14a..a12d8a53a1bf94 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 7a50cff289af52..257571d071be73 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: 2023-07-26 +date: 2023-07-27 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 602ab99d30a17d..97aa2442abbfef 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: 2023-07-26 +date: 2023-07-27 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 2e6a3f877bb741..110710bffe41d4 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: 2023-07-26 +date: 2023-07-27 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 d8d91f452a4a5c..2c3faf772546f0 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: 2023-07-26 +date: 2023-07-27 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 14f028275148f1..e2e327116ca47d 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: 2023-07-26 +date: 2023-07-27 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 280280db76bcfd..0e5bef2cb29604 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: 2023-07-26 +date: 2023-07-27 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 423a6b6b1b3497..449e02ec418c0e 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: 2023-07-26 +date: 2023-07-27 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_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 338982409787d0..60b19ffbbed6ec 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: 2023-07-26 +date: 2023-07-27 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.devdocs.json b/api_docs/kbn_content_management_utils.devdocs.json index 008494bd1e8aac..e72887c5e9afa7 100644 --- a/api_docs/kbn_content_management_utils.devdocs.json +++ b/api_docs/kbn_content_management_utils.devdocs.json @@ -666,6 +666,55 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/content-management-utils", + "id": "def-common.getMSearch", + "type": "Function", + "tags": [], + "label": "getMSearch", + "description": [], + "signature": [ + "({ savedObjectType, cmServicesDefinition, allowedSavedObjectAttributes, }: GetMSearchParams) => { savedObjectType: string; toItemResult: (ctx: ", + { + "pluginId": "contentManagement", + "scope": "server", + "docId": "kibContentManagementPluginApi", + "section": "def-server.StorageContext", + "text": "StorageContext" + }, + ", savedObject: ", + { + "pluginId": "@kbn/core-saved-objects-api-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", + "section": "def-common.SavedObjectsFindResult", + "text": "SavedObjectsFindResult" + }, + ") => ReturnItem; }" + ], + "path": "packages/kbn-content-management-utils/src/msearch.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-utils", + "id": "def-common.getMSearch.$1", + "type": "Object", + "tags": [], + "label": "{\n savedObjectType,\n cmServicesDefinition,\n allowedSavedObjectAttributes,\n}", + "description": [], + "signature": [ + "GetMSearchParams" + ], + "path": "packages/kbn-content-management-utils/src/msearch.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/content-management-utils", "id": "def-common.objectTypeToGetResultSchema", @@ -1855,6 +1904,117 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/content-management-utils", + "id": "def-common.GetMSearchType", + "type": "Interface", + "tags": [], + "label": "GetMSearchType", + "description": [], + "signature": [ + { + "pluginId": "@kbn/content-management-utils", + "scope": "common", + "docId": "kibKbnContentManagementUtilsPluginApi", + "section": "def-common.GetMSearchType", + "text": "GetMSearchType" + }, + "" + ], + "path": "packages/kbn-content-management-utils/src/msearch.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-utils", + "id": "def-common.GetMSearchType.savedObjectType", + "type": "string", + "tags": [], + "label": "savedObjectType", + "description": [], + "path": "packages/kbn-content-management-utils/src/msearch.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-utils", + "id": "def-common.GetMSearchType.toItemResult", + "type": "Function", + "tags": [], + "label": "toItemResult", + "description": [], + "signature": [ + "(ctx: ", + { + "pluginId": "contentManagement", + "scope": "server", + "docId": "kibContentManagementPluginApi", + "section": "def-server.StorageContext", + "text": "StorageContext" + }, + ", savedObject: ", + { + "pluginId": "@kbn/core-saved-objects-api-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", + "section": "def-common.SavedObjectsFindResult", + "text": "SavedObjectsFindResult" + }, + ") => ReturnItem" + ], + "path": "packages/kbn-content-management-utils/src/msearch.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-utils", + "id": "def-common.GetMSearchType.toItemResult.$1", + "type": "Object", + "tags": [], + "label": "ctx", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "server", + "docId": "kibContentManagementPluginApi", + "section": "def-server.StorageContext", + "text": "StorageContext" + } + ], + "path": "packages/kbn-content-management-utils/src/msearch.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/content-management-utils", + "id": "def-common.GetMSearchType.toItemResult.$2", + "type": "Object", + "tags": [], + "label": "savedObject", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-api-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", + "section": "def-common.SavedObjectsFindResult", + "text": "SavedObjectsFindResult" + }, + "" + ], + "path": "packages/kbn-content-management-utils/src/msearch.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/content-management-utils", "id": "def-common.Reference", diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 9d8cf694fb5f89..23088b9b584d21 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 180 | 1 | 115 | 0 | +| 187 | 1 | 122 | 0 | ## Common diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 8568917cb7f776..1782079d1691b6 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: 2023-07-26 +date: 2023-07-27 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 d632be51b3d554..2eca4af17e2781 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: 2023-07-26 +date: 2023-07-27 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 8faca7170d82ca..494bb312e3bf4a 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: 2023-07-26 +date: 2023-07-27 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 04b16b4e31b155..1b88262ff61f46 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: 2023-07-26 +date: 2023-07-27 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 daf8ef37176f1e..8d575a0deba516 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: 2023-07-26 +date: 2023-07-27 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 4340ff2cca4d2b..f98e171989be14 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: 2023-07-26 +date: 2023-07-27 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 1974bc6c165085..500478395edc25 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: 2023-07-26 +date: 2023-07-27 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 bc8f9316047c2a..617b57ef9b4089 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: 2023-07-26 +date: 2023-07-27 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 cacda70e170790..712f397393e4c4 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: 2023-07-26 +date: 2023-07-27 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 1896acd5e4e068..698bc4bff5a54a 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: 2023-07-26 +date: 2023-07-27 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 189084dc4e7c85..d1034b38f93c7d 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: 2023-07-26 +date: 2023-07-27 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 103e0f44767a03..0a9e97bdf57737 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: 2023-07-26 +date: 2023-07-27 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 0fab1437bc945a..3049b9fc454eb7 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: 2023-07-26 +date: 2023-07-27 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 62d9eb7c8b1784..ae88b7b4824720 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: 2023-07-26 +date: 2023-07-27 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 250f498e2a8e85..5e90fdb05fc77c 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: 2023-07-26 +date: 2023-07-27 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 f9be51132198fd..51eb2438e06d57 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: 2023-07-26 +date: 2023-07-27 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 e5ece2cfbb98ae..5239767b594dd4 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: 2023-07-26 +date: 2023-07-27 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 001b689738c7e7..8d2945abf2a947 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: 2023-07-26 +date: 2023-07-27 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 1188dd6de55d4a..167f0cb2c5611e 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: 2023-07-26 +date: 2023-07-27 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 03b34f199797be..46d48f378f12c5 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: 2023-07-26 +date: 2023-07-27 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 5a645840265f6a..c752b146c0de57 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: 2023-07-26 +date: 2023-07-27 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 a7eb84bdbb383c..89f4412834843e 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: 2023-07-26 +date: 2023-07-27 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 ab84fda942d0c8..9d390913a39e41 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: 2023-07-26 +date: 2023-07-27 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 5852e6c5d7fa19..2071e5401f9fa6 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: 2023-07-26 +date: 2023-07-27 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 25ff5dbe3d5223..57e7e3f085a443 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: 2023-07-26 +date: 2023-07-27 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 7565c8bfa6fe91..93b26eb05a94da 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: 2023-07-26 +date: 2023-07-27 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 c5c2ad0be6a1c1..290ecf88ae2efb 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: 2023-07-26 +date: 2023-07-27 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 11d19c32157a32..610f2c7fe919e8 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: 2023-07-26 +date: 2023-07-27 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 f6bf5c916d7cce..455f1cd33ceac3 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: 2023-07-26 +date: 2023-07-27 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 eb8417829c22f2..c198173d1daddc 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: 2023-07-26 +date: 2023-07-27 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 fa08b044abdb68..fcee8d02a69d17 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: 2023-07-26 +date: 2023-07-27 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 ca413a3c63bbda..7b2aeab22046ca 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: 2023-07-26 +date: 2023-07-27 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 0ef7878da22857..33bcf309e936b2 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: 2023-07-26 +date: 2023-07-27 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 7a64bad9668e75..f0c284cd00ccd4 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: 2023-07-26 +date: 2023-07-27 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 f5bfd27181ee85..f97b5040201d55 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: 2023-07-26 +date: 2023-07-27 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 695f3af21c23fe..86d8b47dfd30e8 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: 2023-07-26 +date: 2023-07-27 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 26ecb244524215..f8b2105e92b46a 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: 2023-07-26 +date: 2023-07-27 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 71f5d0e84f47a1..5b0deb24839d15 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: 2023-07-26 +date: 2023-07-27 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 59261d51fc7713..c2034c82567f32 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: 2023-07-26 +date: 2023-07-27 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 24167b000eff48..4c796497cb7d88 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: 2023-07-26 +date: 2023-07-27 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 cb80e07a4abef8..b40841e44e4625 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: 2023-07-26 +date: 2023-07-27 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 a6fd885c9c1c05..ee5ca4aba81430 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: 2023-07-26 +date: 2023-07-27 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 e9b8bacd567e3a..0ca5e87751bde9 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: 2023-07-26 +date: 2023-07-27 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 f8172ff233d455..0baa37ec2135c7 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: 2023-07-26 +date: 2023-07-27 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.devdocs.json b/api_docs/kbn_core_elasticsearch_server.devdocs.json index 2a0b684c65c012..c17ecc226e4c18 100644 --- a/api_docs/kbn_core_elasticsearch_server.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_server.devdocs.json @@ -731,6 +731,10 @@ "plugin": "@kbn/core-plugins-server-internal", "path": "packages/core/plugins/core-plugins-server-internal/src/plugin_context.ts" }, + { + "plugin": "observabilityOnboarding", + "path": "x-pack/plugins/observability_onboarding/server/plugin.ts" + }, { "plugin": "console", "path": "src/plugins/console/server/plugin.ts" diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index 3eeebf6fa2cf33..e998b816a483b5 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: 2023-07-26 +date: 2023-07-27 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 db8fbe221fd3a1..df3d6e80293ccb 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: 2023-07-26 +date: 2023-07-27 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 5b41c47a2a4b6a..96224e4958414d 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: 2023-07-26 +date: 2023-07-27 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 26c604b1e4e9e7..f4c69292717435 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: 2023-07-26 +date: 2023-07-27 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 34554095a366e8..a5157d85968e12 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: 2023-07-26 +date: 2023-07-27 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 d4b5534c22ea4e..142fe7197bd3cc 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: 2023-07-26 +date: 2023-07-27 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 f5e9d76741cc3d..70d24fb276c2f4 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: 2023-07-26 +date: 2023-07-27 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 abf47c8f39219c..43827b6ff38cfa 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: 2023-07-26 +date: 2023-07-27 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 221f652c0df524..29d0e6e1218432 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: 2023-07-26 +date: 2023-07-27 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 8bcdfdfb548c27..25e7d3598d6378 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: 2023-07-26 +date: 2023-07-27 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 67cb9230444408..85b9ab3e0a0a66 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: 2023-07-26 +date: 2023-07-27 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 fcebd29d0b5124..588033dbf7e90f 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: 2023-07-26 +date: 2023-07-27 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 3050a30b101883..7d5032f3171c09 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: 2023-07-26 +date: 2023-07-27 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 26c37009429ad8..25ab5d11a16400 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: 2023-07-26 +date: 2023-07-27 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 62607133482ef7..0afdae81f00bd0 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: 2023-07-26 +date: 2023-07-27 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 728f7ecf0d8b93..be1069ccadc3e9 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: 2023-07-26 +date: 2023-07-27 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 25f4019ea34ba9..c6b5e2d53d7824 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: 2023-07-26 +date: 2023-07-27 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 936ba9cb12715e..a6367ccbd5f23f 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: 2023-07-26 +date: 2023-07-27 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 bfae8cd1619d92..151c68d1c8c736 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: 2023-07-26 +date: 2023-07-27 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 2ca22b421c417a..4ec198289eca39 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: 2023-07-26 +date: 2023-07-27 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 2b19073948fccb..171a9a12992c38 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: 2023-07-26 +date: 2023-07-27 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 b16109f90fe026..c8e4d79ade644b 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: 2023-07-26 +date: 2023-07-27 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 823eb78bb6f11c..e9fb5dbfc209f6 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: 2023-07-26 +date: 2023-07-27 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 d2f465c2d25a43..049490bca4b8f6 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: 2023-07-26 +date: 2023-07-27 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 2502c12b9ec2f2..34885f0052ab6e 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index bfea95fc28b2c8..3eb9040499a8ca 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -5527,6 +5527,14 @@ "plugin": "@kbn/core-http-resources-server-internal", "path": "packages/core/http/core-http-resources-server-internal/src/http_resources_service.test.ts" }, + { + "plugin": "@kbn/core-http-resources-server-internal", + "path": "packages/core/http/core-http-resources-server-internal/src/http_resources_service.test.ts" + }, + { + "plugin": "@kbn/core-http-resources-server-internal", + "path": "packages/core/http/core-http-resources-server-internal/src/http_resources_service.test.ts" + }, { "plugin": "@kbn/core-status-server-internal", "path": "packages/core/status/core-status-server-internal/src/status_service.test.ts" @@ -5543,6 +5551,26 @@ "plugin": "@kbn/core-apps-server-internal", "path": "packages/core/apps/core-apps-server-internal/src/bundle_routes/bundle_route.test.ts" }, + { + "plugin": "@kbn/core-i18n-server-internal", + "path": "packages/core/i18n/core-i18n-server-internal/src/routes/translations.test.ts" + }, + { + "plugin": "@kbn/core-i18n-server-internal", + "path": "packages/core/i18n/core-i18n-server-internal/src/routes/translations.test.ts" + }, + { + "plugin": "@kbn/core-rendering-server-internal", + "path": "packages/core/rendering/core-rendering-server-internal/src/bootstrap/register_bootstrap_route.test.ts" + }, + { + "plugin": "@kbn/core-rendering-server-internal", + "path": "packages/core/rendering/core-rendering-server-internal/src/bootstrap/register_bootstrap_route.test.ts" + }, + { + "plugin": "@kbn/core-rendering-server-internal", + "path": "packages/core/rendering/core-rendering-server-internal/src/bootstrap/register_bootstrap_route.test.ts" + }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/security/types.ts" @@ -7133,10 +7161,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/index.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/generate_assets/generate_assets_route.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/review_rule_installation/review_rule_installation_route.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 69c38ce82a0c9d..d81447f2639d94 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: 2023-07-26 +date: 2023-07-27 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 4e5f94cec972da..ac3cc1e260126f 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: 2023-07-26 +date: 2023-07-27 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 692dd58b0e8ef0..0f07af557228e7 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: 2023-07-26 +date: 2023-07-27 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 a295af043975d8..3bf97504690f4f 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: 2023-07-26 +date: 2023-07-27 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 514323c7a62a37..bbfc7dbda35a18 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: 2023-07-26 +date: 2023-07-27 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 d45d85b6e55a11..09f47e2d69a700 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: 2023-07-26 +date: 2023-07-27 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 b62cccdbfd819e..135b883884ec2f 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: 2023-07-26 +date: 2023-07-27 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 1dfec6b21b9985..5f16a43a72e515 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: 2023-07-26 +date: 2023-07-27 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 decb16f17db3f1..a5c60f379f1242 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: 2023-07-26 +date: 2023-07-27 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 fbf98878a0443b..5e8518f0bfaa43 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: 2023-07-26 +date: 2023-07-27 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 6e64de1e071559..b4eacf13684e01 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: 2023-07-26 +date: 2023-07-27 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 e4bc34175cf06b..a217236f1dd7c1 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: 2023-07-26 +date: 2023-07-27 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 4c62632e53f472..738b745075be9f 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: 2023-07-26 +date: 2023-07-27 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 b92d4d5792ba72..c70fa1b33c0f91 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: 2023-07-26 +date: 2023-07-27 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 7f2c2d958fe2d3..a66d8979be3ca8 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: 2023-07-26 +date: 2023-07-27 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 371a9f7ab14511..b1ddabf7a46e1a 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: 2023-07-26 +date: 2023-07-27 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 bc355cee0d1206..63f7595ac7f0dd 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: 2023-07-26 +date: 2023-07-27 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 fe209565cfa911..d8850a6c86dd00 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: 2023-07-26 +date: 2023-07-27 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 3b0b2d7bec4c72..34470c4c617522 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: 2023-07-26 +date: 2023-07-27 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 cfae048e430058..d3132b956341d5 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: 2023-07-26 +date: 2023-07-27 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 99e3bfeeb57e11..c63f47b011aac3 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: 2023-07-26 +date: 2023-07-27 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 6f078a7abc0f7b..f0d2440492a1eb 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: 2023-07-26 +date: 2023-07-27 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 9c8ca7bd55d0bb..fc3a00305de63b 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: 2023-07-26 +date: 2023-07-27 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 0a2ee1a9891fe1..de3d7dabd903da 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: 2023-07-26 +date: 2023-07-27 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 e5a38715634ee0..8495fea1d4bfc2 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: 2023-07-26 +date: 2023-07-27 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 672177c2a6abb6..47b0733186acdc 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: 2023-07-26 +date: 2023-07-27 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 942f091a590409..eb96a47c353e4e 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: 2023-07-26 +date: 2023-07-27 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 ddc308276d7d50..0f54a4bc4696ae 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: 2023-07-26 +date: 2023-07-27 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 13f54a7d09c7ba..2d4c1e3abe3ef5 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: 2023-07-26 +date: 2023-07-27 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 1a1cbadc399809..72fea171824dfd 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: 2023-07-26 +date: 2023-07-27 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 8075ef9007ccf8..1b5e7f796c1b7f 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: 2023-07-26 +date: 2023-07-27 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 6a51b8f8a55116..3182a4c714b353 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: 2023-07-26 +date: 2023-07-27 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 cd038e31297ab8..44950a99d3c9cf 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: 2023-07-26 +date: 2023-07-27 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 713dcd45964484..340f4bcea205be 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: 2023-07-26 +date: 2023-07-27 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 d4afe3e7c86c45..f6c92e195a9c15 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: 2023-07-26 +date: 2023-07-27 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 6baec459d983ee..d51ed42b6fe278 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: 2023-07-26 +date: 2023-07-27 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 92ca9a0d9778be..896483f9160f85 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: 2023-07-26 +date: 2023-07-27 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_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 9b026e2115f16e..55c7caf403e3a9 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: 2023-07-26 +date: 2023-07-27 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 7cdbfdaa1f2d8e..09e11de1a1c40c 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: 2023-07-26 +date: 2023-07-27 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 88344dd33efac5..ff7beb3a4da0ea 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: 2023-07-26 +date: 2023-07-27 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 83391e32ef5780..7f9bfd1322058c 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: 2023-07-26 +date: 2023-07-27 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 eed4e716a17bc8..3bc57c33e96d62 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: 2023-07-26 +date: 2023-07-27 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 4f3244dcb2fb40..fe9d9368688255 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: 2023-07-26 +date: 2023-07-27 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 b3f8259d64078e..47950bcd120089 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: 2023-07-26 +date: 2023-07-27 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 a46a53035fdcd8..4a1b645ee56294 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: 2023-07-26 +date: 2023-07-27 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 0f6076d1a29a53..570705d30e6f1f 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: 2023-07-26 +date: 2023-07-27 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 ed020558789aff..d1e0cffd6111ba 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: 2023-07-26 +date: 2023-07-27 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 0f7f21941ce55d..05febc93ded9b5 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: 2023-07-26 +date: 2023-07-27 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 8bbf20a1504f5c..a5e04ae0aa220a 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: 2023-07-26 +date: 2023-07-27 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 4ec67fd813ab06..3d2fc48f220848 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: 2023-07-26 +date: 2023-07-27 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 7f1b6f3ca9c8e9..4060a0c50b999e 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: 2023-07-26 +date: 2023-07-27 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 ae234b11acaf1a..9c93854f4991d2 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: 2023-07-26 +date: 2023-07-27 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 1459ca0088e3ce..f4e3c4e5723eca 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: 2023-07-26 +date: 2023-07-27 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 df94083947f817..47c190e62d2ae6 100644 --- a/api_docs/kbn_core_saved_objects_common.devdocs.json +++ b/api_docs/kbn_core_saved_objects_common.devdocs.json @@ -2502,22 +2502,6 @@ "plugin": "lens", "path": "x-pack/plugins/lens/common/embeddable_factory/index.ts" }, - { - "plugin": "cases", - "path": "x-pack/plugins/cases/server/attachment_framework/so_references.ts" - }, - { - "plugin": "cases", - "path": "x-pack/plugins/cases/server/attachment_framework/so_references.ts" - }, - { - "plugin": "cases", - "path": "x-pack/plugins/cases/server/attachment_framework/so_references.ts" - }, - { - "plugin": "cases", - "path": "x-pack/plugins/cases/server/attachment_framework/so_references.ts" - }, { "plugin": "maps", "path": "x-pack/plugins/maps/common/migrations/references.ts" diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index aad520a2ee9c16..63e8e77bf08132 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: 2023-07-26 +date: 2023-07-27 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 db5814034a67f7..2c74406345ab8d 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: 2023-07-26 +date: 2023-07-27 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 f81185636cd8eb..0a3d464d63b88d 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: 2023-07-26 +date: 2023-07-27 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 c0bd63ed0c8ef9..0dd65be7efe751 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: 2023-07-26 +date: 2023-07-27 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 fb5ed39df26a1a..f9b09a55e5f34f 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index db62171502e092..6a04d41e93e309 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: 2023-07-26 +date: 2023-07-27 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 fff068086d1dee..c9eaae021d959f 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: 2023-07-26 +date: 2023-07-27 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 8ceee79d992ad4..cb46d18ef214db 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: 2023-07-26 +date: 2023-07-27 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 61166f2435c802..4a00a53ca3041d 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: 2023-07-26 +date: 2023-07-27 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 69437abb956c31..29fb952f1d6890 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: 2023-07-26 +date: 2023-07-27 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 8d8ca8103c436b..dfd48995c9d92f 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: 2023-07-26 +date: 2023-07-27 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 d0ffda2c452350..ac620aa2a9a543 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: 2023-07-26 +date: 2023-07-27 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 4c6509dbb0eeaa..b11f5cd32cf78c 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: 2023-07-26 +date: 2023-07-27 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 d4f0f022c56da0..98090f627fd521 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: 2023-07-26 +date: 2023-07-27 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 3cf9805b8cf097..c9cb231c2cf185 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: 2023-07-26 +date: 2023-07-27 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 edb5bcb1f520f5..e2414c5f8156ac 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: 2023-07-26 +date: 2023-07-27 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 d9d35f1a3d8d35..921996f40a4f9f 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: 2023-07-26 +date: 2023-07-27 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_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index f393082c36d159..b69e474034c158 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: 2023-07-26 +date: 2023-07-27 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 aaf2a7094b34eb..27d4ab35d851a4 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: 2023-07-26 +date: 2023-07-27 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 bea4ceb55ab5ee..da83c7ec9f1095 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: 2023-07-26 +date: 2023-07-27 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_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index 99da55e7e86f7d..618d8e79303eb3 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 0e5d3dd66f1de3..43a0c3ece34bc3 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: 2023-07-26 +date: 2023-07-27 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 c559e836404a64..14986507dad4b5 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: 2023-07-26 +date: 2023-07-27 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 5ab5be9fbbe35b..2caf9c412321f3 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: 2023-07-26 +date: 2023-07-27 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 31c6b345fca8a0..c787e40e1ea785 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: 2023-07-26 +date: 2023-07-27 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 45c552c0c7be0b..1fde7719742303 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: 2023-07-26 +date: 2023-07-27 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 0e157c0f7b7c6a..0d7da9ec93365e 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: 2023-07-26 +date: 2023-07-27 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 fa42a6456f224b..8fdbbc86f2032c 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: 2023-07-26 +date: 2023-07-27 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 9d0aed1e111412..970801671a677c 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: 2023-07-26 +date: 2023-07-27 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 4203b3667dbc68..c426e915c73eb9 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: 2023-07-26 +date: 2023-07-27 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 90af18fe231767..0cbd850f51087e 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: 2023-07-26 +date: 2023-07-27 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 48cedb2b9e4b0c..bc1d0ada79b601 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: 2023-07-26 +date: 2023-07-27 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 6747cdf69d78c7..4bfba4b001d15f 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: 2023-07-26 +date: 2023-07-27 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 4d96dcd7b674f4..cff381abd3d0e1 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: 2023-07-26 +date: 2023-07-27 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 06a44f31c2dbde..d3ddd1d0186515 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: 2023-07-26 +date: 2023-07-27 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 c13b25f7dede7b..03cc7814ff608e 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: 2023-07-26 +date: 2023-07-27 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 fa6348260ec494..add62b1d333d8d 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 96b5564ee0215a..0506f77492225c 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 53628daebb3902..96178f3e3824bf 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 1c9b5d6d6df09f..ff9412c03d9eb4 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: 2023-07-26 +date: 2023-07-27 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 7d6a8e6ad829b7..27a5ad5e5bd015 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: 2023-07-26 +date: 2023-07-27 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 60be781aa97f51..4231a969e79389 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: 2023-07-26 +date: 2023-07-27 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 8b4c7da98f379d..554e789a9bc2f0 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: 2023-07-26 +date: 2023-07-27 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 0a3849f3e33c04..ab4e1672bcff3b 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: 2023-07-26 +date: 2023-07-27 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 c33c54ae5b6f0a..b7c216a7d8a973 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: 2023-07-26 +date: 2023-07-27 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 e50698c6602efe..39dbf514105a75 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: 2023-07-26 +date: 2023-07-27 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 2251c94cc5665c..9441b6bfdcc097 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: 2023-07-26 +date: 2023-07-27 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 de4c409a032ba2..7683279ae1cd64 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: 2023-07-26 +date: 2023-07-27 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 bec82ac891e12a..4413a550777fda 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: 2023-07-26 +date: 2023-07-27 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 9fd92ff897e078..c6cc82d44a2a5a 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: 2023-07-26 +date: 2023-07-27 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 7578a67d323623..0736334307edc0 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: 2023-07-26 +date: 2023-07-27 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 46c0e7c68f8c5c..47bb9cfffd526f 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: 2023-07-26 +date: 2023-07-27 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 fb700d410cf046..34f0162e367660 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: 2023-07-26 +date: 2023-07-27 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 b82478d3a1c8ff..a0378239d5d30a 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.devdocs.json b/api_docs/kbn_discover_utils.devdocs.json index 8407e0f1d5e73a..6ae82d7acfccd4 100644 --- a/api_docs/kbn_discover_utils.devdocs.json +++ b/api_docs/kbn_discover_utils.devdocs.json @@ -877,7 +877,323 @@ "initialIsOpen": false } ], - "misc": [], + "misc": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.CONTEXT_DEFAULT_SIZE_SETTING", + "type": "string", + "tags": [], + "label": "CONTEXT_DEFAULT_SIZE_SETTING", + "description": [], + "signature": [ + "\"context:defaultSize\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.CONTEXT_STEP_SETTING", + "type": "string", + "tags": [], + "label": "CONTEXT_STEP_SETTING", + "description": [], + "signature": [ + "\"context:step\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.CONTEXT_TIE_BREAKER_FIELDS_SETTING", + "type": "string", + "tags": [], + "label": "CONTEXT_TIE_BREAKER_FIELDS_SETTING", + "description": [], + "signature": [ + "\"context:tieBreakerFields\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.DEFAULT_COLUMNS_SETTING", + "type": "string", + "tags": [], + "label": "DEFAULT_COLUMNS_SETTING", + "description": [], + "signature": [ + "\"defaultColumns\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.DOC_HIDE_TIME_COLUMN_SETTING", + "type": "string", + "tags": [], + "label": "DOC_HIDE_TIME_COLUMN_SETTING", + "description": [], + "signature": [ + "\"doc_table:hideTimeColumn\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.DOC_TABLE_LEGACY", + "type": "string", + "tags": [], + "label": "DOC_TABLE_LEGACY", + "description": [], + "signature": [ + "\"doc_table:legacy\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.ENABLE_SQL", + "type": "string", + "tags": [], + "label": "ENABLE_SQL", + "description": [], + "signature": [ + "\"discover:enableSql\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.FIELDS_LIMIT_SETTING", + "type": "string", + "tags": [], + "label": "FIELDS_LIMIT_SETTING", + "description": [], + "signature": [ + "\"fields:popularLimit\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.HIDE_ANNOUNCEMENTS", + "type": "string", + "tags": [], + "label": "HIDE_ANNOUNCEMENTS", + "description": [], + "signature": [ + "\"hideAnnouncements\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.MAX_DOC_FIELDS_DISPLAYED", + "type": "string", + "tags": [], + "label": "MAX_DOC_FIELDS_DISPLAYED", + "description": [], + "signature": [ + "\"discover:maxDocFieldsDisplayed\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.MODIFY_COLUMNS_ON_SWITCH", + "type": "string", + "tags": [], + "label": "MODIFY_COLUMNS_ON_SWITCH", + "description": [], + "signature": [ + "\"discover:modifyColumnsOnSwitch\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.ROW_HEIGHT_OPTION", + "type": "string", + "tags": [], + "label": "ROW_HEIGHT_OPTION", + "description": [], + "signature": [ + "\"discover:rowHeightOption\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.SAMPLE_ROWS_PER_PAGE_SETTING", + "type": "string", + "tags": [], + "label": "SAMPLE_ROWS_PER_PAGE_SETTING", + "description": [], + "signature": [ + "\"discover:sampleRowsPerPage\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.SAMPLE_SIZE_SETTING", + "type": "string", + "tags": [], + "label": "SAMPLE_SIZE_SETTING", + "description": [], + "signature": [ + "\"discover:sampleSize\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.SEARCH_EMBEDDABLE_TYPE", + "type": "string", + "tags": [], + "label": "SEARCH_EMBEDDABLE_TYPE", + "description": [], + "signature": [ + "\"search\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.SEARCH_FIELDS_FROM_SOURCE", + "type": "string", + "tags": [], + "label": "SEARCH_FIELDS_FROM_SOURCE", + "description": [], + "signature": [ + "\"discover:searchFieldsFromSource\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.SEARCH_ON_PAGE_LOAD_SETTING", + "type": "string", + "tags": [], + "label": "SEARCH_ON_PAGE_LOAD_SETTING", + "description": [], + "signature": [ + "\"discover:searchOnPageLoad\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.SHOW_FIELD_STATISTICS", + "type": "string", + "tags": [], + "label": "SHOW_FIELD_STATISTICS", + "description": [], + "signature": [ + "\"discover:showFieldStatistics\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.SHOW_MULTIFIELDS", + "type": "string", + "tags": [], + "label": "SHOW_MULTIFIELDS", + "description": [], + "signature": [ + "\"discover:showMultiFields\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.SORT_DEFAULT_ORDER_SETTING", + "type": "string", + "tags": [], + "label": "SORT_DEFAULT_ORDER_SETTING", + "description": [], + "signature": [ + "\"discover:sort:defaultOrder\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.TRUNCATE_MAX_HEIGHT", + "type": "string", + "tags": [], + "label": "TRUNCATE_MAX_HEIGHT", + "description": [], + "signature": [ + "\"truncate:maxHeight\"" + ], + "path": "packages/kbn-discover-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], "objects": [] } } \ No newline at end of file diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 92f24ade4e9016..60d717b227510f 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 38 | 0 | 13 | 3 | +| 59 | 0 | 34 | 3 | ## Common @@ -31,3 +31,6 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k ### Enums +### Consts, variables and types + + diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 569745ac98f8a7..0cad193aea9dbf 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: 2023-07-26 +date: 2023-07-27 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 90cec5523a1a26..3bad7e03e299a2 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: 2023-07-26 +date: 2023-07-27 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 7f81b8875e9bce..80cd17b167f734 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: 2023-07-26 +date: 2023-07-27 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 f173ed63092968..70923631a490f5 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index 1f381862b70ca5..86883c6a83445e 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 0a81e9cdda3153..80f2b75a11cef2 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: 2023-07-26 +date: 2023-07-27 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_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 89225a1b2250e8..e20d363ed8426e 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index d1af672b46cbd6..d7e62e4e8df47d 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: 2023-07-26 +date: 2023-07-27 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 657780dbe0b0ac..bdfbeb78ad51ed 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: 2023-07-26 +date: 2023-07-27 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 c601e06b49d54c..3b0f3f00f0ddc9 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: 2023-07-26 +date: 2023-07-27 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 18631da4d1b001..5e014827840500 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: 2023-07-26 +date: 2023-07-27 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 9fbcbc63a4a97a..684c60efa4de63 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: 2023-07-26 +date: 2023-07-27 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 095499e4e5b8b1..85a229c5c2161d 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index bc7af6c5efd8ac..255ac85d9c4387 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: 2023-07-26 +date: 2023-07-27 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 46f2ed662e22ca..df70f67aff1d29 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 0fad2eebe7efe9..3f5af56c629294 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index f0c0fd1531b24b..e5aa4a1a96b022 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 0375769823d906..3883dfaa4b36b0 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: 2023-07-26 +date: 2023-07-27 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_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 148238c9311926..52b58c9d240392 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: 2023-07-26 +date: 2023-07-27 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_generate.mdx b/api_docs/kbn_generate.mdx index 1aff3eca305772..75ad4096d8a65f 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: 2023-07-26 +date: 2023-07-27 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 7ee5aa8d4f6795..abdb0b453ab4ab 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: 2023-07-26 +date: 2023-07-27 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 f17d11e9d82903..d328131ce5840e 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_generate_csv_types.mdx b/api_docs/kbn_generate_csv_types.mdx index b041aef67a2be6..f42f4ea878d746 100644 --- a/api_docs/kbn_generate_csv_types.mdx +++ b/api_docs/kbn_generate_csv_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv-types title: "@kbn/generate-csv-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv-types plugin -date: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv-types'] --- import kbnGenerateCsvTypesObj from './kbn_generate_csv_types.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 7f368def9fe4b9..b4c064f88490d8 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: 2023-07-26 +date: 2023-07-27 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 4351879184dc83..bf209dbdffc5fd 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: 2023-07-26 +date: 2023-07-27 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 d8cd3f1ae661af..3857a1faa7e858 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: 2023-07-26 +date: 2023-07-27 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 b63c2707d79a66..5a2afd725ae795 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: 2023-07-26 +date: 2023-07-27 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 277b0f2d69563d..7b8b92d29a7ae4 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: 2023-07-26 +date: 2023-07-27 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 4bab50ee9c1b5f..24c39069a0e72e 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: 2023-07-26 +date: 2023-07-27 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 625451edd2b613..1c3c7af3585e7b 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: 2023-07-26 +date: 2023-07-27 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 7defa8af452c7c..aa5acdc39ef585 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: 2023-07-26 +date: 2023-07-27 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 4ed6fd9fda368b..fb6366728afb5d 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: 2023-07-26 +date: 2023-07-27 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 2d782f77955706..f8f968ea8e6811 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: 2023-07-26 +date: 2023-07-27 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 f4a338dbaf8017..d7fe5f0dcfdbf0 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: 2023-07-26 +date: 2023-07-27 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 b75b607ca7122b..56dde4e9a0ba23 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: 2023-07-26 +date: 2023-07-27 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 136593b30c9895..0e9ba36c56ef82 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: 2023-07-26 +date: 2023-07-27 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 75f40110ba933f..a9d0681142a2ab 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: 2023-07-26 +date: 2023-07-27 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 7995da5a3de917..d138b17cad28bc 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: 2023-07-26 +date: 2023-07-27 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 cb23643524f914..ec0a06a79ab359 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: 2023-07-26 +date: 2023-07-27 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 a29e535ddf2f6b..5812895c0b52b4 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 60269b33d90e6e..0f305574d7a594 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: 2023-07-26 +date: 2023-07-27 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 7771364f666172..2ac5ae2473ead7 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 9f0bf0df84de56..4a48ed6b8139d4 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: 2023-07-26 +date: 2023-07-27 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 e26bb92fb9ff6d..cfc4b05ef7f305 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: 2023-07-26 +date: 2023-07-27 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_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index a99bdab5c8aae6..af90a51db9fab0 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: 2023-07-26 +date: 2023-07-27 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 22bc6843201345..b62e2b20ebb45f 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: 2023-07-26 +date: 2023-07-27 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 899c0f35dfcd1c..f024c4a03ed55f 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: 2023-07-26 +date: 2023-07-27 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 2174dff84d3788..76451efeb0f145 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: 2023-07-26 +date: 2023-07-27 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 8d863722523fc5..26b98ab5008623 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: 2023-07-26 +date: 2023-07-27 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_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index d869b732f1bd0e..f764b9e1da9ea2 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: 2023-07-26 +date: 2023-07-27 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_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 166d77219b5888..3f6ccda303ca42 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: 2023-07-26 +date: 2023-07-27 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 06349bbafcebc4..1d9c3408f96de5 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: 2023-07-26 +date: 2023-07-27 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 c48d91a3a58ca9..b0bd2460b8046c 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: 2023-07-26 +date: 2023-07-27 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 d0cef9c1e67de7..66fa3f6178edb1 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: 2023-07-26 +date: 2023-07-27 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 9d2a5f79bfe275..43deec63443637 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: 2023-07-26 +date: 2023-07-27 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_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index b7ba4edd571942..972ff7b6ebc342 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: 2023-07-26 +date: 2023-07-27 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 5eb42011da584e..e0fac12b4420cf 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: 2023-07-26 +date: 2023-07-27 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 0007c6ebdc477c..f65ba2162998d0 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: 2023-07-26 +date: 2023-07-27 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 26286f5e4c08f9..45ea5fe902b01f 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: 2023-07-26 +date: 2023-07-27 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 c6806a0ea1b0d2..52ea36a1bdf2d2 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: 2023-07-26 +date: 2023-07-27 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 43c7671b01627b..6c6984a6ae822f 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: 2023-07-26 +date: 2023-07-27 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 10b60033a7489f..fbca38460f342c 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: 2023-07-26 +date: 2023-07-27 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 ba3e1644201a5a..296cb733d2b7fb 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: 2023-07-26 +date: 2023-07-27 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 e0665679579bcb..96e99cfbcfa058 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: 2023-07-26 +date: 2023-07-27 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 40944e3e44617c..122566f0e234d1 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: 2023-07-26 +date: 2023-07-27 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 ff5a0a81e1f865..0b1b715ac1cd3f 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: 2023-07-26 +date: 2023-07-27 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 823ce155ace711..a32263d25dcd69 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: 2023-07-26 +date: 2023-07-27 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_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index c2a7d19018f777..577412c1688911 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 4f9a2e7e258876..fd6f767cbe24a2 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: 2023-07-26 +date: 2023-07-27 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 fec96b077a236f..e5f59b7bc0b0c9 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: 2023-07-26 +date: 2023-07-27 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 fe277221dc01c8..e48ab289bc62be 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 68597d30ae8c1c..f802eaf8714b13 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: 2023-07-26 +date: 2023-07-27 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 484aacd52b5ddd..6b6a41c432dd18 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: 2023-07-26 +date: 2023-07-27 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 fd03c8bb42774a..85a6bb97691a10 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: 2023-07-26 +date: 2023-07-27 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_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 74c66c8ab37567..e39021b625d7fa 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: 2023-07-26 +date: 2023-07-27 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_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 8ca02a1b3ef59c..aeb945baa245b1 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: 2023-07-26 +date: 2023-07-27 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 6060a2b18d5134..74e0834b598f37 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index c5416d5ebc09e4..27b09873ea36a5 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: 2023-07-26 +date: 2023-07-27 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 dcb12df5f46d5b..28f3e0893e7491 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 388d2cf5a162dc..a3d443f29cc33c 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: 2023-07-26 +date: 2023-07-27 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 20220b01a073c3..4a727554a30429 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: 2023-07-26 +date: 2023-07-27 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 cefba4cfae94c2..ae57623a08e417 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: 2023-07-26 +date: 2023-07-27 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 dbf57ea4efa85a..e1c82af68d26d5 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: 2023-07-26 +date: 2023-07-27 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 54df6f74ecd183..272aff9050d668 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index c256956b1e4642..546ee112c39a9f 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 2a0add29921b7b..dd7a3f3e65e0df 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: 2023-07-26 +date: 2023-07-27 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 57c1418e68120a..3c7b44376c3d98 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: 2023-07-26 +date: 2023-07-27 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 5b0cdbe9939506..f77eaf3c7cce03 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index 286721d339e5e3..d8d1b18464eb48 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: 2023-07-26 +date: 2023-07-27 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 5b4c9532c1fd7a..701cba1e7dbabd 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: 2023-07-26 +date: 2023-07-27 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 f2fafbce477876..0ced337386539e 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: 2023-07-26 +date: 2023-07-27 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 e6b7b8c8d36330..af60de9c16f320 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: 2023-07-26 +date: 2023-07-27 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.devdocs.json b/api_docs/kbn_securitysolution_data_table.devdocs.json index 7284ec68e36f31..0a9919605b82ef 100644 --- a/api_docs/kbn_securitysolution_data_table.devdocs.json +++ b/api_docs/kbn_securitysolution_data_table.devdocs.json @@ -1257,7 +1257,7 @@ "section": "def-common.ViewSelection", "text": "ViewSelection" }, - "; readonly dataViewId: string | null; readonly defaultColumns: (Pick<", + "; readonly dataViewId: string | null; readonly initialized?: boolean | undefined; readonly defaultColumns: (Pick<", "EuiDataGridColumn", ", \"id\" | \"display\" | \"displayAsText\" | \"initialWidth\"> & Pick<", "EuiDataGridColumn", @@ -1271,7 +1271,7 @@ "section": "def-common.IFieldSubType", "text": "IFieldSubType" }, - " | undefined; type?: string | undefined; })[]; readonly initialized?: boolean | undefined; readonly queryFields: string[]; readonly selectAll: boolean; readonly showCheckboxes: boolean; readonly deletedEventIds: string[]; readonly expandedDetail: Partial>; readonly graphEventId?: string | undefined; readonly indexNames: string[]; readonly isSelectAllChecked: boolean; readonly itemsPerPage: number; readonly itemsPerPageOptions: number[]; readonly loadingEventIds: string[]; readonly selectedEventIds: Record(obj: object, schema: T) => [", "TypeOf", - " | null, string | null]" + ", null] | [null, string]" ], "path": "packages/kbn-securitysolution-io-ts-utils/src/validate/index.ts", "deprecated": false, @@ -428,9 +428,9 @@ "signature": [ "(obj: unknown, schema: T) => [", + ">(obj: unknown, schema: T) => [null, string] | [", "TypeOf", - " | null, string | null]" + ", null]" ], "path": "packages/kbn-securitysolution-io-ts-utils/src/validate/index.ts", "deprecated": false, diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index fef92876e6c77d..6e705613455102 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: 2023-07-26 +date: 2023-07-27 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 74511ee7dadaf2..f970218c90501b 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: 2023-07-26 +date: 2023-07-27 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 4b037b20cbd9d6..80d54f57faa8e9 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: 2023-07-26 +date: 2023-07-27 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 6416ae57371084..04ed12f14ca130 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: 2023-07-26 +date: 2023-07-27 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 9f0d4725b1fce9..c21c6c1cec679b 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: 2023-07-26 +date: 2023-07-27 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 60ab15b47fcc9a..213305ad15314f 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: 2023-07-26 +date: 2023-07-27 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 3b219a791c43e9..e5c2c4d91096cf 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: 2023-07-26 +date: 2023-07-27 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 4d66e7a7e8945f..89b907ffcae1b6 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: 2023-07-26 +date: 2023-07-27 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 a93c4cfbe0ab7c..29bdb1a97a48a1 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: 2023-07-26 +date: 2023-07-27 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 5e78839747764f..ca5506f3a799fc 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: 2023-07-26 +date: 2023-07-27 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_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 06ec7fb6df995a..5ae3fe9eac78d1 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: 2023-07-26 +date: 2023-07-27 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_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index efa85ee17c3f2b..30463f7a2d1ef6 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: 2023-07-26 +date: 2023-07-27 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 d63ad823c47c59..02001d299f3098 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: 2023-07-26 +date: 2023-07-27 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 d30a977c61af09..7a6d0a6f97c7c1 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: 2023-07-26 +date: 2023-07-27 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_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index f569ae4b0a3df5..dc87f655bcddeb 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.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 66ecaf6ac3a621..355f6be5f44c0a 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: 2023-07-26 +date: 2023-07-27 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_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index a4a1297287a875..5e92ba89a47be4 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index eff8902f88b5db..b469f33f05340b 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: 2023-07-26 +date: 2023-07-27 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 414846a76f3a94..6e1de624b4852a 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: 2023-07-26 +date: 2023-07-27 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 ce6d83238f289c..7c065f5c456a9e 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: 2023-07-26 +date: 2023-07-27 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 118b1ce3ed264a..4065308eced908 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: 2023-07-26 +date: 2023-07-27 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_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index c0e36ef0a84bf4..a73333d8387ba0 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: 2023-07-26 +date: 2023-07-27 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 d9b5c4e9b3c495..b79e88accf2183 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: 2023-07-26 +date: 2023-07-27 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 cb59d3f410eb8b..2aabd174a07c55 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: 2023-07-26 +date: 2023-07-27 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 4dd1735a29909d..df8fa79cebd3cb 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: 2023-07-26 +date: 2023-07-27 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 eae291edbc8522..4e8f0af2120252 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: 2023-07-26 +date: 2023-07-27 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 99c113891118e1..53b3cdf8b8bd71 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: 2023-07-26 +date: 2023-07-27 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 c8c8f74e3b777e..da97a6ae1ac7da 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: 2023-07-26 +date: 2023-07-27 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 3d3012ede8cd31..aa5ec412a77d37 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: 2023-07-26 +date: 2023-07-27 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 b86a54920e8d48..71674c5ce83406 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: 2023-07-26 +date: 2023-07-27 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 361fe4e06960f8..bc69d395368d78 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: 2023-07-26 +date: 2023-07-27 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 0dd1225479411f..3ae4bdeb4c90f0 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: 2023-07-26 +date: 2023-07-27 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 4d9f213e35ff47..d3abe54e4a4d72 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: 2023-07-26 +date: 2023-07-27 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 b8fc33ab04a91b..2cbf4fb45a2350 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: 2023-07-26 +date: 2023-07-27 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 96a79309ac3c00..03230de3c9ebee 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: 2023-07-26 +date: 2023-07-27 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 59166f4235c99b..55b18b55488a6a 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: 2023-07-26 +date: 2023-07-27 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 4b72ae7a7475d6..9c3d39eb32df02 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: 2023-07-26 +date: 2023-07-27 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 33a80f0f36778c..2f8e4dc07d5a86 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: 2023-07-26 +date: 2023-07-27 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 cbfc17c3f9bb7d..85c314a694700a 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: 2023-07-26 +date: 2023-07-27 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 4fc974a331207e..34c5a75d92cf30 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: 2023-07-26 +date: 2023-07-27 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 c52cd3c569373c..ec4917115f07d6 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: 2023-07-26 +date: 2023-07-27 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 0de7239dd6694e..b403b7280882d9 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: 2023-07-26 +date: 2023-07-27 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 f4930a02761821..5e7d6b04a6ccde 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: 2023-07-26 +date: 2023-07-27 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 050ba98710abef..670027e21046f1 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: 2023-07-26 +date: 2023-07-27 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 48be228c2c0ca3..cc945c83bf96c9 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: 2023-07-26 +date: 2023-07-27 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 819fd601aa4706..4b0158779346d0 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: 2023-07-26 +date: 2023-07-27 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 024e75fd3202b0..113b262fcba9f8 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: 2023-07-26 +date: 2023-07-27 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 b38695c89bc8c9..183e904d0cfbcb 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: 2023-07-26 +date: 2023-07-27 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 6a9d195b1ded2f..704d63a0abefe6 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: 2023-07-26 +date: 2023-07-27 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 55bc3cb3b92264..7191fd67f76cb9 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: 2023-07-26 +date: 2023-07-27 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 b8630145de2f61..9f655ac0c06192 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: 2023-07-26 +date: 2023-07-27 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 f2b4c70e232a87..703e1132c42040 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: 2023-07-26 +date: 2023-07-27 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 51c948202f3665..a81fe2459754dd 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: 2023-07-26 +date: 2023-07-27 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 8c8774eea65a57..ecccb61945808f 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 6ac7c1f3bb010a..80cfa650df2263 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: 2023-07-26 +date: 2023-07-27 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 f842e2e1dc0433..d17cf0682c3587 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: 2023-07-26 +date: 2023-07-27 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 d3874e235d5216..0d717d47c0e58b 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: 2023-07-26 +date: 2023-07-27 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 45d07760ba4307..cb5fb456bea28e 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: 2023-07-26 +date: 2023-07-27 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 2bc684684f46ff..48d2bbe7a09d03 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index ad4252b629c974..5b58ea869d3c29 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: 2023-07-26 +date: 2023-07-27 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 c8b9213b0d31b4..dbaabdb09d88fa 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: 2023-07-26 +date: 2023-07-27 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 4dd8a25e43d6aa..f050f697fccddf 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: 2023-07-26 +date: 2023-07-27 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 e64f80983d0cb6..0046c022172e28 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 08cbef3f509dfc..c9f83f2967ef4b 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: 2023-07-26 +date: 2023-07-27 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 05710c460ed4c6..481701bc20ecf8 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: 2023-07-26 +date: 2023-07-27 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 41fddc34c67b29..02134bb5110a79 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: 2023-07-26 +date: 2023-07-27 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 e04159038a298d..9f99038591e8d1 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: 2023-07-26 +date: 2023-07-27 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 9a2044814b3877..ed53d7cfb34f96 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 284e6c893aa1b9..0fdeff031ef388 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index 31101f98d34264..ff89e5ecc3a779 100644 --- a/api_docs/kbn_url_state.mdx +++ b/api_docs/kbn_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state title: "@kbn/url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/url-state plugin -date: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state'] --- import kbnUrlStateObj from './kbn_url_state.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 5f66c7be742208..3a2d2294c7456e 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: 2023-07-26 +date: 2023-07-27 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 aafd60fb6b643a..d6b9986ebb5534 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: 2023-07-26 +date: 2023-07-27 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 08751f4e71efbb..2162bbf928df0a 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: 2023-07-26 +date: 2023-07-27 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 dbf1e7704e3e95..a666bb73398e34 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: 2023-07-26 +date: 2023-07-27 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 458487b525135d..5503fd8190de1d 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index fc9a340bd8f5a8..a46c25337390dd 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index bd5f9c0be48486..c5e1141269aaef 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: 2023-07-26 +date: 2023-07-27 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 6101034e34591a..012d9c39fd3ef8 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: 2023-07-26 +date: 2023-07-27 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 a52b301ac708a3..5787735d82c4c5 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: 2023-07-26 +date: 2023-07-27 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 db742cc9014559..5f783e9de82070 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: 2023-07-26 +date: 2023-07-27 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 a51795c95dc14f..44598f55cec3fe 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: 2023-07-26 +date: 2023-07-27 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 bbd862d1322447..9ff37496a14a91 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: 2023-07-26 +date: 2023-07-27 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 ee2126b382cc55..b6cf3035df40ce 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: 2023-07-26 +date: 2023-07-27 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 bcaa71c78f08cd..7ba5ca013ea01f 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 3c33e084a6553b..d4ed4d236c6d98 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 2363588aa75f6d..10ce3fb31cb75c 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: 2023-07-26 +date: 2023-07-27 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 6b738e3216f149..6037080b5dbad0 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: 2023-07-26 +date: 2023-07-27 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 a0d9d40ec39901..2b9819f964648e 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: 2023-07-26 +date: 2023-07-27 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 afbba41afeaeb2..47012bfff35850 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 93844394146fc0..4cfaa0889fc479 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 1f5993d0221b0a..e3bd0a0aa38720 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: 2023-07-26 +date: 2023-07-27 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 90aa687dbc8281..d0fceaf5ea0a25 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: 2023-07-26 +date: 2023-07-27 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 460077ce77632b..93272d4d7753c3 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: 2023-07-26 +date: 2023-07-27 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 e6add3aec27acb..2e98b437520c02 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 3ea047f5b40372..4835740810f86b 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: 2023-07-26 +date: 2023-07-27 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 75708188287c83..06e6fa1ebc782f 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 307f5b5bbac0e4..1f28830680a621 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: 2023-07-26 +date: 2023-07-27 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 d93f053ac0a58b..6c706c73ef537f 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: 2023-07-26 +date: 2023-07-27 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 5410631131de45..58751f7fd22876 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 9f90d9484daed2..7c53b63d50237a 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 71662 | 555 | 61333 | 1467 | +| 71679 | 555 | 61345 | 1467 | ## Plugin Directory @@ -36,7 +36,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 91 | 1 | 75 | 2 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Canvas application to Kibana | 9 | 0 | 8 | 3 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | The Case management system in Kibana | 80 | 0 | 65 | 27 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | The Case management system in Kibana | 90 | 0 | 71 | 27 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 268 | 16 | 253 | 10 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 65 | 0 | 15 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | Chat available on Elastic Cloud deployments for quicker assistance. | 3 | 0 | 2 | 0 | @@ -63,7 +63,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1012 | 0 | 243 | 2 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 28 | 3 | 24 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 12 | 0 | 10 | 3 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 107 | 0 | 81 | 15 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 86 | 0 | 60 | 15 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 37 | 0 | 35 | 2 | | discoverLogExplorer | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | This plugin exposes and registers Logs+ features. | 0 | 0 | 0 | 0 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | @@ -227,7 +227,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 180 | 0 | 180 | 26 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 11 | 0 | 11 | 0 | | | [@elastic/kibana-qa](https://github.com/orgs/elastic/teams/kibana-qa) | - | 12 | 0 | 12 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 19 | 0 | 17 | 0 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 19 | 0 | 16 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 62 | 1 | 44 | 3 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 11 | 0 | 8 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 78 | 0 | 78 | 0 | @@ -245,7 +245,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 14 | 0 | 14 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 58 | 0 | 40 | 4 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 180 | 1 | 115 | 0 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 187 | 1 | 122 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 7 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 0 | @@ -422,7 +422,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 101 | 0 | 85 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 15 | 0 | 9 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 27 | 2 | 24 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 38 | 0 | 13 | 3 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 59 | 0 | 34 | 3 | | | [@elastic/docs](https://github.com/orgs/elastic/teams/docs) | - | 72 | 0 | 72 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 39 | 0 | 26 | 5 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 6b6b17a9db381b..5892a9a0bb0e9f 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: 2023-07-26 +date: 2023-07-27 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 1552479ef21821..b4dfe37536068e 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index fd6be3ecc9fde3..23cc938ef54fe5 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: 2023-07-26 +date: 2023-07-27 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 3fab407ca56b58..7c6daaa4076b3f 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/reporting_export_types.mdx b/api_docs/reporting_export_types.mdx index 740a68a24df027..e378ee8eedff67 100644 --- a/api_docs/reporting_export_types.mdx +++ b/api_docs/reporting_export_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reportingExportTypes title: "reportingExportTypes" image: https://source.unsplash.com/400x175/?github description: API docs for the reportingExportTypes plugin -date: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reportingExportTypes'] --- import reportingExportTypesObj from './reporting_export_types.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 270e0739b58cb5..503117000e7296 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: 2023-07-26 +date: 2023-07-27 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 e68b93323852f2..375095e9a5d47f 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: 2023-07-26 +date: 2023-07-27 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 f8613d818d3f84..e1e897b32676e0 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: 2023-07-26 +date: 2023-07-27 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 c5a79895750ea8..d7964243a59e70 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: 2023-07-26 +date: 2023-07-27 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 3d3647466570a3..625fa0a85ed472 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: 2023-07-26 +date: 2023-07-27 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 9af94dbbcfd58a..58511707d7c2fb 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: 2023-07-26 +date: 2023-07-27 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 e83ead44085369..0e32e840787437 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: 2023-07-26 +date: 2023-07-27 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 fec222dcad0968..146e58569e3ebe 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: 2023-07-26 +date: 2023-07-27 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 c080cf1c68075e..c7f12d20616b84 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: 2023-07-26 +date: 2023-07-27 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 efc61ff1198051..93965097c1c130 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: 2023-07-26 +date: 2023-07-27 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 f159a4a10fe08b..d870c855c33179 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: 2023-07-26 +date: 2023-07-27 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 c3f824941c0551..a7e6e90ce21e83 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: 2023-07-26 +date: 2023-07-27 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 fcf0fea33a988f..f487650b8b7214 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: 2023-07-26 +date: 2023-07-27 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 d430836e76e8c0..0353c48cbf76cb 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: 2023-07-26 +date: 2023-07-27 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 2ed3fada8e2fb6..90fd476ef1bd0d 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: 2023-07-26 +date: 2023-07-27 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 05a76aa5f42086..5572db7c4ec3cc 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: 2023-07-26 +date: 2023-07-27 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 cebce3c3725ccb..b0ba8d4732393c 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: 2023-07-26 +date: 2023-07-27 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 9a1096d82c88c4..1bd4188e5c3c7a 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: 2023-07-26 +date: 2023-07-27 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 aafc65c3a9451e..d7751f23d16d00 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: 2023-07-26 +date: 2023-07-27 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 81bb7306a03003..815dadcf358b67 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: 2023-07-26 +date: 2023-07-27 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 c40295c2da4aec..62834d79c338ba 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: 2023-07-26 +date: 2023-07-27 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 23b3ec0ebc0a8b..933a9b4a6c7e57 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: 2023-07-26 +date: 2023-07-27 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 837734b191c25c..a7b5a01e8d6a4b 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: 2023-07-26 +date: 2023-07-27 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 0d4ca92bc65862..f6a6ccf575a076 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 418f91eecc78a7..2656df66170dcb 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 31437e4a2a7440..5ada100eefefb1 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: 2023-07-26 +date: 2023-07-27 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 efdca5bc8d4b51..994fe1265851bc 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: 2023-07-26 +date: 2023-07-27 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 a6bfe92ee7958c..d9378d02d0c088 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: 2023-07-26 +date: 2023-07-27 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 ab1c66c0ce931f..6fe1418890d2ac 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: 2023-07-26 +date: 2023-07-27 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 14c05e7c4c671e..c7f01d2cbecc37 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: 2023-07-26 +date: 2023-07-27 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 cffc7ea1e40d33..31085038558316 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: 2023-07-26 +date: 2023-07-27 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 3d8f0b99ef68dd..0a3aaf54b5772c 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: 2023-07-26 +date: 2023-07-27 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 35f695a682bbf0..9390f5cf849a80 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index c450b7a7d465d7..c95578dcbcd5a8 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: 2023-07-26 +date: 2023-07-27 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 6749bb9a108a1f..9f161b231a5d2a 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: 2023-07-26 +date: 2023-07-27 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 af5b2678aafd1c..100b35f569fac8 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 441a09792242ea..687e744857ec20 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: 2023-07-26 +date: 2023-07-27 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 c42258e5c8716f..aa2cab334c2149 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: 2023-07-26 +date: 2023-07-27 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 f70b9786dc78e9..e14a2e67c5080b 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 7c815a274e6b74..1cee6a1031537e 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: 2023-07-26 +date: 2023-07-27 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 92ac089c579a24..8973ffd3afdfa8 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: 2023-07-26 +date: 2023-07-27 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 0ffc78e9cc72c5..7f4a7307ad3856 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: 2023-07-26 +date: 2023-07-27 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 9d8afdab7cf6f4..8cb8769baccbb4 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: 2023-07-26 +date: 2023-07-27 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 74c7dfd1d417cb..886f3bee447ab3 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: 2023-07-26 +date: 2023-07-27 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 aea8eea2d8350c..7a7e9cd58afac1 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: 2023-07-26 +date: 2023-07-27 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 822683ecd4b4a2..ef101c9facc417 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: 2023-07-26 +date: 2023-07-27 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 1de493a3f8eaaa..f1b64d263b47aa 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: 2023-07-26 +date: 2023-07-27 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 d32613872e4d29..315a41f5147696 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: 2023-07-26 +date: 2023-07-27 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 d46cac9202e725..b7db2e1ae32256 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: 2023-07-26 +date: 2023-07-27 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 df3fcd35229f87..2d31cad644c4e4 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: 2023-07-26 +date: 2023-07-27 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 dfb256a81772a8..4566a5109ba1df 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: 2023-07-26 +date: 2023-07-27 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 eab6eef2633ec3..b82073a1eececc 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: 2023-07-26 +date: 2023-07-27 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 caff76d27e8df9..906b9a9c91482c 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: 2023-07-26 +date: 2023-07-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 0ab24e566ccace9f45e8d1b202fca2a30ff3d469 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Thu, 27 Jul 2023 08:57:10 +0200 Subject: [PATCH 23/58] [ML] AIOps: Use Kibana's http service instead of fetch, fix throttling. (#162335) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Originally Kibana's `http` service did not support receiving streams, that's why we used plain `fetch` for this. This has been fixed in #158678, so this PR updates the streaming helpers to use Kibana's `http` service from now on. - The PR also breaks out the response stream code into its own package and restructures it to separate client and server side code. This brings down the `aiops` bundle size by `~300KB`! 🥳 - The approach to client side throttling/buffering was also revamped: There was an issue doing the throttling inside the generator function, it always waited for the timeout. The buffering is now removed from `fetchStream`, instead `useThrottle` from `react-use` is used on the reduced `data` in `useFetchStream`. Loading log rate analysis results got a lot snappier with this update! --- .github/CODEOWNERS | 1 + examples/response_stream/README.md | 12 +- examples/response_stream/common/api/index.ts | 26 +- .../app/pages/page_reducer_stream/index.tsx | 14 +- .../pages/page_simple_string_stream/index.tsx | 21 +- .../server/routes/reducer_stream.ts | 6 +- .../server/routes/single_string_stream.ts | 6 +- examples/response_stream/tsconfig.json | 2 +- package.json | 1 + tsconfig.base.json | 2 + x-pack/packages/ml/aiops_utils/index.ts | 6 - .../ml/aiops_utils/src/fetch_stream.ts | 148 ----------- .../ml/aiops_utils/src/use_fetch_stream.ts | 235 ------------------ x-pack/packages/ml/aiops_utils/tsconfig.json | 3 - x-pack/packages/ml/response_stream/README.md | 11 + .../ml/response_stream/client/fetch_stream.ts | 122 +++++++++ .../ml/response_stream/client/index.ts | 8 + .../client}/string_reducer.ts | 0 .../client/use_fetch_stream.ts | 139 +++++++++++ .../ml/response_stream/jest.config.js | 12 + .../packages/ml/response_stream/kibana.jsonc | 5 + .../packages/ml/response_stream/package.json | 6 + .../server}/accept_compression.test.ts | 0 .../server}/accept_compression.ts | 0 .../ml/response_stream/server/index.ts | 8 + .../server}/stream_factory.test.ts | 0 .../server}/stream_factory.ts | 2 +- .../packages/ml/response_stream/tsconfig.json | 24 ++ x-pack/plugins/aiops/common/api/index.ts | 3 + .../log_rate_analysis_results.tsx | 8 +- .../aiops/server/routes/log_rate_analysis.ts | 2 +- x-pack/plugins/aiops/tsconfig.json | 1 + yarn.lock | 4 + 33 files changed, 385 insertions(+), 453 deletions(-) delete mode 100644 x-pack/packages/ml/aiops_utils/src/fetch_stream.ts delete mode 100644 x-pack/packages/ml/aiops_utils/src/use_fetch_stream.ts create mode 100644 x-pack/packages/ml/response_stream/README.md create mode 100644 x-pack/packages/ml/response_stream/client/fetch_stream.ts create mode 100644 x-pack/packages/ml/response_stream/client/index.ts rename x-pack/packages/ml/{aiops_utils/src => response_stream/client}/string_reducer.ts (100%) create mode 100644 x-pack/packages/ml/response_stream/client/use_fetch_stream.ts create mode 100644 x-pack/packages/ml/response_stream/jest.config.js create mode 100644 x-pack/packages/ml/response_stream/kibana.jsonc create mode 100644 x-pack/packages/ml/response_stream/package.json rename x-pack/packages/ml/{aiops_utils/src => response_stream/server}/accept_compression.test.ts (100%) rename x-pack/packages/ml/{aiops_utils/src => response_stream/server}/accept_compression.ts (100%) create mode 100644 x-pack/packages/ml/response_stream/server/index.ts rename x-pack/packages/ml/{aiops_utils/src => response_stream/server}/stream_factory.test.ts (100%) rename x-pack/packages/ml/{aiops_utils/src => response_stream/server}/stream_factory.ts (99%) create mode 100644 x-pack/packages/ml/response_stream/tsconfig.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8439db6e3ab64e..acd02f0c7d200e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -501,6 +501,7 @@ x-pack/packages/ml/number_utils @elastic/ml-ui x-pack/plugins/ml @elastic/ml-ui x-pack/packages/ml/query_utils @elastic/ml-ui x-pack/packages/ml/random_sampler_utils @elastic/ml-ui +x-pack/packages/ml/response_stream @elastic/ml-ui x-pack/packages/ml/route_utils @elastic/ml-ui x-pack/packages/ml/runtime_field_utils @elastic/ml-ui x-pack/packages/ml/string_hash @elastic/ml-ui diff --git a/examples/response_stream/README.md b/examples/response_stream/README.md index 9f66fc19f23933..73c8a9161b2ce9 100644 --- a/examples/response_stream/README.md +++ b/examples/response_stream/README.md @@ -6,7 +6,7 @@ To run Kibana with the described examples, use `yarn start --run-examples`. The `response_stream` plugin demonstrates API endpoints that can stream data chunks with a single request with gzip/compression support. gzip-streams get decompressed natively by browsers. The plugin demonstrates two use cases to get started: Streaming a raw string as well as a more complex example that streams Redux-like actions to the client which update React state via `useReducer()`. -Code in `@kbn/aiops-utils` contains helpers to set up a stream on the server side (`streamFactory()`) and consume it on the client side via a custom hook (`useFetchStream()`). The utilities make use of TS generics in a way that allows to have type safety for both request related options as well as the returned data. +Code in `@kbn/ml-response-stream` contains helpers to set up a stream on the server side (`streamFactory()`) and consume it on the client side via a custom hook (`useFetchStream()`). The utilities make use of TS generics in a way that allows to have type safety for both request related options as well as the returned data. No additional third party libraries are used in the helpers to make it work. On the server, they integrate with `Hapi` and use node's own `gzip`. On the client, the custom hook abstracts away the necessary logic to consume the stream, internally it makes use of a generator function and `useReducer()` to update React state. @@ -21,8 +21,12 @@ The request's headers get passed on to automatically identify if compression is On the client, the custom hook is used like this: ```ts -const { errors, start, cancel, data, isRunning } = useFetchStream< - ApiSimpleStringStream, typeof basePath ->(`${basePath}/internal/response_stream/simple_string_stream`); +const { + errors, + start, + cancel, + data, + isRunning +} = useFetchStream('/internal/response_stream/simple_string_stream'); ``` diff --git a/examples/response_stream/common/api/index.ts b/examples/response_stream/common/api/index.ts index 8111a77d702742..925ff844e3cfa1 100644 --- a/examples/response_stream/common/api/index.ts +++ b/examples/response_stream/common/api/index.ts @@ -6,31 +6,7 @@ * Side Public License, v 1. */ -import type { - UseFetchStreamCustomReducerParams, - UseFetchStreamParamsDefault, -} from '@kbn/aiops-utils'; - -import { - reducerStreamReducer, - ReducerStreamRequestBodySchema, - ReducerStreamApiAction, -} from './reducer_stream'; -import { SimpleStringStreamRequestBodySchema } from './simple_string_stream'; - -export const API_ENDPOINT = { +export const RESPONSE_STREAM_API_ENDPOINT = { REDUCER_STREAM: '/internal/response_stream/reducer_stream', SIMPLE_STRING_STREAM: '/internal/response_stream/simple_string_stream', } as const; - -export interface ApiReducerStream extends UseFetchStreamCustomReducerParams { - endpoint: typeof API_ENDPOINT.REDUCER_STREAM; - reducer: typeof reducerStreamReducer; - body: ReducerStreamRequestBodySchema; - actions: ReducerStreamApiAction; -} - -export interface ApiSimpleStringStream extends UseFetchStreamParamsDefault { - endpoint: typeof API_ENDPOINT.SIMPLE_STRING_STREAM; - body: SimpleStringStreamRequestBodySchema; -} diff --git a/examples/response_stream/public/containers/app/pages/page_reducer_stream/index.tsx b/examples/response_stream/public/containers/app/pages/page_reducer_stream/index.tsx index 713e2307938f72..466b6ddec75a0f 100644 --- a/examples/response_stream/public/containers/app/pages/page_reducer_stream/index.tsx +++ b/examples/response_stream/public/containers/app/pages/page_reducer_stream/index.tsx @@ -21,14 +21,14 @@ import { EuiText, } from '@elastic/eui'; -import { useFetchStream } from '@kbn/aiops-utils'; +import { useFetchStream } from '@kbn/ml-response-stream/client'; -import { ApiReducerStream } from '../../../../../common/api'; import { initialState, resetStream, reducerStreamReducer, } from '../../../../../common/api/reducer_stream/reducer'; +import { RESPONSE_STREAM_API_ENDPOINT } from '../../../../../common/api'; import { Page } from '../../../../components/page'; @@ -41,16 +41,12 @@ export const PageReducerStream: FC = () => { core: { http, notifications }, } = useDeps(); - const basePath = http?.basePath.get() ?? ''; - const [simulateErrors, setSimulateErrors] = useState(false); const [compressResponse, setCompressResponse] = useState(true); - const { dispatch, start, cancel, data, errors, isCancelled, isRunning } = useFetchStream< - ApiReducerStream, - typeof basePath - >( - `${basePath}/internal/response_stream/reducer_stream`, + const { dispatch, start, cancel, data, errors, isCancelled, isRunning } = useFetchStream( + http, + RESPONSE_STREAM_API_ENDPOINT.REDUCER_STREAM, '1', { compressResponse, simulateErrors }, { reducer: reducerStreamReducer, initialState } diff --git a/examples/response_stream/public/containers/app/pages/page_simple_string_stream/index.tsx b/examples/response_stream/public/containers/app/pages/page_simple_string_stream/index.tsx index 149174b04e3ea8..1656eb26c84da4 100644 --- a/examples/response_stream/public/containers/app/pages/page_simple_string_stream/index.tsx +++ b/examples/response_stream/public/containers/app/pages/page_simple_string_stream/index.tsx @@ -18,26 +18,27 @@ import { EuiText, } from '@elastic/eui'; -import { useFetchStream } from '@kbn/aiops-utils'; +import { useFetchStream } from '@kbn/ml-response-stream/client'; -import { ApiSimpleStringStream } from '../../../../../common/api'; +import { RESPONSE_STREAM_API_ENDPOINT } from '../../../../../common/api'; import { useDeps } from '../../../../hooks/use_deps'; import { Page } from '../../../../components/page'; export const PageSimpleStringStream: FC = () => { const { core } = useDeps(); - const basePath = core.http?.basePath.get() ?? ''; const [compressResponse, setCompressResponse] = useState(true); - const { dispatch, errors, start, cancel, data, isRunning } = useFetchStream< - ApiSimpleStringStream, - typeof basePath - >(`${basePath}/internal/response_stream/simple_string_stream`, '1', { - compressResponse, - timeout: 500, - }); + const { dispatch, errors, start, cancel, data, isRunning } = useFetchStream( + core.http, + RESPONSE_STREAM_API_ENDPOINT.SIMPLE_STRING_STREAM, + '1', + { + compressResponse, + timeout: 500, + } + ); const onClickHandler = async () => { if (isRunning) { diff --git a/examples/response_stream/server/routes/reducer_stream.ts b/examples/response_stream/server/routes/reducer_stream.ts index 1546583c6d3bc6..81ba44205d31b4 100644 --- a/examples/response_stream/server/routes/reducer_stream.ts +++ b/examples/response_stream/server/routes/reducer_stream.ts @@ -7,7 +7,7 @@ */ import type { IRouter, Logger } from '@kbn/core/server'; -import { streamFactory } from '@kbn/aiops-utils'; +import { streamFactory } from '@kbn/ml-response-stream/server'; import { errorAction, @@ -17,12 +17,12 @@ import { deleteEntityAction, ReducerStreamApiAction, } from '../../common/api/reducer_stream'; -import { API_ENDPOINT } from '../../common/api'; +import { RESPONSE_STREAM_API_ENDPOINT } from '../../common/api'; export const defineReducerStreamRoute = (router: IRouter, logger: Logger) => { router.versioned .post({ - path: API_ENDPOINT.REDUCER_STREAM, + path: RESPONSE_STREAM_API_ENDPOINT.REDUCER_STREAM, access: 'internal', }) .addVersion( diff --git a/examples/response_stream/server/routes/single_string_stream.ts b/examples/response_stream/server/routes/single_string_stream.ts index ee55cf3b0bc8e7..26c26f0fc6b667 100644 --- a/examples/response_stream/server/routes/single_string_stream.ts +++ b/examples/response_stream/server/routes/single_string_stream.ts @@ -7,10 +7,10 @@ */ import type { IRouter, Logger } from '@kbn/core/server'; -import { streamFactory } from '@kbn/aiops-utils'; +import { streamFactory } from '@kbn/ml-response-stream/server'; import { simpleStringStreamRequestBodySchema } from '../../common/api/simple_string_stream'; -import { API_ENDPOINT } from '../../common/api'; +import { RESPONSE_STREAM_API_ENDPOINT } from '../../common/api'; function timeout(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); @@ -19,7 +19,7 @@ function timeout(ms: number) { export const defineSimpleStringStreamRoute = (router: IRouter, logger: Logger) => { router.versioned .post({ - path: API_ENDPOINT.SIMPLE_STRING_STREAM, + path: RESPONSE_STREAM_API_ENDPOINT.SIMPLE_STRING_STREAM, access: 'internal', }) .addVersion( diff --git a/examples/response_stream/tsconfig.json b/examples/response_stream/tsconfig.json index 0c65995944cced..0de5b8c0df5a7f 100644 --- a/examples/response_stream/tsconfig.json +++ b/examples/response_stream/tsconfig.json @@ -19,8 +19,8 @@ "@kbn/developer-examples-plugin", "@kbn/data-plugin", "@kbn/kibana-react-plugin", - "@kbn/aiops-utils", "@kbn/config-schema", "@kbn/shared-ux-router", + "@kbn/ml-response-stream", ] } diff --git a/package.json b/package.json index 889b60b621b89b..47e82a89d274fa 100644 --- a/package.json +++ b/package.json @@ -517,6 +517,7 @@ "@kbn/ml-plugin": "link:x-pack/plugins/ml", "@kbn/ml-query-utils": "link:x-pack/packages/ml/query_utils", "@kbn/ml-random-sampler-utils": "link:x-pack/packages/ml/random_sampler_utils", + "@kbn/ml-response-stream": "link:x-pack/packages/ml/response_stream", "@kbn/ml-route-utils": "link:x-pack/packages/ml/route_utils", "@kbn/ml-runtime-field-utils": "link:x-pack/packages/ml/runtime_field_utils", "@kbn/ml-string-hash": "link:x-pack/packages/ml/string_hash", diff --git a/tsconfig.base.json b/tsconfig.base.json index 3c5718da22d825..862dd495164f10 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -996,6 +996,8 @@ "@kbn/ml-query-utils/*": ["x-pack/packages/ml/query_utils/*"], "@kbn/ml-random-sampler-utils": ["x-pack/packages/ml/random_sampler_utils"], "@kbn/ml-random-sampler-utils/*": ["x-pack/packages/ml/random_sampler_utils/*"], + "@kbn/ml-response-stream": ["x-pack/packages/ml/response_stream"], + "@kbn/ml-response-stream/*": ["x-pack/packages/ml/response_stream/*"], "@kbn/ml-route-utils": ["x-pack/packages/ml/route_utils"], "@kbn/ml-route-utils/*": ["x-pack/packages/ml/route_utils/*"], "@kbn/ml-runtime-field-utils": ["x-pack/packages/ml/runtime_field_utils"], diff --git a/x-pack/packages/ml/aiops_utils/index.ts b/x-pack/packages/ml/aiops_utils/index.ts index 27219e7910e8a7..f2c343f2500ac1 100644 --- a/x-pack/packages/ml/aiops_utils/index.ts +++ b/x-pack/packages/ml/aiops_utils/index.ts @@ -7,9 +7,3 @@ export { getSnappedWindowParameters, getWindowParameters } from './src/get_window_parameters'; export type { WindowParameters } from './src/get_window_parameters'; -export { streamFactory } from './src/stream_factory'; -export { useFetchStream } from './src/use_fetch_stream'; -export type { - UseFetchStreamCustomReducerParams, - UseFetchStreamParamsDefault, -} from './src/use_fetch_stream'; diff --git a/x-pack/packages/ml/aiops_utils/src/fetch_stream.ts b/x-pack/packages/ml/aiops_utils/src/fetch_stream.ts deleted file mode 100644 index d52ffcbf1a6d14..00000000000000 --- a/x-pack/packages/ml/aiops_utils/src/fetch_stream.ts +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { ReducerAction } from 'react'; - -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; - -import type { UseFetchStreamParamsDefault } from './use_fetch_stream'; - -type GeneratorError = string | null; - -/** - * Uses `fetch` and `getReader` to receive an API call as a stream with multiple chunks - * as soon as they are available. `fetchStream` is implemented as a generator that will - * yield/emit chunks and can be consumed for example like this: - * - * ```js - * for await (const [error, chunk] of fetchStream(...) { - * ... - * } - * ``` - * - * @param endpoint — The API endpoint including the Kibana basepath. - * @param apiVersion - The API version to be used. - * @param abortCtrl — Abort controller for cancelling the request. - * @param body — The request body. For now all requests are POST. - * @param ndjson — Boolean flag to receive the stream as a raw string or NDJSON. - * @param bufferBounce — A buffer timeout which defaults to 100ms. This collects stream - * chunks for the time of the timeout and only then yields/emits them. - * This is useful so we are more in control of passing on data to - * consuming React components and we won't hammer the DOM with - * updates on every received chunk. - * - * @returns - Yields/emits items in the format [error, value] - * inspired by node's recommended error convention for callbacks. - */ -export async function* fetchStream( - endpoint: `${BasePath}${I['endpoint']}`, - apiVersion: string, - abortCtrl: React.MutableRefObject, - body: I['body'], - ndjson = true, - bufferBounce = 100 -): AsyncGenerator< - [GeneratorError, ReducerAction | Array> | undefined] -> { - let stream: Response; - - try { - stream = await fetch(endpoint, { - signal: abortCtrl.current.signal, - method: 'POST', - headers: { - // This refers to the format of the request body, - // not the response, which will be a uint8array Buffer. - 'Content-Type': 'application/json', - [ELASTIC_HTTP_VERSION_HEADER]: apiVersion, - 'kbn-xsrf': 'stream', - }, - ...(Object.keys(body).length > 0 ? { body: JSON.stringify(body) } : {}), - }); - } catch (error) { - yield [error.toString(), undefined]; - return; - } - - if (!stream.ok) { - yield [`Error ${stream.status}: ${stream.statusText}`, undefined]; - return; - } - - if (stream.body !== null) { - // Note that Firefox 99 doesn't support `TextDecoderStream` yet. - // That's why we skip it here and use `TextDecoder` later to decode each chunk. - // Once Firefox supports it, we can use the following alternative: - // const reader = stream.body.pipeThrough(new TextDecoderStream()).getReader(); - const reader = stream.body.getReader(); - - let partial = ''; - let actionBuffer: Array> = []; - let lastCall = 0; - - while (true) { - try { - const { value: uint8array, done } = await reader.read(); - if (done) break; - - const value = new TextDecoder().decode(uint8array); - - const full = `${partial}${value}`; - const parts = ndjson ? full.split('\n') : [full]; - const last = ndjson ? parts.pop() : ''; - - partial = last ?? ''; - - const actions = (ndjson ? parts.map((p) => JSON.parse(p)) : parts) as Array< - ReducerAction - >; - actionBuffer.push(...actions); - - const now = Date.now(); - - if (now - lastCall >= bufferBounce && actionBuffer.length > 0) { - yield [null, actionBuffer]; - actionBuffer = []; - lastCall = now; - - // In cases where the next chunk takes longer to be received than the `bufferBounce` timeout, - // we trigger this client side timeout to clear a potential intermediate buffer state. - // Since `yield` cannot be passed on to other scopes like callbacks, - // this pattern using a Promise is used to wait for the timeout. - yield new Promise< - [ - GeneratorError, - ReducerAction | Array> | undefined - ] - >((resolve) => { - setTimeout(() => { - if (actionBuffer.length > 0) { - resolve([null, actionBuffer]); - actionBuffer = []; - lastCall = now; - } else { - resolve([null, []]); - } - }, bufferBounce + 10); - }); - } - } catch (error) { - if (error.name !== 'AbortError') { - yield [error.toString(), undefined]; - } - break; - } - } - - // The stream reader might finish with a partially filled actionBuffer so - // we need to clear it once more after the request is done. - if (actionBuffer.length > 0) { - yield [null, actionBuffer]; - actionBuffer.length = 0; - } - } -} diff --git a/x-pack/packages/ml/aiops_utils/src/use_fetch_stream.ts b/x-pack/packages/ml/aiops_utils/src/use_fetch_stream.ts deleted file mode 100644 index e5e8edc136ae88..00000000000000 --- a/x-pack/packages/ml/aiops_utils/src/use_fetch_stream.ts +++ /dev/null @@ -1,235 +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 { - useEffect, - useReducer, - useRef, - useState, - Dispatch, - Reducer, - ReducerAction, - ReducerState, -} from 'react'; - -import { fetchStream } from './fetch_stream'; -import { stringReducer, StringReducer } from './string_reducer'; - -/** - * Custom hook type definition of the base params for an NDJSON stream with custom reducer. - * - * @export - * @interface UseFetchStreamCustomReducerParams - * @typedef {UseFetchStreamCustomReducerParams} - */ -export interface UseFetchStreamCustomReducerParams { - /** - * API endpoint - * @type {string} - */ - endpoint: string; - /** - * API version - * @type {string} - */ - apiVersion: string; - /** - * Request body - * @type {object} - */ - body: object; - /** - * Reducer function to be applied to response chunks. - * @type {Reducer} - */ - reducer: Reducer; -} - -/** - * Custom hook type definition of the base params for a string base stream without a custom reducer. - */ -export interface UseFetchStreamParamsDefault { - /** - * API endpoint - * @type {string} - */ - endpoint: string; - /** - * API version - * @type {string} - */ - apiVersion: string; - /** - * Request body - * @type {object} - */ - body: object; - /** - * Reducer function to be applied to response chunks. - * @type {StringReducer} - */ - reducer: StringReducer; -} - -/** - * The return type of the `useFetchStream` hook. - * - * @interface UseFetchStreamReturnType - * @typedef {UseFetchStreamReturnType} - * @template Data - * @template Action - */ -interface UseFetchStreamReturnType { - cancel: () => void; - data: Data; - dispatch: Dispatch; - errors: string[]; - isCancelled: boolean; - isRunning: boolean; - start: () => Promise; -} - -/** - * This overload allows us to fall back to a simple reducer that - * just acts on a string as the reducer state if no options are supplied. - * - * @export - * @template I - * @template BasePath - * @param {`${I['endpoint']}`} endpoint - API endpoint including Kibana base path. - * @param {I['apiVersion']} apiVersion - API version. - * @param {I['body']} body - API request body. - * @returns {UseFetchStreamReturnType>} - An object with streaming data and methods to act on the stream. - */ -export function useFetchStream( - endpoint: `${BasePath}${I['endpoint']}`, - apiVersion: I['apiVersion'], - body: I['body'] -): UseFetchStreamReturnType>; - -/** - * This overload covers passing in options and will use - * a custom reducer with appropriate type support. - * - * @export - * @template I - * @template BasePath - * @param {`${I['endpoint']}`} endpoint - API endpoint including Kibana base path. - * @param {I['apiVersion']} apiVersion - API version. - * @param {I['body']} body - API request body. - * @param {{ reducer: I['reducer']; initialState: ReducerState }} options - Custom reducer and initial state. - * @returns {UseFetchStreamReturnType, ReducerAction>} - An object with streaming data and methods to act on the stream. - */ -export function useFetchStream< - I extends UseFetchStreamCustomReducerParams, - BasePath extends string ->( - endpoint: `${BasePath}${I['endpoint']}`, - apiVersion: I['apiVersion'], - body: I['body'], - options: { - /** - * Custom reducer - * @type {I['reducer']} - */ - reducer: I['reducer']; - /** - * Initial state - * @type {ReducerState} - */ - initialState: ReducerState; - } -): UseFetchStreamReturnType, ReducerAction>; - -/** - * Custom hook to receive streaming data. - * - * @param endpoint - API endpoint including Kibana base path. - * @param apiVersion - API version. - * @param body - API request body. - * @param options - Optional custom reducer and initial state. - * @returns An object with streaming data and methods to act on the stream. - */ -export function useFetchStream( - endpoint: `${BasePath}${I['endpoint']}`, - apiVersion: string, - body: I['body'], - options?: { - /** - * Custom reducer - * @type {I['reducer']} - */ - reducer: I['reducer']; - /** - * Initial state - * @type {ReducerState} - */ - initialState: ReducerState; - } -): UseFetchStreamReturnType, ReducerAction> { - const [errors, setErrors] = useState([]); - const [isCancelled, setIsCancelled] = useState(false); - const [isRunning, setIsRunning] = useState(false); - - const reducer = (options?.reducer ?? stringReducer) as I['reducer']; - const initialState = (options?.initialState ?? '') as ReducerState; - - const [data, dispatch] = useReducer(reducer, initialState); - - const abortCtrl = useRef(new AbortController()); - - const addError = (error: string) => { - setErrors((prevErrors) => [...prevErrors, error]); - }; - - const start = async () => { - if (isRunning) { - addError('Restart not supported yet.'); - return; - } - - setErrors([]); - setIsRunning(true); - setIsCancelled(false); - - abortCtrl.current = new AbortController(); - - for await (const [fetchStreamError, actions] of fetchStream< - UseFetchStreamCustomReducerParams, - BasePath - >(endpoint, apiVersion, abortCtrl, body, options !== undefined)) { - if (fetchStreamError !== null) { - addError(fetchStreamError); - } else if (actions.length > 0) { - dispatch(actions as ReducerAction); - } - } - - setIsRunning(false); - }; - - const cancel = () => { - abortCtrl.current.abort(); - setIsCancelled(true); - setIsRunning(false); - }; - - // If components using this custom hook get unmounted, cancel any ongoing request. - useEffect(() => { - return () => abortCtrl.current.abort(); - }, []); - - return { - cancel, - data, - dispatch, - errors, - isCancelled, - isRunning, - start, - }; -} diff --git a/x-pack/packages/ml/aiops_utils/tsconfig.json b/x-pack/packages/ml/aiops_utils/tsconfig.json index af00c4fe5a36c3..806b5b07e847e2 100644 --- a/x-pack/packages/ml/aiops_utils/tsconfig.json +++ b/x-pack/packages/ml/aiops_utils/tsconfig.json @@ -14,9 +14,6 @@ "**/*.tsx", ], "kbn_references": [ - "@kbn/logging", - "@kbn/core-http-server", - "@kbn/core-http-common", "@kbn/ml-is-populated-object", ], "exclude": [ diff --git a/x-pack/packages/ml/response_stream/README.md b/x-pack/packages/ml/response_stream/README.md new file mode 100644 index 00000000000000..979f2000c6f8db --- /dev/null +++ b/x-pack/packages/ml/response_stream/README.md @@ -0,0 +1,11 @@ +# @kbn/ml-response-stream + +This package provides utilities to create HTTP streaming endpoints. + +- Supports optional `gzip` compression. +- Streams can be plain strings or NDJSON. +- The provided custom hook `useFetchStream()` supports debouncing to avoid flooding the DOM with lots of small incremental updates. The hook also takes care of handling potential partial chunks. + +The package does not expose `index.ts` at its root, instead there's a `client` and `server` directory you should deep-import from. + +For more details and examples on how to use the package please refer to `examples/response_stream/README.md`. diff --git a/x-pack/packages/ml/response_stream/client/fetch_stream.ts b/x-pack/packages/ml/response_stream/client/fetch_stream.ts new file mode 100644 index 00000000000000..da262f423d47da --- /dev/null +++ b/x-pack/packages/ml/response_stream/client/fetch_stream.ts @@ -0,0 +1,122 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import startsWith from 'lodash/startsWith'; +import type { Reducer, ReducerAction } from 'react'; + +import type { HttpSetup } from '@kbn/core/public'; + +type GeneratorError = string | null; + +/** + * Uses `fetch` and `getReader` to receive an API call as a stream with multiple chunks + * as soon as they are available. `fetchStream` is implemented as a generator that will + * yield/emit chunks and can be consumed for example like this: + * + * ```js + * for await (const [error, chunk] of fetchStream(...) { + * ... + * } + * ``` + * + * Note on the use of `any`: + * The generic `R` extends from `Reducer` + * to match the definition in React itself. + * + * @param endpoint — The API endpoint including the Kibana basepath. + * @param apiVersion - Optional API version to be used. + * @param abortCtrl — Abort controller for cancelling the request. + * @param body — The request body. For now all requests are POST. + * @param ndjson — Boolean flag to receive the stream as a raw string or NDJSON. + * + * @returns - Yields/emits items in the format [error, value] + * inspired by node's recommended error convention for callbacks. + */ +export async function* fetchStream>( + http: HttpSetup, + endpoint: string, + apiVersion: string | undefined, + abortCtrl: React.MutableRefObject, + body?: B, + ndjson = true +): AsyncGenerator<[GeneratorError, ReducerAction | Array> | undefined]> { + let stream: Readonly | undefined; + + try { + const response = await http.post(endpoint, { + signal: abortCtrl.current.signal, + version: apiVersion, + asResponse: true, + rawResponse: true, + ...(body && Object.keys(body).length > 0 ? { body: JSON.stringify(body) } : {}), + }); + + stream = response.response; + } catch (error) { + yield [error.toString(), undefined]; + return; + } + + if (!stream) { + yield [`Error: Response was undefined`, undefined]; + return; + } + + if (!stream.ok) { + yield [`Error ${stream.status}: ${stream.statusText}`, undefined]; + return; + } + + if (stream.body !== null) { + // Note that Firefox 99 doesn't support `TextDecoderStream` yet. + // That's why we skip it here and use `TextDecoder` later to decode each chunk. + // Once Firefox supports it, we can use the following alternative: + // const reader = stream.body.pipeThrough(new TextDecoderStream()).getReader(); + const reader = stream.body.getReader(); + + let partial = ''; + + while (true) { + try { + const { value: uint8array, done } = await reader.read(); + if (done) break; + + const value = new TextDecoder().decode(uint8array); + + const full = `${partial}${value}`; + const parts = ndjson ? full.split('\n') : [full]; + const last = ndjson ? parts.pop() : ''; + + partial = last ?? ''; + + const actions = ( + ndjson + ? parts + .map((p) => { + // Check if the response is an `event: ` or `data: ` prefixed SSE event. + // Note this is a workaround, we don't have actual support for SSE events yet. + if (p === '' || startsWith(p, 'event: ') || p === 'data: [DONE]') { + return '[IGNORE]'; + } else if (startsWith(p, 'data: ')) { + return JSON.parse(p.split('data: ')[1]); + } + return JSON.parse(p); + }) + .filter((p) => p !== '[IGNORE]') + : parts + ) as Array>; + + yield [null, actions]; + } catch (error) { + if (error.name !== 'AbortError') { + yield [error.toString(), undefined]; + } + break; + } + } + } +} diff --git a/x-pack/packages/ml/response_stream/client/index.ts b/x-pack/packages/ml/response_stream/client/index.ts new file mode 100644 index 00000000000000..750442161a5699 --- /dev/null +++ b/x-pack/packages/ml/response_stream/client/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 { useFetchStream } from './use_fetch_stream'; diff --git a/x-pack/packages/ml/aiops_utils/src/string_reducer.ts b/x-pack/packages/ml/response_stream/client/string_reducer.ts similarity index 100% rename from x-pack/packages/ml/aiops_utils/src/string_reducer.ts rename to x-pack/packages/ml/response_stream/client/string_reducer.ts diff --git a/x-pack/packages/ml/response_stream/client/use_fetch_stream.ts b/x-pack/packages/ml/response_stream/client/use_fetch_stream.ts new file mode 100644 index 00000000000000..bfd01b607ffacb --- /dev/null +++ b/x-pack/packages/ml/response_stream/client/use_fetch_stream.ts @@ -0,0 +1,139 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + useEffect, + useReducer, + useRef, + useState, + type Reducer, + type ReducerAction, + type ReducerState, +} from 'react'; +import useThrottle from 'react-use/lib/useThrottle'; + +import type { HttpSetup } from '@kbn/core/public'; +import { isPopulatedObject } from '@kbn/ml-is-populated-object'; + +import { fetchStream } from './fetch_stream'; +import { stringReducer, type StringReducer } from './string_reducer'; + +// This pattern with a dual ternary allows us to default to StringReducer +// and if a custom reducer is supplied fall back to that one instead. +// The complexity in here allows us to create a simpler API surface where +// these generics can be infered from the arguments and don't have to be +// supplied additionally. Note on the use of `any`: `Reducer` +// is used to match the type definition in React itself. +type CustomReducer = T extends StringReducer + ? StringReducer + : T extends Reducer + ? T + : never; + +// Wrapped reducer options in the format they need to be passed in as arguments. +interface FetchStreamCustomReducer { + reducer: CustomReducer; + initialState: ReducerState>; +} + +// Type guard for custom reducer hook argument +function isReducerOptions(arg: unknown): arg is CustomReducer { + return isPopulatedObject(arg, ['reducer', 'initialState']); +} + +/** + * Custom hook to receive streaming data. + * + * Note on the use of `any`: + * The generic `R` extends from `Reducer` + * to match the definition in React itself. + * + * @param http Kibana HTTP client. + * @param endpoint API endpoint including Kibana base path. + * @param apiVersion Optional API version. + * @param body Optional API request body. + * @param customReducer Optional custom reducer and initial state. + * @returns An object with streaming data and methods to act on the stream. + */ +export function useFetchStream>( + http: HttpSetup, + endpoint: string, + apiVersion?: string, + body?: B, + customReducer?: FetchStreamCustomReducer +) { + const [errors, setErrors] = useState([]); + const [isCancelled, setIsCancelled] = useState(false); + const [isRunning, setIsRunning] = useState(false); + + const reducerWithFallback = isReducerOptions(customReducer) + ? customReducer + : ({ reducer: stringReducer, initialState: '' } as FetchStreamCustomReducer); + + const [data, dispatch] = useReducer( + reducerWithFallback.reducer, + reducerWithFallback.initialState + ); + const dataThrottled = useThrottle(data, 100); + + const abortCtrl = useRef(new AbortController()); + + const addError = (error: string) => { + setErrors((prevErrors) => [...prevErrors, error]); + }; + + const start = async () => { + if (isRunning) { + addError('Instant restart while running not supported yet.'); + return; + } + + setErrors([]); + setIsRunning(true); + setIsCancelled(false); + + abortCtrl.current = new AbortController(); + + for await (const [fetchStreamError, actions] of fetchStream>( + http, + endpoint, + apiVersion, + abortCtrl, + body, + customReducer !== undefined + )) { + if (fetchStreamError !== null) { + addError(fetchStreamError); + } else if (Array.isArray(actions) && actions.length > 0) { + dispatch(actions as ReducerAction>); + } + } + + setIsRunning(false); + }; + + const cancel = () => { + abortCtrl.current.abort(); + setIsCancelled(true); + setIsRunning(false); + }; + + // If components using this custom hook get unmounted, cancel any ongoing request. + useEffect(() => { + return () => abortCtrl.current.abort(); + }, []); + + return { + cancel, + data: dataThrottled, + dispatch, + errors, + isCancelled, + isRunning, + start, + }; +} diff --git a/x-pack/packages/ml/response_stream/jest.config.js b/x-pack/packages/ml/response_stream/jest.config.js new file mode 100644 index 00000000000000..df4232d130e895 --- /dev/null +++ b/x-pack/packages/ml/response_stream/jest.config.js @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/x-pack/packages/ml/response_stream'], +}; diff --git a/x-pack/packages/ml/response_stream/kibana.jsonc b/x-pack/packages/ml/response_stream/kibana.jsonc new file mode 100644 index 00000000000000..7e8b96cc9d12b5 --- /dev/null +++ b/x-pack/packages/ml/response_stream/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/ml-response-stream", + "owner": "@elastic/ml-ui" +} diff --git a/x-pack/packages/ml/response_stream/package.json b/x-pack/packages/ml/response_stream/package.json new file mode 100644 index 00000000000000..48eb68c58f738e --- /dev/null +++ b/x-pack/packages/ml/response_stream/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/ml-response-stream", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/packages/ml/aiops_utils/src/accept_compression.test.ts b/x-pack/packages/ml/response_stream/server/accept_compression.test.ts similarity index 100% rename from x-pack/packages/ml/aiops_utils/src/accept_compression.test.ts rename to x-pack/packages/ml/response_stream/server/accept_compression.test.ts diff --git a/x-pack/packages/ml/aiops_utils/src/accept_compression.ts b/x-pack/packages/ml/response_stream/server/accept_compression.ts similarity index 100% rename from x-pack/packages/ml/aiops_utils/src/accept_compression.ts rename to x-pack/packages/ml/response_stream/server/accept_compression.ts diff --git a/x-pack/packages/ml/response_stream/server/index.ts b/x-pack/packages/ml/response_stream/server/index.ts new file mode 100644 index 00000000000000..820c76d173c747 --- /dev/null +++ b/x-pack/packages/ml/response_stream/server/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 { streamFactory } from './stream_factory'; diff --git a/x-pack/packages/ml/aiops_utils/src/stream_factory.test.ts b/x-pack/packages/ml/response_stream/server/stream_factory.test.ts similarity index 100% rename from x-pack/packages/ml/aiops_utils/src/stream_factory.test.ts rename to x-pack/packages/ml/response_stream/server/stream_factory.test.ts diff --git a/x-pack/packages/ml/aiops_utils/src/stream_factory.ts b/x-pack/packages/ml/response_stream/server/stream_factory.ts similarity index 99% rename from x-pack/packages/ml/aiops_utils/src/stream_factory.ts rename to x-pack/packages/ml/response_stream/server/stream_factory.ts index cb34d8aeeb1562..ab676e0104b78d 100644 --- a/x-pack/packages/ml/aiops_utils/src/stream_factory.ts +++ b/x-pack/packages/ml/response_stream/server/stream_factory.ts @@ -56,7 +56,7 @@ export function streamFactory( ): StreamFactoryReturnType; /** * Sets up a response stream with support for gzip compression depending on provided - * request headers. Any non-string data pushed to the stream will be stream as NDJSON. + * request headers. Any non-string data pushed to the stream will be streamed as NDJSON. * * @param headers - Request headers. * @param logger - Kibana logger. diff --git a/x-pack/packages/ml/response_stream/tsconfig.json b/x-pack/packages/ml/response_stream/tsconfig.json new file mode 100644 index 00000000000000..acbfc0bbe5455f --- /dev/null +++ b/x-pack/packages/ml/response_stream/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node", + "react" + ] + }, + "include": [ + "**/*.ts", + "**/*.tsx", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/core", + "@kbn/core-http-server", + "@kbn/logging", + "@kbn/ml-is-populated-object", + ] +} diff --git a/x-pack/plugins/aiops/common/api/index.ts b/x-pack/plugins/aiops/common/api/index.ts index 43639107cfc2d5..f7361b35d2c408 100644 --- a/x-pack/plugins/aiops/common/api/index.ts +++ b/x-pack/plugins/aiops/common/api/index.ts @@ -5,6 +5,8 @@ * 2.0. */ +import type { HttpSetup } from '@kbn/core/public'; + import type { AiopsLogRateAnalysisSchema, AiopsLogRateAnalysisApiAction, @@ -19,6 +21,7 @@ type AiopsApiEndpointKeys = keyof typeof AIOPS_API_ENDPOINT; export type AiopsApiEndpoint = typeof AIOPS_API_ENDPOINT[AiopsApiEndpointKeys]; export interface AiopsApiLogRateAnalysis { + http: HttpSetup; endpoint: AiopsApiEndpoint; apiVersion: string; reducer: typeof streamReducer; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_results.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_results.tsx index 377eac408f3556..43d534e1e1c5c6 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_results.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_results.tsx @@ -23,7 +23,7 @@ import { import type { DataView } from '@kbn/data-views-plugin/public'; import { ProgressControls } from '@kbn/aiops-components'; -import { useFetchStream } from '@kbn/aiops-utils'; +import { useFetchStream } from '@kbn/ml-response-stream/client'; import type { WindowParameters } from '@kbn/aiops-utils'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -117,7 +117,6 @@ export const LogRateAnalysisResults: FC = ({ onAnalysisCompleted, }) => { const { http } = useAiopsAppContext(); - const basePath = http.basePath.get() ?? ''; const { clearAllRowState } = useLogRateAnalysisResultsTableRowContext(); @@ -158,8 +157,9 @@ export const LogRateAnalysisResults: FC = ({ data, isRunning, errors: streamErrors, - } = useFetchStream( - `${basePath}/internal/aiops/log_rate_analysis`, + } = useFetchStream( + http, + '/internal/aiops/log_rate_analysis', '1', { start: earliest, diff --git a/x-pack/plugins/aiops/server/routes/log_rate_analysis.ts b/x-pack/plugins/aiops/server/routes/log_rate_analysis.ts index 35fe871e3de5a3..f31f6c5f30c357 100644 --- a/x-pack/plugins/aiops/server/routes/log_rate_analysis.ts +++ b/x-pack/plugins/aiops/server/routes/log_rate_analysis.ts @@ -14,7 +14,7 @@ import type { CoreStart, IRouter } from '@kbn/core/server'; import { KBN_FIELD_TYPES } from '@kbn/field-types'; import type { Logger } from '@kbn/logging'; import type { DataRequestHandlerContext } from '@kbn/data-plugin/server'; -import { streamFactory } from '@kbn/aiops-utils'; +import { streamFactory } from '@kbn/ml-response-stream/server'; import type { SignificantTerm, SignificantTermGroup, diff --git a/x-pack/plugins/aiops/tsconfig.json b/x-pack/plugins/aiops/tsconfig.json index a6ca070ba53f71..14e59c257a7ca5 100644 --- a/x-pack/plugins/aiops/tsconfig.json +++ b/x-pack/plugins/aiops/tsconfig.json @@ -53,6 +53,7 @@ "@kbn/utility-types", "@kbn/ml-kibana-theme", "@kbn/unified-field-list", + "@kbn/ml-response-stream", ], "exclude": [ "target/**/*", diff --git a/yarn.lock b/yarn.lock index 39a0d3f1183bb7..80a5baaef5903d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4726,6 +4726,10 @@ version "0.0.0" uid "" +"@kbn/ml-response-stream@link:x-pack/packages/ml/response_stream": + version "0.0.0" + uid "" + "@kbn/ml-route-utils@link:x-pack/packages/ml/route_utils": version "0.0.0" uid "" From 88aa58c1664fd17686ff4254e21e0f1e777d36b8 Mon Sep 17 00:00:00 2001 From: Antonio Date: Thu, 27 Jul 2023 09:19:49 +0200 Subject: [PATCH 24/58] [Cases] Fix case view reporter tests. (#162567) Fixes #152206 ## Summary I removed the reporter tests from `x-pack/plugins/cases/public/components/case_view/components/case_view_activity.test.tsx` There were a few things being tested: | Old Test | Where is it covered | | ------------- | ------------- | | does the case view render `'case-view-user-list-reporter'` | [a functional test already covers this](https://github.com/elastic/kibana/blob/main/x-pack/test/functional_with_es_ssl/apps/cases/group1/view_case.ts#L47) | | Is a reporter name displayed correctly | covered in the UserList component tests | | a reporter without uid is rendered correctly | moved this logic to `parseCaseUsers` and tested it there in this PR | | fallbacks correctly to the caseData.createdBy user correctly | moved this logic to `parseCaseUsers` and tested it there in this PR | --- .../components/case_view_activity.test.tsx | 48 ---- .../components/case_view_activity.tsx | 49 +--- .../cases/public/components/utils.test.ts | 250 ++++++++++++++++++ .../plugins/cases/public/components/utils.ts | 49 ++++ 4 files changed, 305 insertions(+), 91 deletions(-) diff --git a/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.test.tsx b/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.test.tsx index ac699e081e7738..130fdcf0bc1d16 100644 --- a/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.test.tsx +++ b/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.test.tsx @@ -496,54 +496,6 @@ describe('Case View Page activity tab', () => { }); }); - // FLAKY: https://github.com/elastic/kibana/issues/152206 - describe.skip('Reporter', () => { - it('should render the reporter correctly', async () => { - appMockRender = createAppMockRenderer(); - appMockRender.render(); - const reporterSection = within(await screen.findByTestId('case-view-user-list-reporter')); - - expect(await reporterSection.findByText('Reporter 1')).toBeInTheDocument(); - expect(await reporterSection.findByText('R1')).toBeInTheDocument(); - }); - - it('should render a reporter without uid correctly', async () => { - useGetCaseUsersMock.mockReturnValue({ - isLoading: false, - data: { - ...caseUsers, - reporter: { - user: { - email: 'reporter_no_uid@elastic.co', - full_name: 'Reporter No UID', - username: 'reporter_no_uid', - }, - }, - }, - }); - - appMockRender = createAppMockRenderer(); - appMockRender.render(); - - const reporterSection = within(await screen.findByTestId('case-view-user-list-reporter')); - - expect(await reporterSection.findByText('Reporter No UID')).toBeInTheDocument(); - }); - - it('fallbacks to the caseData reporter correctly', async () => { - useGetCaseUsersMock.mockReturnValue({ - isLoading: false, - data: null, - }); - - appMockRender = createAppMockRenderer(); - appMockRender.render(); - const reporterSection = within(await screen.findByTestId('case-view-user-list-reporter')); - - expect(await reporterSection.findByText('Leslie Knope')).toBeInTheDocument(); - }); - }); - describe('Assignees', () => { it('should render assignees in the participants section', async () => { appMockRender = createAppMockRenderer({ license: platinumLicense }); diff --git a/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.tsx b/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.tsx index 32dc1be8bbd266..68c51f78c868af 100644 --- a/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.tsx +++ b/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.tsx @@ -10,14 +10,13 @@ import { EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner, EuiSpacer } from '@elastic/eui'; import React, { useCallback, useMemo, useState } from 'react'; import { isEqual } from 'lodash'; -import type { UserProfileWithAvatar } from '@kbn/user-profile-components'; import { useGetCaseUsers } from '../../../containers/use_get_case_users'; import { useGetCaseConnectors } from '../../../containers/use_get_case_connectors'; import { useCasesFeatures } from '../../../common/use_cases_features'; import { useGetCurrentUserProfile } from '../../../containers/user_profiles/use_get_current_user_profile'; import { useGetSupportedActionConnectors } from '../../../containers/configure/use_get_supported_action_connectors'; import type { CaseSeverity, CaseStatuses } from '../../../../common/types/domain'; -import type { CaseUsers, UseFetchAlertData } from '../../../../common/ui/types'; +import type { UseFetchAlertData } from '../../../../common/ui/types'; import type { CaseUI } from '../../../../common'; import { EditConnector } from '../../edit_connector'; import type { CasesNavigation } from '../../links'; @@ -33,46 +32,12 @@ import { useGetCaseUserActionsStats } from '../../../containers/use_get_case_use import { AssignUsers } from './assign_users'; import { UserActionsActivityBar } from '../../user_actions_activity_bar'; import type { Assignee } from '../../user_profiles/types'; -import { convertToCaseUserWithProfileInfo } from '../../user_profiles/user_converter'; import type { UserActivityParams } from '../../user_actions_activity_bar/types'; import { CASE_VIEW_PAGE_TABS } from '../../../../common/types'; import { CaseViewTabs } from '../case_view_tabs'; import { Description } from '../../description'; import { EditCategory } from './edit_category'; - -const buildUserProfilesMap = (users?: CaseUsers): Map => { - const userProfiles = new Map(); - - if (!users) { - return userProfiles; - } - - for (const user of [ - ...users.assignees, - ...users.participants, - users.reporter, - ...users.unassignedUsers, - ]) { - /** - * If the user has a valid profile UID and a valid username - * then the backend successfully fetched the user profile - * information from the security plugin. Checking only for the - * profile UID is not enough as a user can use our API to add - * an assignee with a non existing UID. - */ - if (user.uid != null && user.user.username != null) { - userProfiles.set(user.uid, { - uid: user.uid, - user: user.user, - data: { - avatar: user.avatar, - }, - }); - } - } - - return userProfiles; -}; +import { parseCaseUsers } from '../../utils'; export const CaseViewActivity = ({ ruleDetailsNavigation, @@ -107,7 +72,10 @@ export const CaseViewActivity = ({ const { data: caseUsers, isLoading: isLoadingCaseUsers } = useGetCaseUsers(caseData.id); - const userProfiles = buildUserProfilesMap(caseUsers); + const { userProfiles, reporterAsArray } = parseCaseUsers({ + caseUsers, + createdBy: caseData.createdBy, + }); const assignees = useMemo( () => caseData.assignees.map((assignee) => assignee.uid), @@ -203,11 +171,6 @@ export const CaseViewActivity = ({ const showConnectorSidebar = pushToServiceAuthorized && caseConnectors && supportedActionConnectors; - const reporterAsArray = - caseUsers?.reporter != null - ? [caseUsers.reporter] - : [convertToCaseUserWithProfileInfo(caseData.createdBy)]; - const isLoadingDescription = isLoading && loadingKey === 'description'; return ( diff --git a/x-pack/plugins/cases/public/components/utils.test.ts b/x-pack/plugins/cases/public/components/utils.test.ts index 6bef0b8585d4b8..79a86e00cd7a61 100644 --- a/x-pack/plugins/cases/public/components/utils.test.ts +++ b/x-pack/plugins/cases/public/components/utils.test.ts @@ -7,6 +7,7 @@ import { actionTypeRegistryMock } from '@kbn/triggers-actions-ui-plugin/public/application/action_type_registry.mock'; import { triggersActionsUiMock } from '@kbn/triggers-actions-ui-plugin/public/mocks'; +import { elasticUser, getCaseUsersMockResponse } from '../containers/mock'; import { connectorDeprecationValidator, convertEmptyValuesToNull, @@ -18,6 +19,7 @@ import { removeItemFromSessionStorage, parseURL, stringifyToURL, + parseCaseUsers, } from './utils'; describe('Utils', () => { @@ -255,4 +257,252 @@ describe('Utils', () => { expect(stringifyToURL({})).toBe(''); }); }); + + describe('parseCaseUsers', () => { + it('should define userProfiles and reporters correctly', () => { + const caseUsers = getCaseUsersMockResponse(); + const { userProfiles, reporterAsArray } = parseCaseUsers({ + caseUsers, + createdBy: elasticUser, + }); + + expect(userProfiles).toMatchInlineSnapshot(` + Map { + "u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0" => Object { + "data": Object { + "avatar": undefined, + }, + "uid": "u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0", + "user": Object { + "email": null, + "full_name": null, + "username": "elastic", + }, + }, + "u_3OgKOf-ogtr8kJ5B0fnRcqzXs2aQQkZLtzKEEFnKaYg_0" => Object { + "data": Object { + "avatar": undefined, + }, + "uid": "u_3OgKOf-ogtr8kJ5B0fnRcqzXs2aQQkZLtzKEEFnKaYg_0", + "user": Object { + "email": "fuzzy_marten@profiles.elastic.co", + "full_name": "Fuzzy Marten", + "username": "fuzzy_marten", + }, + }, + "u_BXf_iGxcnicv4l-3-ER7I-XPpfanAFAap7uls86xV7A_0" => Object { + "data": Object { + "avatar": undefined, + }, + "uid": "u_BXf_iGxcnicv4l-3-ER7I-XPpfanAFAap7uls86xV7A_0", + "user": Object { + "email": "misty_mackerel@profiles.elastic.co", + "full_name": "Misty Mackerel", + "username": "misty_mackerel", + }, + }, + "participant_4_uid" => Object { + "data": Object { + "avatar": Object { + "initials": "P4", + }, + }, + "uid": "participant_4_uid", + "user": Object { + "email": null, + "full_name": null, + "username": "participant_4", + }, + }, + "participant_5_uid" => Object { + "data": Object { + "avatar": undefined, + }, + "uid": "participant_5_uid", + "user": Object { + "email": "participant_5@elastic.co", + "full_name": "Participant 5", + "username": "participant_5", + }, + }, + "reporter_1_uid" => Object { + "data": Object { + "avatar": Object { + "initials": "R1", + }, + }, + "uid": "reporter_1_uid", + "user": Object { + "email": "reporter_1@elastic.co", + "full_name": "Reporter 1", + "username": "reporter_1", + }, + }, + "u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0" => Object { + "data": Object { + "avatar": undefined, + }, + "uid": "u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0", + "user": Object { + "email": "", + "full_name": "", + "username": "cases_no_connectors", + }, + }, + "u_A_tM4n0wPkdiQ9smmd8o0Hr_h61XQfu8aRPh9GMoRoc_0" => Object { + "data": Object { + "avatar": undefined, + }, + "uid": "u_A_tM4n0wPkdiQ9smmd8o0Hr_h61XQfu8aRPh9GMoRoc_0", + "user": Object { + "email": "valid_chimpanzee@profiles.elastic.co", + "full_name": "Valid Chimpanzee", + "username": "valid_chimpanzee", + }, + }, + } + `); + expect(reporterAsArray).toEqual([ + { + uid: 'reporter_1_uid', + avatar: { + initials: 'R1', + }, + user: { + email: 'reporter_1@elastic.co', + full_name: 'Reporter 1', + username: 'reporter_1', + }, + }, + ]); + }); + + it('should define a reporter without uid correctly', () => { + const caseUsers = getCaseUsersMockResponse(); + const { userProfiles, reporterAsArray } = parseCaseUsers({ + caseUsers: { + ...caseUsers, + reporter: { + user: { + email: 'reporter_no_uid@elastic.co', + full_name: 'Reporter No UID', + username: 'reporter_no_uid', + }, + }, + }, + createdBy: elasticUser, + }); + + expect(userProfiles).toMatchInlineSnapshot(` + Map { + "u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0" => Object { + "data": Object { + "avatar": undefined, + }, + "uid": "u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0", + "user": Object { + "email": null, + "full_name": null, + "username": "elastic", + }, + }, + "u_3OgKOf-ogtr8kJ5B0fnRcqzXs2aQQkZLtzKEEFnKaYg_0" => Object { + "data": Object { + "avatar": undefined, + }, + "uid": "u_3OgKOf-ogtr8kJ5B0fnRcqzXs2aQQkZLtzKEEFnKaYg_0", + "user": Object { + "email": "fuzzy_marten@profiles.elastic.co", + "full_name": "Fuzzy Marten", + "username": "fuzzy_marten", + }, + }, + "u_BXf_iGxcnicv4l-3-ER7I-XPpfanAFAap7uls86xV7A_0" => Object { + "data": Object { + "avatar": undefined, + }, + "uid": "u_BXf_iGxcnicv4l-3-ER7I-XPpfanAFAap7uls86xV7A_0", + "user": Object { + "email": "misty_mackerel@profiles.elastic.co", + "full_name": "Misty Mackerel", + "username": "misty_mackerel", + }, + }, + "participant_4_uid" => Object { + "data": Object { + "avatar": Object { + "initials": "P4", + }, + }, + "uid": "participant_4_uid", + "user": Object { + "email": null, + "full_name": null, + "username": "participant_4", + }, + }, + "participant_5_uid" => Object { + "data": Object { + "avatar": undefined, + }, + "uid": "participant_5_uid", + "user": Object { + "email": "participant_5@elastic.co", + "full_name": "Participant 5", + "username": "participant_5", + }, + }, + "u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0" => Object { + "data": Object { + "avatar": undefined, + }, + "uid": "u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0", + "user": Object { + "email": "", + "full_name": "", + "username": "cases_no_connectors", + }, + }, + "u_A_tM4n0wPkdiQ9smmd8o0Hr_h61XQfu8aRPh9GMoRoc_0" => Object { + "data": Object { + "avatar": undefined, + }, + "uid": "u_A_tM4n0wPkdiQ9smmd8o0Hr_h61XQfu8aRPh9GMoRoc_0", + "user": Object { + "email": "valid_chimpanzee@profiles.elastic.co", + "full_name": "Valid Chimpanzee", + "username": "valid_chimpanzee", + }, + }, + } + `); + expect(reporterAsArray).toEqual([ + { + user: { + email: 'reporter_no_uid@elastic.co', + full_name: 'Reporter No UID', + username: 'reporter_no_uid', + }, + }, + ]); + }); + + it('uses the fallback reporter correctly', () => { + const { userProfiles, reporterAsArray } = parseCaseUsers({ + createdBy: elasticUser, + }); + + expect(userProfiles).toMatchInlineSnapshot(`Map {}`); + expect(reporterAsArray).toEqual([ + { + uid: undefined, + user: { + email: 'leslie.knope@elastic.co', + full_name: 'Leslie Knope', + username: 'lknope', + }, + }, + ]); + }); + }); }); diff --git a/x-pack/plugins/cases/public/components/utils.ts b/x-pack/plugins/cases/public/components/utils.ts index bf964f065a436d..1b0fbcd43ca1b0 100644 --- a/x-pack/plugins/cases/public/components/utils.ts +++ b/x-pack/plugins/cases/public/components/utils.ts @@ -10,11 +10,15 @@ import type { FieldConfig, ValidationConfig, } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; +import type { UserProfileWithAvatar } from '@kbn/user-profile-components'; import type { ConnectorTypeFields } from '../../common/types/domain'; import { ConnectorTypes } from '../../common/types/domain'; import type { CasesPluginStart } from '../types'; import { connectorValidator as swimlaneConnectorValidator } from './connectors/swimlane/validator'; import type { CaseActionConnector } from './types'; +import type { CaseUser, CaseUsers } from '../../common/ui/types'; +import { convertToCaseUserWithProfileInfo } from './user_profiles/user_converter'; +import type { CaseUserWithProfileInfo } from './user_profiles/types'; export const getConnectorById = ( id: string, @@ -176,3 +180,48 @@ export const stringifyToURL = (parsedParams: Record) => new URLSearchParams(parsedParams).toString(); export const parseURL = (queryString: string) => Object.fromEntries(new URLSearchParams(queryString)); + +export const parseCaseUsers = ({ + caseUsers, + createdBy, +}: { + caseUsers?: CaseUsers; + createdBy: CaseUser; +}): { + userProfiles: Map; + reporterAsArray: CaseUserWithProfileInfo[]; +} => { + const userProfiles = new Map(); + const reporterAsArray = + caseUsers?.reporter != null + ? [caseUsers.reporter] + : [convertToCaseUserWithProfileInfo(createdBy)]; + + if (caseUsers) { + for (const user of [ + ...caseUsers.assignees, + ...caseUsers.participants, + caseUsers.reporter, + ...caseUsers.unassignedUsers, + ]) { + /** + * If the user has a valid profile UID and a valid username + * then the backend successfully fetched the user profile + * information from the security plugin. Checking only for the + * profile UID is not enough as a user can use our API to add + * an assignee with a non existing UID. + */ + if (user.uid != null && user.user.username != null) { + userProfiles.set(user.uid, { + uid: user.uid, + user: user.user, + data: { + avatar: user.avatar, + }, + }); + } + } + } + + return { userProfiles, reporterAsArray }; +}; From 6d2603b3690ebe7507be9d9a7fdd04364e90c826 Mon Sep 17 00:00:00 2001 From: Elastic Machine Date: Thu, 27 Jul 2023 18:24:00 +1000 Subject: [PATCH 25/58] [main] Sync bundled packages with Package Storage (#162591) Automated by https://internal-ci.elastic.co/job/package_storage/job/sync-bundled-packages-job/job/main/5855/ Co-authored-by: apmmachine Co-authored-by: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> --- fleet_packages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fleet_packages.json b/fleet_packages.json index b0bf1efd754c1c..65f6969fc20343 100644 --- a/fleet_packages.json +++ b/fleet_packages.json @@ -54,7 +54,7 @@ }, { "name": "synthetics", - "version": "1.0.1" + "version": "1.0.2" }, { "name": "security_detection_engine", From fa90a2f08025ed1f50bed10170bd3c8295f8633c Mon Sep 17 00:00:00 2001 From: Elena Stoeva <59341489+ElenaStoeva@users.noreply.github.com> Date: Thu, 27 Jul 2023 09:42:15 +0100 Subject: [PATCH 26/58] [Snapshot Restore] Fix broken Snapshot restore form (#161113) Fix https://github.com/elastic/kibana/issues/160974 Fix https://github.com/elastic/kibana/issues/160929 ## Summary From Es 8.10, the `version` field from the Get Snapshot response has a different format - it will no longer be a string representing the release version, but rather it will be a string representing the version id (see https://github.com/elastic/kibana/issues/160974#issuecomment-1618087194 for more details). This PR replaces the use of the `version` field with the `versionId` field when checking in the Snapshot Restore form if the current version is greater than 7.12 (which corresponds to `versionID` 7120099). The PR also unskips the functional test that failed with the promotion of Es to 8.10. **How to test:** 1. Start Es with `yarn es snapshot -E path.repo=./tmp/snap` and Kibana with `yarn start` 2. Go to Stack Management -> Snapshot and Restore 3. Create a Shared File System repository with location `./tmp/snap` 4. Create a policy that uses the repository created in the previous step. 5. Run the policy to create a snapshot. 6. Go to the Snapshots tab and click the Restore button for the created snapshot. 7. Verify that the Snapshot restore form works as expected. --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../steps/step_logistics/step_logistics.tsx | 9 +++++---- .../functional/apps/snapshot_restore/snapshot_restore.ts | 3 +-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/snapshot_restore/public/application/components/restore_snapshot_form/steps/step_logistics/step_logistics.tsx b/x-pack/plugins/snapshot_restore/public/application/components/restore_snapshot_form/steps/step_logistics/step_logistics.tsx index e9fd9559deecf1..70f3255bb4d0c4 100644 --- a/x-pack/plugins/snapshot_restore/public/application/components/restore_snapshot_form/steps/step_logistics/step_logistics.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/components/restore_snapshot_form/steps/step_logistics/step_logistics.tsx @@ -7,7 +7,6 @@ import React, { Fragment, useState, useMemo } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; -import semverGt from 'semver/functions/gt'; import { EuiButtonEmpty, EuiDescribedFormGroup, @@ -61,7 +60,7 @@ export const RestoreSnapshotStepLogistics: React.FunctionComponent = indices: unfilteredSnapshotIndices, dataStreams: snapshotDataStreams = [], includeGlobalState: snapshotIncludeGlobalState, - version, + versionId, featureStates: snapshotIncludeFeatureStates, } = snapshotDetails; @@ -647,8 +646,10 @@ export const RestoreSnapshotStepLogistics: React.FunctionComponent = defaultMessage="Restores the configuration, history, and other data stored in Elasticsearch by a feature such as Elasticsearch security." /> - {/* Only display callout if includeFeatureState is enabled and the snapshot was created by ES 7.12+ */} - {semverGt(version, '7.12.0') && isFeatureStatesToggleEnabled && ( + {/* Only display callout if includeFeatureState is enabled and the snapshot was created by ES 7.12+ + The versionId field represents the build id of the ES version. We check if the current ES version is >7.12 + by comparing its build id with the build id of ES 7.12, which is 7120099. */} + {versionId > 7120099 && isFeatureStatesToggleEnabled && ( <> diff --git a/x-pack/test/functional/apps/snapshot_restore/snapshot_restore.ts b/x-pack/test/functional/apps/snapshot_restore/snapshot_restore.ts index 3b8ea30f5e98da..a1a6bfe6276f52 100644 --- a/x-pack/test/functional/apps/snapshot_restore/snapshot_restore.ts +++ b/x-pack/test/functional/apps/snapshot_restore/snapshot_restore.ts @@ -15,8 +15,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const es = getService('es'); const security = getService('security'); - // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/160929 - describe.skip('Snapshot restore', function () { + describe('Snapshot restore', function () { before(async () => { await security.testUser.setRoles(['snapshot_restore_user'], { skipBrowserRefresh: true }); await pageObjects.common.navigateToApp('snapshotRestore'); From 5a2b80f8db172b17c75f1532e7799d88ade80b0b Mon Sep 17 00:00:00 2001 From: Bena Kansara <69037875+benakansara@users.noreply.github.com> Date: Thu, 27 Jul 2023 11:53:29 +0200 Subject: [PATCH 27/58] Add feature flag for new Threshold Alert details page (#162394) Resolves https://github.com/elastic/kibana/issues/162393 Adds a new feature flag `xpack.observability.unsafe.alertDetails.observability.enabled` to show/hide threshold alert details page until it is ready for GA. --- .../docker_generator/resources/base/bin/kibana-docker | 1 + .../plugin_functional/test_suites/core_plugins/rendering.ts | 1 + x-pack/README.md | 6 ++++++ .../public/pages/overview/overview.stories.tsx | 1 + .../plugins/observability/public/pages/rules/rules.test.tsx | 1 + x-pack/plugins/observability/public/plugin.ts | 3 +++ .../observability/public/utils/is_alert_details_enabled.ts | 2 +- .../public/utils/kibana_react.storybook_decorator.tsx | 1 + x-pack/plugins/observability/public/utils/test_helper.tsx | 1 + x-pack/plugins/observability/server/index.ts | 3 +++ 10 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker b/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker index d35b39efca4eb9..43df58235e68de 100755 --- a/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker +++ b/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker @@ -307,6 +307,7 @@ kibana_vars=( xpack.observability.unsafe.alertDetails.metrics.enabled xpack.observability.unsafe.alertDetails.logs.enabled xpack.observability.unsafe.alertDetails.uptime.enabled + xpack.observability.unsafe.alertDetails.observability.enabled xpack.observability.unsafe.thresholdRule.enabled xpack.observability.compositeSlo.enabled xpack.reporting.capture.browser.autoDownload diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index d60914578b2f79..4f604e0fad3b82 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -284,6 +284,7 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.observability.unsafe.alertDetails.metrics.enabled (boolean)', 'xpack.observability.unsafe.alertDetails.logs.enabled (boolean)', 'xpack.observability.unsafe.alertDetails.uptime.enabled (boolean)', + 'xpack.observability.unsafe.alertDetails.observability.enabled (boolean)', 'xpack.observability.unsafe.thresholdRule.enabled (boolean)', 'xpack.observability_onboarding.ui.enabled (boolean)', /** diff --git a/x-pack/README.md b/x-pack/README.md index 9c554c651b41fd..ea8777f46b1432 100644 --- a/x-pack/README.md +++ b/x-pack/README.md @@ -26,6 +26,12 @@ xpack.observability.unsafe.alertDetails.uptime.enabled: true **[For Uptime rule type]** In Kibana configuration, will allow the user to navigate to the new Alert Details page, instead of the Alert Flyout when clicking on `View alert details` in the Alert table +```yaml +xpack.observability.unsafe.alertDetails.observability.enabled: true +``` + +**[For Observability Threshold rule type]** In Kibana configuration, will allow the user to navigate to the new Alert Details page, instead of the Alert Flyout when clicking on `View alert details` in the Alert table + # Development By default, Kibana will run with X-Pack installed as mentioned in the [contributing guide](../CONTRIBUTING.md). diff --git a/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx b/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx index 4fd78735bdb683..79d058fb5f632e 100644 --- a/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx +++ b/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx @@ -84,6 +84,7 @@ const withCore = makeDecorator({ logs: { enabled: false }, metrics: { enabled: false }, uptime: { enabled: false }, + observability: { enabled: false }, }, thresholdRule: { enabled: false }, }, diff --git a/x-pack/plugins/observability/public/pages/rules/rules.test.tsx b/x-pack/plugins/observability/public/pages/rules/rules.test.tsx index 0c5a18c5ac9c77..d0d8678488aa65 100644 --- a/x-pack/plugins/observability/public/pages/rules/rules.test.tsx +++ b/x-pack/plugins/observability/public/pages/rules/rules.test.tsx @@ -40,6 +40,7 @@ jest.spyOn(pluginContext, 'usePluginContext').mockImplementation(() => ({ logs: { enabled: false }, metrics: { enabled: false }, uptime: { enabled: false }, + observability: { enabled: false }, }, thresholdRule: { enabled: false }, }, diff --git a/x-pack/plugins/observability/public/plugin.ts b/x-pack/plugins/observability/public/plugin.ts index 287248538b6336..fc6753e5997a8d 100644 --- a/x-pack/plugins/observability/public/plugin.ts +++ b/x-pack/plugins/observability/public/plugin.ts @@ -86,6 +86,9 @@ export interface ConfigSchema { uptime: { enabled: boolean; }; + observability: { + enabled: boolean; + }; }; thresholdRule: { enabled: boolean; diff --git a/x-pack/plugins/observability/public/utils/is_alert_details_enabled.ts b/x-pack/plugins/observability/public/utils/is_alert_details_enabled.ts index 6432563897e164..15b9589be60f60 100644 --- a/x-pack/plugins/observability/public/utils/is_alert_details_enabled.ts +++ b/x-pack/plugins/observability/public/utils/is_alert_details_enabled.ts @@ -14,7 +14,7 @@ const ALLOWED_RULE_TYPES = ['apm.transaction_duration']; const isUnsafeAlertDetailsFlag = ( subject: string ): subject is keyof ConfigSchema['unsafe']['alertDetails'] => - ['uptime', 'logs', 'metrics'].includes(subject); + ['uptime', 'logs', 'metrics', 'observability'].includes(subject); // We are mapping the ruleTypeId from the feature flag with the ruleTypeId from the alert // to know whether the feature flag is enabled or not. diff --git a/x-pack/plugins/observability/public/utils/kibana_react.storybook_decorator.tsx b/x-pack/plugins/observability/public/utils/kibana_react.storybook_decorator.tsx index e56487549a6895..8a89cb6cf93f2b 100644 --- a/x-pack/plugins/observability/public/utils/kibana_react.storybook_decorator.tsx +++ b/x-pack/plugins/observability/public/utils/kibana_react.storybook_decorator.tsx @@ -31,6 +31,7 @@ export function KibanaReactStorybookDecorator(Story: ComponentType) { logs: { enabled: false }, metrics: { enabled: false }, uptime: { enabled: false }, + observability: { enabled: false }, }, thresholdRule: { enabled: false }, }, diff --git a/x-pack/plugins/observability/public/utils/test_helper.tsx b/x-pack/plugins/observability/public/utils/test_helper.tsx index c979eaef6b8790..3b84ffe786f913 100644 --- a/x-pack/plugins/observability/public/utils/test_helper.tsx +++ b/x-pack/plugins/observability/public/utils/test_helper.tsx @@ -35,6 +35,7 @@ const defaultConfig: ConfigSchema = { logs: { enabled: false }, metrics: { enabled: false }, uptime: { enabled: false }, + observability: { enabled: false }, }, thresholdRule: { enabled: false }, }, diff --git a/x-pack/plugins/observability/server/index.ts b/x-pack/plugins/observability/server/index.ts index 1f06f63c5de002..6c6b68981b1172 100644 --- a/x-pack/plugins/observability/server/index.ts +++ b/x-pack/plugins/observability/server/index.ts @@ -42,6 +42,9 @@ const configSchema = schema.object({ uptime: schema.object({ enabled: schema.boolean({ defaultValue: false }), }), + observability: schema.object({ + enabled: schema.boolean({ defaultValue: false }), + }), }), thresholdRule: schema.object({ enabled: schema.boolean({ defaultValue: false }), From 698ff714dee51ba45a8bb4fd5315aea2f6f2ceeb Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 27 Jul 2023 13:00:09 +0200 Subject: [PATCH 28/58] [Synthetics] Clarify location geo property type (#162371) --- .../group2/check_registered_types.test.ts | 2 +- .../synthetics_private_locations.ts | 6 +- .../private_locations/helpers.test.ts | 6 +- .../settings/private_locations/helpers.ts | 10 +- .../server/runtime_types/private_locations.ts | 4 +- .../private_locations/model_version_1.test.ts | 180 ++++++++++++++++++ .../private_locations/model_version_1.ts} | 40 ++-- .../server/saved_objects/private_locations.ts | 4 + 8 files changed, 221 insertions(+), 31 deletions(-) create mode 100644 x-pack/plugins/synthetics/server/saved_objects/migrations/private_locations/model_version_1.test.ts rename x-pack/plugins/synthetics/server/{legacy_uptime/lib/saved_objects/migrations/private_locations/8.10.0.ts => saved_objects/migrations/private_locations/model_version_1.ts} (61%) diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts index 2a604841073627..063ed46c443f6a 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts @@ -142,7 +142,7 @@ describe('checking migration metadata changes on all registered SO types', () => "spaces-usage-stats": "3abca98713c52af8b30300e386c7779b3025a20e", "synthetics-monitor": "33ddc4b8979f378edf58bcc7ba13c5c5b572f42d", "synthetics-param": "3ebb744e5571de678b1312d5c418c8188002cf5e", - "synthetics-privates-locations": "9cfbd6d1d2e2c559bf96dd6fbc27ff0c47719dd3", + "synthetics-privates-locations": "f53d799d5c9bc8454aaa32c6abc99a899b025d5c", "tag": "e2544392fe6563e215bb677abc8b01c2601ef2dc", "task": "04f30bd7bae923f3a53c31ab3b9745a93872fc02", "telemetry": "7b00bcf1c7b4f6db1192bb7405a6a63e78b699fd", diff --git a/x-pack/plugins/synthetics/common/runtime_types/monitor_management/synthetics_private_locations.ts b/x-pack/plugins/synthetics/common/runtime_types/monitor_management/synthetics_private_locations.ts index caa3ac686fd617..c0366d8e3935fc 100644 --- a/x-pack/plugins/synthetics/common/runtime_types/monitor_management/synthetics_private_locations.ts +++ b/x-pack/plugins/synthetics/common/runtime_types/monitor_management/synthetics_private_locations.ts @@ -18,11 +18,9 @@ export const PrivateLocationCodec = t.intersection([ isServiceManaged: t.boolean, isInvalid: t.boolean, tags: t.array(t.string), - /* Empty Lat lon was accidentally saved as an empty string instead of undefined or null - * Need a migration to fix */ geo: t.interface({ - lat: t.union([t.string, t.number, t.null]), - lon: t.union([t.string, t.number, t.null]), + lat: t.number, + lon: t.number, }), }), ]); diff --git a/x-pack/plugins/synthetics/server/routes/settings/private_locations/helpers.test.ts b/x-pack/plugins/synthetics/server/routes/settings/private_locations/helpers.test.ts index 584cc2a3346971..fe08ed89cadac4 100644 --- a/x-pack/plugins/synthetics/server/routes/settings/private_locations/helpers.test.ts +++ b/x-pack/plugins/synthetics/server/routes/settings/private_locations/helpers.test.ts @@ -48,7 +48,7 @@ const testLocations2 = { label: 'BEEP', agentPolicyId: 'e3134290-0f73-11ee-ba15-159f4f728dec', id: 'e3134290-0f73-11ee-ba15-159f4f728dec', - geo: { lat: '-10', lon: '20' }, + geo: { lat: -10, lon: 20 }, concurrentMonitors: 1, isInvalid: true, isServiceManaged: true, @@ -113,8 +113,8 @@ describe('toClientContract', () => { agentPolicyId: 'e3134290-0f73-11ee-ba15-159f4f728dec', concurrentMonitors: 1, geo: { - lat: '-10', - lon: '20', + lat: -10, + lon: 20, }, id: 'e3134290-0f73-11ee-ba15-159f4f728dec', isInvalid: true, diff --git a/x-pack/plugins/synthetics/server/routes/settings/private_locations/helpers.ts b/x-pack/plugins/synthetics/server/routes/settings/private_locations/helpers.ts index 42fd6e42c42775..7f64b1bed7425e 100644 --- a/x-pack/plugins/synthetics/server/routes/settings/private_locations/helpers.ts +++ b/x-pack/plugins/synthetics/server/routes/settings/private_locations/helpers.ts @@ -25,10 +25,7 @@ export const toClientContract = ( isServiceManaged: false, isInvalid: !Boolean(agentPolicies?.find((policy) => policy.id === location.agentPolicyId)), tags: location.tags, - geo: { - lat: location.geo?.lat ?? null, - lon: location.geo?.lon ?? null, - }, + geo: location.geo, })), }; }; @@ -41,9 +38,6 @@ export const toSavedObjectContract = (location: PrivateLocation): PrivateLocatio concurrentMonitors: location.concurrentMonitors, tags: location.tags, isServiceManaged: false, - geo: { - lat: location.geo?.lat ?? null, - lon: location.geo?.lon ?? null, - }, + geo: location.geo, }; }; diff --git a/x-pack/plugins/synthetics/server/runtime_types/private_locations.ts b/x-pack/plugins/synthetics/server/runtime_types/private_locations.ts index 5b87332c192792..d8b4e41ede17a0 100644 --- a/x-pack/plugins/synthetics/server/runtime_types/private_locations.ts +++ b/x-pack/plugins/synthetics/server/runtime_types/private_locations.ts @@ -18,8 +18,8 @@ export const PrivateLocationAttributesCodec = t.intersection([ t.partial({ tags: t.array(t.string), geo: t.interface({ - lat: t.union([t.null, t.number, t.string]), - lon: t.union([t.null, t.number, t.string]), + lat: t.number, + lon: t.number, }), }), ]); diff --git a/x-pack/plugins/synthetics/server/saved_objects/migrations/private_locations/model_version_1.test.ts b/x-pack/plugins/synthetics/server/saved_objects/migrations/private_locations/model_version_1.test.ts new file mode 100644 index 00000000000000..63a9f940143a4a --- /dev/null +++ b/x-pack/plugins/synthetics/server/saved_objects/migrations/private_locations/model_version_1.test.ts @@ -0,0 +1,180 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { transformGeoProperty } from './model_version_1'; +import { privateLocationsSavedObjectName } from '../../../../common/saved_objects/private_locations'; + +describe('model version 1 migration', () => { + const testLocation = { + label: 'us-east-1', + id: 'us-east-1', + geo: { + lat: '40.7128', + lon: '-74.0060', + }, + agentPolicyId: 'agentPolicyId', + concurrentMonitors: 1, + }; + const testObject = { + type: privateLocationsSavedObjectName, + id: 'synthetics-privates-locations-singleton', + attributes: { + locations: [testLocation], + }, + }; + it('should return expected result', function () { + const result = transformGeoProperty(testObject, {} as any); + expect(result.document).toEqual({ + attributes: { + locations: [ + { + agentPolicyId: 'agentPolicyId', + concurrentMonitors: 1, + geo: { + lat: 40.7128, + lon: -74.006, + }, + id: 'us-east-1', + isServiceManaged: false, + label: 'us-east-1', + }, + ], + }, + id: 'synthetics-privates-locations-singleton', + type: 'synthetics-privates-locations', + }); + }); + + it('should return expected result for zero values', function () { + testLocation.geo.lat = '0'; + testLocation.geo.lon = '0'; + const result = transformGeoProperty(testObject, {} as any); + expect(result.document).toEqual({ + attributes: { + locations: [ + { + agentPolicyId: 'agentPolicyId', + concurrentMonitors: 1, + geo: { + lat: 0, + lon: 0, + }, + id: 'us-east-1', + isServiceManaged: false, + label: 'us-east-1', + }, + ], + }, + id: 'synthetics-privates-locations-singleton', + type: 'synthetics-privates-locations', + }); + }); + + it('should return expected result for zero integers', function () { + // @ts-ignore + testLocation.geo.lat = 0; + // @ts-ignore + testLocation.geo.lon = 0; + const result = transformGeoProperty(testObject, {} as any); + expect(result.document).toEqual({ + attributes: { + locations: [ + { + agentPolicyId: 'agentPolicyId', + concurrentMonitors: 1, + geo: { + lat: 0, + lon: 0, + }, + id: 'us-east-1', + isServiceManaged: false, + label: 'us-east-1', + }, + ], + }, + id: 'synthetics-privates-locations-singleton', + type: 'synthetics-privates-locations', + }); + }); + + it('should return expected result for empty values', function () { + // @ts-ignore + testLocation.geo.lat = ''; + // @ts-ignore + testLocation.geo.lon = ''; + const result = transformGeoProperty(testObject, {} as any); + expect(result.document).toEqual({ + attributes: { + locations: [ + { + agentPolicyId: 'agentPolicyId', + concurrentMonitors: 1, + geo: { + lat: 0, + lon: 0, + }, + id: 'us-east-1', + isServiceManaged: false, + label: 'us-east-1', + }, + ], + }, + id: 'synthetics-privates-locations-singleton', + type: 'synthetics-privates-locations', + }); + }); + it('should return expected result for null values', function () { + // @ts-ignore + testLocation.geo.lat = null; + // @ts-ignore + testLocation.geo.lon = null; + const result = transformGeoProperty(testObject, {} as any); + expect(result.document).toEqual({ + attributes: { + locations: [ + { + agentPolicyId: 'agentPolicyId', + concurrentMonitors: 1, + geo: { + lat: 0, + lon: 0, + }, + id: 'us-east-1', + isServiceManaged: false, + label: 'us-east-1', + }, + ], + }, + id: 'synthetics-privates-locations-singleton', + type: 'synthetics-privates-locations', + }); + }); + + it('should return expected result for undefined values', function () { + // @ts-ignore + testLocation.geo = undefined; + const result = transformGeoProperty(testObject, {} as any); + expect(result.document).toEqual({ + attributes: { + locations: [ + { + agentPolicyId: 'agentPolicyId', + concurrentMonitors: 1, + geo: { + lat: 0, + lon: 0, + }, + id: 'us-east-1', + isServiceManaged: false, + label: 'us-east-1', + }, + ], + }, + id: 'synthetics-privates-locations-singleton', + type: 'synthetics-privates-locations', + }); + }); +}); diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/private_locations/8.10.0.ts b/x-pack/plugins/synthetics/server/saved_objects/migrations/private_locations/model_version_1.ts similarity index 61% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/private_locations/8.10.0.ts rename to x-pack/plugins/synthetics/server/saved_objects/migrations/private_locations/model_version_1.ts index 6108abdc638a1b..2b7d5be016bf01 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/private_locations/8.10.0.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/migrations/private_locations/model_version_1.ts @@ -5,8 +5,11 @@ * 2.0. */ import * as t from 'io-ts'; -import type { SavedObjectMigrationFn } from '@kbn/core/server'; -import type { SyntheticsPrivateLocationsAttributes } from '../../../../../runtime_types/private_locations'; +import { + SavedObjectModelTransformationFn, + SavedObjectsModelVersion, +} from '@kbn/core-saved-objects-server'; +import { SyntheticsPrivateLocationsAttributes } from '../../../runtime_types/private_locations'; export const PrivateLocationAttributesCodecLegacy = t.intersection([ t.interface({ @@ -29,22 +32,33 @@ export type SyntheticsPrivateLocationsAttributesLegacy = t.TypeOf< typeof SyntheticsPrivateLocationsAttributesCodecLegacy >; -export const migration8100: SavedObjectMigrationFn< +export const transformGeoProperty: SavedObjectModelTransformationFn< SyntheticsPrivateLocationsAttributesLegacy, SyntheticsPrivateLocationsAttributes > = (privateLocationDoc) => { const { locations } = privateLocationDoc.attributes; return { - ...privateLocationDoc, - attributes: { - locations: locations.map((location) => ({ - ...location, - geo: { - lat: location.geo?.lat ? Number(location.geo?.lat) : null, - lon: location.geo?.lon ? Number(location.geo.lon) : null, - }, - isServiceManaged: false, - })), + document: { + ...privateLocationDoc, + attributes: { + locations: locations.map((location) => ({ + ...location, + geo: { + lat: Number(location.geo?.lat ?? 0), + lon: Number(location.geo?.lon ?? 0), + }, + isServiceManaged: false, + })), + }, }, }; }; + +export const modelVersion1: SavedObjectsModelVersion = { + changes: [ + { + type: 'unsafe_transform', + transformFn: transformGeoProperty, + }, + ], +}; diff --git a/x-pack/plugins/synthetics/server/saved_objects/private_locations.ts b/x-pack/plugins/synthetics/server/saved_objects/private_locations.ts index 0585b3a786ef76..ee7426ead23af0 100644 --- a/x-pack/plugins/synthetics/server/saved_objects/private_locations.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/private_locations.ts @@ -6,6 +6,7 @@ */ import { SavedObjectsType } from '@kbn/core/server'; +import { modelVersion1 } from './migrations/private_locations/model_version_1'; import { privateLocationsSavedObjectName } from '../../common/saved_objects/private_locations'; export const privateLocationsSavedObjectId = 'synthetics-privates-locations-singleton'; @@ -25,4 +26,7 @@ export const PRIVATE_LOCATIONS_SAVED_OBJECT_TYPE: SavedObjectsType = { management: { importableAndExportable: true, }, + modelVersions: { + 1: modelVersion1, + }, }; From 7277dba30f3f414b030a31c5ab5b2456e0aa47dd Mon Sep 17 00:00:00 2001 From: Oliver Gupte Date: Thu, 27 Jul 2023 04:28:48 -0700 Subject: [PATCH 29/58] [Logs onboarding] Refactors the install elastic agent steps to own component (#162600) --- .../wizard/install_elastic_agent.tsx | 524 ++++-------------- .../shared/get_elastic_agent_setup_command.ts | 49 ++ .../shared/install_elastic_agent_steps.tsx | 425 ++++++++++++++ .../wizard => shared}/step_status.tsx | 0 4 files changed, 570 insertions(+), 428 deletions(-) create mode 100644 x-pack/plugins/observability_onboarding/public/components/shared/get_elastic_agent_setup_command.ts create mode 100644 x-pack/plugins/observability_onboarding/public/components/shared/install_elastic_agent_steps.tsx rename x-pack/plugins/observability_onboarding/public/components/{app/custom_logs/wizard => shared}/step_status.tsx (100%) diff --git a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/install_elastic_agent.tsx b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/install_elastic_agent.tsx index 526f2970c55331..e29a2d84036e9a 100644 --- a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/install_elastic_agent.tsx +++ b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/install_elastic_agent.tsx @@ -8,28 +8,25 @@ import { EuiButton, EuiButtonEmpty, - EuiButtonGroup, - EuiCallOut, - EuiCodeBlock, EuiFlexGroup, EuiFlexItem, - EuiIconTip, - EuiLink, - EuiSkeletonRectangle, EuiSpacer, - EuiSteps, - EuiStepsProps, - EuiSwitch, EuiText, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { Buffer } from 'buffer'; -import { flatten, zip } from 'lodash'; import { default as React, useCallback, useEffect, useState } from 'react'; import { useWizard } from '.'; import { FETCH_STATUS, useFetcher } from '../../../../hooks/use_fetcher'; import { useKibanaNavigation } from '../../../../hooks/use_kibana_navigation'; +import { + ElasticAgentPlatform, + getElasticAgentSetupCommand, +} from '../../../shared/get_elastic_agent_setup_command'; +import { + InstallElasticAgentSteps, + ProgressStepId, + EuiStepStatus, +} from '../../../shared/install_elastic_agent_steps'; import { StepPanel, StepPanelContent, @@ -37,9 +34,7 @@ import { } from '../../../shared/step_panel'; import { ApiKeyBanner } from './api_key_banner'; import { BackButton } from './back_button'; -import { StepStatus } from './step_status'; -type ElasticAgentPlatform = 'linux-tar' | 'macos' | 'windows'; export function InstallElasticAgent() { const { navigateToKibanaUrl } = useKibanaNavigation(); const { goBack, goToStep, getState, setState } = useWizard(); @@ -196,56 +191,29 @@ export function InstallElasticAgent() { } }, [progressSucceded, refetchProgress]); - const getStep = useCallback( - ({ id, incompleteTitle, loadingTitle, completedTitle }) => { - const progress = progressData?.progress; - if (progress) { - const stepStatus = progress?.[id] - ?.status as EuiStepsProps['steps'][number]['status']; - const title = - stepStatus === 'loading' - ? loadingTitle - : stepStatus === 'complete' - ? completedTitle - : incompleteTitle; - return { - title, - children: null, - status: stepStatus ?? ('incomplete' as const), - message: progress?.[id]?.message, - }; - } - return { - title: incompleteTitle, - children: null, - status: 'incomplete' as const, - }; - }, - [progressData?.progress] - ); + const getCheckLogsStep = useCallback(() => { + const progress = progressData?.progress; + if (progress) { + const stepStatus = progress?.['logs-ingest']?.status as EuiStepStatus; + const title = + stepStatus === 'loading' + ? CHECK_LOGS_LABELS.loading + : stepStatus === 'complete' + ? CHECK_LOGS_LABELS.completed + : CHECK_LOGS_LABELS.incomplete; + return { title, status: stepStatus }; + } + return { + title: CHECK_LOGS_LABELS.incomplete, + status: 'incomplete' as const, + }; + }, [progressData?.progress]); const isInstallStarted = progressData?.progress['ea-download'] !== undefined; const isInstallCompleted = progressData?.progress?.['ea-status']?.status === 'complete'; - - const autoDownloadConfigStep = getStep({ - id: 'ea-config', - incompleteTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaConfig.incompleteTitle', - { defaultMessage: 'Configure the agent' } - ), - loadingTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaConfig.loadingTitle', - { defaultMessage: 'Downloading Elastic Agent config' } - ), - completedTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaConfig.completedTitle', - { - defaultMessage: 'Elastic Agent config written to {configPath}', - values: { configPath: '/opt/Elastic/Agent/elastic-agent.yml' }, - } - ), - }); + const autoDownloadConfigStatus = (progressData?.progress?.['ea-config'] + ?.status ?? 'incomplete') as EuiStepStatus; return ( - - -

- - {i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.installStep.hostRequirements', - { - defaultMessage: - 'host requirements and other installation options', - } - )} - - ), - }} - /> -

-
- - - - {i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.installStep.autoDownloadConfig', - { - defaultMessage: - "Automatically download the agent's config", - } - )} - - - - - - } - checked={wizardState.autoDownloadConfig} - onChange={onAutoDownloadConfig} - disabled={ - isInstallStarted || - (monitoringRole && !monitoringRole?.hasPrivileges) - } - /> - - {wizardState.autoDownloadConfig && ( - <> - - - - )} - - setElasticAgentPlatform(id as typeof elasticAgentPlatform) - } - /> - - - {getInstallShipperCommand({ - elasticAgentPlatform, - apiKeyEncoded, - apiEndpoint: setup?.apiEndpoint, - scriptDownloadUrl: setup?.scriptDownloadUrl, - elasticAgentVersion: setup?.elasticAgentVersion, - autoDownloadConfig: wizardState.autoDownloadConfig, - onboardingId, - })} - - - {isInstallStarted && ( - <> - - - {[ - { - id: 'ea-download', - incompleteTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaDownload.incompleteTitle', - { defaultMessage: 'Download Elastic Agent' } - ), - loadingTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaDownload.loadingTitle', - { defaultMessage: 'Downloading Elastic Agent' } - ), - completedTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaDownload.completedTitle', - { defaultMessage: 'Elastic Agent downloaded' } - ), - }, - { - id: 'ea-extract', - incompleteTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaExtract.incompleteTitle', - { defaultMessage: 'Extract Elastic Agent' } - ), - loadingTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaExtract.loadingTitle', - { defaultMessage: 'Extracting Elastic Agent' } - ), - completedTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaExtract.completedTitle', - { defaultMessage: 'Elastic Agent extracted' } - ), - }, - { - id: 'ea-install', - incompleteTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaInstall.incompleteTitle', - { defaultMessage: 'Install Elastic Agent' } - ), - loadingTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaInstall.loadingTitle', - { defaultMessage: 'Installing Elastic Agent' } - ), - completedTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaInstall.completedTitle', - { defaultMessage: 'Elastic Agent installed' } - ), - }, - { - id: 'ea-status', - incompleteTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaStatus.incompleteTitle', - { defaultMessage: 'Connect to the Elastic Agent' } - ), - loadingTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaStatus.loadingTitle', - { - defaultMessage: - 'Connecting to the Elastic Agent', - } - ), - completedTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.eaStatus.completedTitle', - { - defaultMessage: - 'Connected to the Elastic Agent', - } - ), - }, - ].map((step, index) => { - const { title, status, message } = getStep(step); - return ( - - ); - })} - - - )} - + label: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.installStep.choosePlatform.linux', + { defaultMessage: 'Linux' } ), + id: 'linux-tar', }, { - title: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.configureStep.title', - { defaultMessage: 'Configure the Elastic agent' } - ), - status: - yamlConfigStatus === FETCH_STATUS.LOADING - ? 'loading' - : autoDownloadConfigStep.status, - children: ( - <> - -

- {wizardState.autoDownloadConfig - ? i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.configStep.auto.description', - { - defaultMessage: - 'The agent config below will be downloaded by the install script and written to ({configPath}). This will overwrite any existing agent configuration.', - values: { - configPath: - '/opt/Elastic/Agent/elastic-agent.yml', - }, - } - ) - : i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.configStep.manual.description', - { - defaultMessage: - 'Add the following configuration to {configPath} on the host where you installed the Elastic agent.', - values: { - configPath: - '/opt/Elastic/Agent/elastic-agent.yml', - }, - } - )} -

-
- - - - {yamlConfig} - - - - - {i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.configStep.downloadConfigButton', - { defaultMessage: 'Download config file' } - )} - - - - - - + label: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.installStep.choosePlatform.macOS', + { defaultMessage: 'MacOS' } ), + id: 'macos', }, - getStep({ - id: 'logs-ingest', - incompleteTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.logsIngest.incompleteTitle', - { defaultMessage: 'Ship logs to Elastic Observability' } - ), - loadingTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.logsIngest.loadingTitle', - { defaultMessage: 'Waiting for Logs to be shipped...' } - ), - completedTitle: i18n.translate( - 'xpack.observability_onboarding.installElasticAgent.progress.logsIngest.completedTitle', - { defaultMessage: 'Logs are being shipped!' } + { + label: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.installStep.choosePlatform.windows', + { defaultMessage: 'Windows' } ), - }), + id: 'windows', + isDisabled: true, + }, ]} + onSelectPlatform={(id) => setElasticAgentPlatform(id)} + selectedPlatform={elasticAgentPlatform} + installAgentCommand={getElasticAgentSetupCommand({ + elasticAgentPlatform, + apiKeyEncoded, + apiEndpoint: setup?.apiEndpoint, + scriptDownloadUrl: setup?.scriptDownloadUrl, + elasticAgentVersion: setup?.elasticAgentVersion, + autoDownloadConfig: wizardState.autoDownloadConfig, + onboardingId, + })} + autoDownloadConfig={wizardState.autoDownloadConfig} + onToggleAutoDownloadConfig={onAutoDownloadConfig} + installAgentStatus={ + installShipperSetupStatus === FETCH_STATUS.LOADING + ? 'loading' + : isInstallCompleted + ? 'complete' + : 'current' + } + showInstallProgressSteps={isInstallStarted} + installProgressSteps={ + (progressData?.progress ?? {}) as Partial< + Record< + ProgressStepId, + { status: EuiStepStatus; message?: string } + > + > + } + configureAgentStatus={ + yamlConfigStatus === FETCH_STATUS.LOADING + ? 'loading' + : autoDownloadConfigStatus + } + configureAgentYaml={yamlConfig} + appendedSteps={[getCheckLogsStep()]} />
); } -function getInstallShipperCommand({ - elasticAgentPlatform, - apiKeyEncoded = '$API_KEY', - apiEndpoint = '$API_ENDPOINT', - scriptDownloadUrl = '$SCRIPT_DOWNLOAD_URL', - elasticAgentVersion = '$ELASTIC_AGENT_VERSION', - autoDownloadConfig = false, - onboardingId = '$ONBOARDING_ID', -}: { - elasticAgentPlatform: ElasticAgentPlatform; - apiKeyEncoded: string | undefined; - apiEndpoint: string | undefined; - scriptDownloadUrl: string | undefined; - elasticAgentVersion: string | undefined; - autoDownloadConfig: boolean; - onboardingId: string | undefined; -}) { - const setupScriptFilename = 'standalone_agent_setup.sh'; - const PLATFORM_COMMAND: Record = { - 'linux-tar': oneLine` - curl ${scriptDownloadUrl} -o ${setupScriptFilename} && - sudo bash ${setupScriptFilename} ${apiKeyEncoded} ${apiEndpoint} ${elasticAgentVersion} ${onboardingId} ${ - autoDownloadConfig ? 'autoDownloadConfig=1' : '' - } - `, - macos: oneLine` - curl -O https://elastic.co/agent-setup.sh && - sudo bash agent-setup.sh -- service.name=my-service --url=https://elasticsearch:8220 --enrollment-token=SRSc2ozWUItWXNuWE5oZzdERFU6anJtY0FIzhSRGlzeTJYcUF5UklfUQ== - `, - windows: oneLine` - curl -O https://elastic.co/agent-setup.sh && - sudo bash agent-setup.sh -- service.name=my-service --url=https://elasticsearch:8220 --enrollment-token=SRSc2ozWUItWXNuWE5oZzdERFU6anJtY0FIzhSRGlzeTJYcUF5UklfUQ== - `, - }; - return PLATFORM_COMMAND[elasticAgentPlatform]; -} - -function oneLine(parts: TemplateStringsArray, ...args: string[]) { - const str = flatten(zip(parts, args)).join(''); - return str.replace(/\s+/g, ' ').trim(); -} - type WizardState = ReturnType['getState']>; function hasAlreadySavedFlow({ apiKeyEncoded, onboardingId }: WizardState) { return Boolean(apiKeyEncoded && onboardingId); } + +const CHECK_LOGS_LABELS = { + incomplete: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.logsIngest.incompleteTitle', + { defaultMessage: 'Ship logs to Elastic Observability' } + ), + loading: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.logsIngest.loadingTitle', + { defaultMessage: 'Waiting for Logs to be shipped...' } + ), + completed: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.logsIngest.completedTitle', + { defaultMessage: 'Logs are being shipped!' } + ), +}; diff --git a/x-pack/plugins/observability_onboarding/public/components/shared/get_elastic_agent_setup_command.ts b/x-pack/plugins/observability_onboarding/public/components/shared/get_elastic_agent_setup_command.ts new file mode 100644 index 00000000000000..4bcd9aeeac3d99 --- /dev/null +++ b/x-pack/plugins/observability_onboarding/public/components/shared/get_elastic_agent_setup_command.ts @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { flatten, zip } from 'lodash'; + +export type ElasticAgentPlatform = 'linux-tar' | 'macos' | 'windows'; + +export function getElasticAgentSetupCommand({ + elasticAgentPlatform, + apiKeyEncoded = '$API_KEY', + apiEndpoint = '$API_ENDPOINT', + scriptDownloadUrl = '$SCRIPT_DOWNLOAD_URL', + elasticAgentVersion = '$ELASTIC_AGENT_VERSION', + autoDownloadConfig = false, + onboardingId = '$ONBOARDING_ID', +}: { + elasticAgentPlatform: ElasticAgentPlatform; + apiKeyEncoded: string | undefined; + apiEndpoint: string | undefined; + scriptDownloadUrl: string | undefined; + elasticAgentVersion: string | undefined; + autoDownloadConfig: boolean; + onboardingId: string | undefined; +}) { + const setupScriptFilename = 'standalone_agent_setup.sh'; + const LINUX_MACOS_COMMAND = oneLine` + curl ${scriptDownloadUrl} -o ${setupScriptFilename} && + sudo bash ${setupScriptFilename} ${apiKeyEncoded} ${apiEndpoint} ${elasticAgentVersion} ${onboardingId} ${ + autoDownloadConfig ? `autoDownloadConfig=1` : '' + } + `; + const PLATFORM_COMMAND: Record = { + 'linux-tar': LINUX_MACOS_COMMAND, + macos: LINUX_MACOS_COMMAND, + windows: oneLine` + curl -O https://elastic.co/agent-setup.sh && + sudo bash agent-setup.sh -- service.name=my-service --url=https://elasticsearch:8220 --enrollment-token=SRSc2ozWUItWXNuWE5oZzdERFU6anJtY0FIzhSRGlzeTJYcUF5UklfUQ== + `, + }; + return PLATFORM_COMMAND[elasticAgentPlatform]; +} + +function oneLine(parts: TemplateStringsArray, ...args: string[]) { + const str = flatten(zip(parts, args)).join(''); + return str.replace(/\s+/g, ' ').trim(); +} diff --git a/x-pack/plugins/observability_onboarding/public/components/shared/install_elastic_agent_steps.tsx b/x-pack/plugins/observability_onboarding/public/components/shared/install_elastic_agent_steps.tsx new file mode 100644 index 00000000000000..7eef98b4bc3016 --- /dev/null +++ b/x-pack/plugins/observability_onboarding/public/components/shared/install_elastic_agent_steps.tsx @@ -0,0 +1,425 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiButton, + EuiButtonGroup, + EuiCallOut, + EuiCodeBlock, + EuiFlexGroup, + EuiFlexItem, + EuiIconTip, + EuiLink, + EuiSkeletonRectangle, + EuiSpacer, + EuiSteps, + EuiStepsProps, + EuiSwitch, + EuiText, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { Buffer } from 'buffer'; +import React from 'react'; +import { intersection } from 'lodash'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { StepStatus } from './step_status'; + +export type EuiStepStatus = EuiStepsProps['steps'][number]['status']; + +export type ProgressStepId = + | 'ea-download' + | 'ea-extract' + | 'ea-install' + | 'ea-status' + | 'ea-config'; + +interface Props { + installAgentPlatformOptions: Array<{ + label: string; + id: PlatformId; + isDisabled?: boolean; + }>; + onSelectPlatform: (id: PlatformId) => void; + selectedPlatform: PlatformId; + installAgentCommand: string; + autoDownloadConfig: boolean; + onToggleAutoDownloadConfig: () => void; + installAgentStatus: EuiStepStatus; + showInstallProgressSteps: boolean; + installProgressSteps: Partial< + Record + >; + configureAgentStatus: EuiStepStatus; + configureAgentYaml: string; + appendedSteps?: Array>; +} + +export function InstallElasticAgentSteps({ + installAgentPlatformOptions, + onSelectPlatform, + selectedPlatform, + installAgentCommand, + autoDownloadConfig, + onToggleAutoDownloadConfig, + installAgentStatus, + showInstallProgressSteps, + installProgressSteps, + configureAgentStatus, + configureAgentYaml, + appendedSteps = [], +}: Props) { + const isInstallStarted = + intersection( + Object.keys(installProgressSteps), + Object.keys(PROGRESS_STEP_TITLES) + ).length > 0; + const autoDownloadConfigStep = getStep('ea-config', installProgressSteps); + return ( + + +

+ + {i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.installStep.hostRequirements', + { + defaultMessage: + 'host requirements and other installation options', + } + )} + + ), + }} + /> +

+
+ + + + {i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.installStep.autoDownloadConfig', + { + defaultMessage: + "Automatically download the agent's config", + } + )} + + + + + + } + checked={autoDownloadConfig} + onChange={onToggleAutoDownloadConfig} + disabled={isInstallStarted} + /> + + {autoDownloadConfig && ( + <> + + + + )} + ({ + id, + label, + isDisabled, + }) + )} + type="single" + idSelected={selectedPlatform} + onChange={(id: string) => { + onSelectPlatform(id as PlatformId); + }} + isDisabled={isInstallStarted} + /> + + + {installAgentCommand} + + + {showInstallProgressSteps && ( + <> + + + {( + [ + 'ea-download', + 'ea-extract', + 'ea-install', + 'ea-status', + ] as const + ).map((stepId) => { + const { title, status, message } = getStep( + stepId, + installProgressSteps + ); + return ( + + ); + })} + + + )} + + ), + }, + { + title: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.configureStep.title', + { defaultMessage: 'Configure the Elastic agent' } + ), + status: configureAgentStatus, + children: ( + <> + +

+ {autoDownloadConfig + ? i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.configStep.auto.description', + { + defaultMessage: + 'The agent config below will be downloaded by the install script and written to ({configPath}). This will overwrite any existing agent configuration.', + values: { + configPath: '/opt/Elastic/Agent/elastic-agent.yml', + }, + } + ) + : i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.configStep.manual.description', + { + defaultMessage: + 'Add the following configuration to {configPath} on the host where you installed the Elastic agent.', + values: { + configPath: '/opt/Elastic/Agent/elastic-agent.yml', + }, + } + )} +

+
+ + + + {configureAgentYaml} + + + + + {i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.configStep.downloadConfigButton', + { defaultMessage: 'Download config file' } + )} + + {showInstallProgressSteps && autoDownloadConfig ? ( + <> + + + + + + ) : null} + + ), + }, + ...appendedSteps.map((euiStep) => ({ children: null, ...euiStep })), + ]} + /> + ); +} + +function getStep( + id: ProgressStepId, + installProgressSteps: Props['installProgressSteps'] +): { title: string; status: EuiStepStatus; message?: string } { + const { loadingTitle, completedTitle, incompleteTitle } = + PROGRESS_STEP_TITLES[id]; + const stepProgress = installProgressSteps[id]; + if (stepProgress) { + const { status, message } = stepProgress; + const title = + status === 'loading' + ? loadingTitle + : status === 'complete' + ? completedTitle + : incompleteTitle; + return { + title, + status: status ?? ('incomplete' as const), + message, + }; + } + + return { + title: incompleteTitle, + status: 'incomplete' as const, + }; +} + +const PROGRESS_STEP_TITLES: Record< + ProgressStepId, + Record<'incompleteTitle' | 'loadingTitle' | 'completedTitle', string> +> = { + 'ea-download': { + incompleteTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaDownload.incompleteTitle', + { defaultMessage: 'Download Elastic Agent' } + ), + loadingTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaDownload.loadingTitle', + { defaultMessage: 'Downloading Elastic Agent' } + ), + completedTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaDownload.completedTitle', + { defaultMessage: 'Elastic Agent downloaded' } + ), + }, + 'ea-extract': { + incompleteTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaExtract.incompleteTitle', + { defaultMessage: 'Extract Elastic Agent' } + ), + loadingTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaExtract.loadingTitle', + { defaultMessage: 'Extracting Elastic Agent' } + ), + completedTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaExtract.completedTitle', + { defaultMessage: 'Elastic Agent extracted' } + ), + }, + 'ea-install': { + incompleteTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaInstall.incompleteTitle', + { defaultMessage: 'Install Elastic Agent' } + ), + loadingTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaInstall.loadingTitle', + { defaultMessage: 'Installing Elastic Agent' } + ), + completedTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaInstall.completedTitle', + { defaultMessage: 'Elastic Agent installed' } + ), + }, + 'ea-status': { + incompleteTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaStatus.incompleteTitle', + { defaultMessage: 'Connect to the Elastic Agent' } + ), + loadingTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaStatus.loadingTitle', + { + defaultMessage: 'Connecting to the Elastic Agent', + } + ), + completedTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaStatus.completedTitle', + { + defaultMessage: 'Connected to the Elastic Agent', + } + ), + }, + 'ea-config': { + incompleteTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaConfig.incompleteTitle', + { defaultMessage: 'Configure the agent' } + ), + loadingTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaConfig.loadingTitle', + { defaultMessage: 'Downloading Elastic Agent config' } + ), + completedTitle: i18n.translate( + 'xpack.observability_onboarding.installElasticAgent.progress.eaConfig.completedTitle', + { + defaultMessage: 'Elastic Agent config written to {configPath}', + values: { configPath: '/opt/Elastic/Agent/elastic-agent.yml' }, + } + ), + }, +}; diff --git a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/step_status.tsx b/x-pack/plugins/observability_onboarding/public/components/shared/step_status.tsx similarity index 100% rename from x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/step_status.tsx rename to x-pack/plugins/observability_onboarding/public/components/shared/step_status.tsx From 28800ef35ef27d1a2107d2e6d2bcb94a538b61fa Mon Sep 17 00:00:00 2001 From: Achyut Jhunjhunwala Date: Thu, 27 Jul 2023 13:49:05 +0200 Subject: [PATCH 30/58] [APM] Add range query to terms enum call (#162614) Closes https://github.com/elastic/kibana/issues/159202 --- .../app/storage_explorer/services_table/index.tsx | 4 +++- .../get_service_names_from_terms_enum.ts | 13 +++++++++++++ .../apm/server/routes/storage_explorer/route.ts | 11 +++++++++-- .../tests/storage_explorer/get_services.spec.ts | 2 ++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/apm/public/components/app/storage_explorer/services_table/index.tsx b/x-pack/plugins/apm/public/components/app/storage_explorer/services_table/index.tsx index cbe7d908c8acc9..b9ed2e67302753 100644 --- a/x-pack/plugins/apm/public/components/app/storage_explorer/services_table/index.tsx +++ b/x-pack/plugins/apm/public/components/app/storage_explorer/services_table/index.tsx @@ -112,12 +112,14 @@ export function ServicesTable() { environment, kuery, indexLifecyclePhase, + start, + end, }, }, }); } }, - [environment, kuery, indexLifecyclePhase, useOptimizedSorting] + [useOptimizedSorting, environment, kuery, indexLifecyclePhase, start, end] ); const serviceStatisticsFetch = useProgressiveFetcher( diff --git a/x-pack/plugins/apm/server/routes/services/get_services/get_service_names_from_terms_enum.ts b/x-pack/plugins/apm/server/routes/services/get_services/get_service_names_from_terms_enum.ts index 0e40a35c1bb6b3..1a40ce8ee88e4b 100644 --- a/x-pack/plugins/apm/server/routes/services/get_services/get_service_names_from_terms_enum.ts +++ b/x-pack/plugins/apm/server/routes/services/get_services/get_service_names_from_terms_enum.ts @@ -15,10 +15,14 @@ export async function getServiceNamesFromTermsEnum({ apmEventClient, environment, maxNumberOfServices, + start, + end, }: { apmEventClient: APMEventClient; environment: Environment; maxNumberOfServices: number; + start: number; + end: number; }) { if (environment !== ENVIRONMENT_ALL.value) { return []; @@ -36,6 +40,15 @@ export async function getServiceNamesFromTermsEnum({ }, size: maxNumberOfServices, field: SERVICE_NAME, + index_filter: { + range: { + ['@timestamp']: { + gte: start, + lte: end, + format: 'epoch_millis', + }, + }, + }, } ); diff --git a/x-pack/plugins/apm/server/routes/storage_explorer/route.ts b/x-pack/plugins/apm/server/routes/storage_explorer/route.ts index 3a862ab90aca45..39eb0f6f65881c 100644 --- a/x-pack/plugins/apm/server/routes/storage_explorer/route.ts +++ b/x-pack/plugins/apm/server/routes/storage_explorer/route.ts @@ -323,7 +323,12 @@ const storageExplorerGetServices = createApmServerRoute({ tags: ['access:apm'], }, params: t.type({ - query: t.intersection([indexLifecyclePhaseRt, environmentRt, kueryRt]), + query: t.intersection([ + indexLifecyclePhaseRt, + environmentRt, + kueryRt, + rangeRt, + ]), }), handler: async ( resources @@ -333,7 +338,7 @@ const storageExplorerGetServices = createApmServerRoute({ }>; }> => { const { - query: { environment, kuery, indexLifecyclePhase }, + query: { environment, kuery, indexLifecyclePhase, start, end }, } = resources.params; if ( @@ -352,6 +357,8 @@ const storageExplorerGetServices = createApmServerRoute({ apmEventClient, environment, maxNumberOfServices: 500, + start, + end, }); return { diff --git a/x-pack/test/apm_api_integration/tests/storage_explorer/get_services.spec.ts b/x-pack/test/apm_api_integration/tests/storage_explorer/get_services.spec.ts index de421ed1498274..4a1f59925a0186 100644 --- a/x-pack/test/apm_api_integration/tests/storage_explorer/get_services.spec.ts +++ b/x-pack/test/apm_api_integration/tests/storage_explorer/get_services.spec.ts @@ -37,6 +37,8 @@ export default function ApiTest({ getService }: FtrProviderContext) { environment, kuery, indexLifecyclePhase, + start, + end, }, }, }); From 8cf68dc6ba8f010e36538c1e7c92601a341efcf4 Mon Sep 17 00:00:00 2001 From: Alex Szabo Date: Thu, 27 Jul 2023 14:12:48 +0200 Subject: [PATCH 31/58] [Ops] Bump Node.js to version 18 (#160289) ## Summary Bumps node.js to 18.17.0 (replacement for PR #144012 which was later reverted) As a result, these categorical additions were needed: - `node` evocations will need the `--openssl-legacy-provider` flag, wherever it would use certain crypto functionalities - tests required updating of the expected HTTPS Agent call arguments, `noDelay` seems to be a default - `window.[NAME]` fields cannot be written directly - some stricter typechecks This is using our in-house built node.js 18 versions through the URLs the proxy-cache. (built with https://github.com/elastic/kibana-custom-nodejs-builds/pull/4) These urls are served from a bucket, where the RHEL7/Centos7 compatible node distributables are. (see: https://github.com/elastic/kibana-ci-proxy-cache/pull/7) Further todos: - [x] check docs wording and consistency - [ ] update the dependency report - [x] explain custom builds in documentation - [x] node_sass prebuilts --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Tiago Costa Co-authored-by: Thomas Watson --- .ci/Dockerfile | 2 +- .node-version | 2 +- .nvmrc | 2 +- WORKSPACE.bazel | 12 +- .../advanced/upgrading-nodejs.asciidoc | 9 +- docs/user/setup.asciidoc | 4 + package.json | 13 +- .../src/chrome_service.test.tsx | 13 +- .../recently_accessed_service.test.ts | 5 +- .../src/agent_manager.test.ts | 4 +- packages/kbn-es/src/artifact.ts | 1 - packages/kbn-monaco/BUILD.bazel | 2 + .../src/optimizer/observe_worker.ts | 1 + .../src/integration_tests/build.test.ts | 6 + packages/kbn-ui-shared-deps-npm/BUILD.bazel | 2 + packages/kbn-ui-shared-deps-src/BUILD.bazel | 2 + src/dev/build/lib/download.ts | 2 +- .../lib/integration_tests/download.test.ts | 4 +- .../build/tasks/patch_native_modules_task.ts | 27 +- .../models/sense_editor/sense_editor.test.js | 5 +- .../cloud/cloud_provider_collector.ts | 1 - .../server/collectors/cloud/detector/aws.ts | 1 - .../server/collectors/cloud/detector/azure.ts | 1 - .../cloud/detector/cloud_detector.ts | 1 - .../cloud/detector/cloud_service.ts | 1 - .../server/collectors/cloud/detector/gcp.ts | 1 - ...est_oauth_client_credentials_token.test.ts | 1 + .../lib/request_oauth_jwt_token.test.ts | 1 + .../server/lib/request_oauth_token.test.ts | 1 + .../canvas/scripts/shareable_runtime.js | 2 + .../lib/enterprise_search_config_api.ts | 1 - .../lists/public/exceptions/api.test.ts | 2 +- .../rule_management/api/api.test.ts | 4 +- .../scripts/endpoint/common/fleet_services.ts | 3 +- .../email/send_email_graph_api.test.ts | 3 + .../service_api_client.test.ts | 9 +- .../monitor_list/monitor_list.test.tsx | 5 +- yarn.lock | 330 +++++++++++++++--- 38 files changed, 378 insertions(+), 108 deletions(-) diff --git a/.ci/Dockerfile b/.ci/Dockerfile index fb292e09c3ccb7..3165805fe68c10 100644 --- a/.ci/Dockerfile +++ b/.ci/Dockerfile @@ -1,7 +1,7 @@ # NOTE: This Dockerfile is ONLY used to run certain tasks in CI. It is not used to run Kibana or as a distributable. # If you're looking for the Kibana Docker image distributable, please see: src/dev/build/tasks/os_packages/docker_generator/templates/dockerfile.template.ts -ARG NODE_VERSION=16.20.1 +ARG NODE_VERSION=18.17.0 FROM node:${NODE_VERSION} AS base diff --git a/.node-version b/.node-version index 47979412e93f2c..603606bc91118a 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -16.20.1 +18.17.0 diff --git a/.nvmrc b/.nvmrc index 47979412e93f2c..603606bc91118a 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -16.20.1 +18.17.0 diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel index f277a785009472..0b5c0d0bc36347 100644 --- a/WORKSPACE.bazel +++ b/WORKSPACE.bazel @@ -22,13 +22,13 @@ load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "yarn_install # Setup the Node.js toolchain for the architectures we want to support node_repositories( node_repositories = { - "16.20.1-darwin_amd64": ("node-v16.20.1-darwin-x64.tar.gz", "node-v16.20.1-darwin-x64", "d1f9c2a7c3a0fe09860f701af5fb8ff9ac72d72faa7ebabfeb5794503e79f955"), - "16.20.1-darwin_arm64": ("node-v16.20.1-darwin-arm64.tar.gz", "node-v16.20.1-darwin-arm64", "5f6b31c5a75567d382ba67220f3d7a2d9bb0c03d8af9307cd35a9cb32a6fde9d"), - "16.20.1-linux_arm64": ("node-v16.20.1-linux-arm64.tar.xz", "node-v16.20.1-linux-arm64", "7fce19f3d1c2952599a0b47f9f5d8f497265ad577f37f256a8c6a03be6353234"), - "16.20.1-linux_amd64": ("node-v16.20.1-linux-x64.tar.xz", "node-v16.20.1-linux-x64", "b6c60e1e106ad7d8881e83945a5208c1b1d1b63e6901c04b9dafa607aff3a154"), - "16.20.1-windows_amd64": ("node-v16.20.1-win-x64.zip", "node-v16.20.1-win-x64", "2a7fde996c57a969f0498742f99385a520eb14aac864e0eff9c32e3f3633ff0a"), + "18.17.0-darwin_amd64": ("node-v18.17.0-darwin-x64.tar.gz", "node-v18.17.0-darwin-x64", "2f381442381f7fbde2ca644c3275bec9c9c2a8d361f467b40e39428acdd6ccff"), + "18.17.0-darwin_arm64": ("node-v18.17.0-darwin-arm64.tar.gz", "node-v18.17.0-darwin-arm64", "19731ef427e77ad9c5f476eb62bfb02a7f179d3012feed0bbded62e45f23e679"), + "18.17.0-linux_arm64": ("node-v18.17.0-linux-arm64.tar.xz", "node-v18.17.0-linux-arm64", "fbd2904178ee47da6e0386bc9704a12b1f613da6ad194878a517d4a69ba56544"), + "18.17.0-linux_amd64": ("node-v18.17.0-linux-x64.tar.xz", "node-v18.17.0-linux-x64", "f36facda28c4d5ce76b3a1b4344e688d29d9254943a47f2f1909b1a10acb1959"), + "18.17.0-windows_amd64": ("node-v18.17.0-win-x64.zip", "node-v18.17.0-win-x64", "06e30b4e70b18d794651ef132c39080e5eaaa1187f938721d57edae2824f4e96"), }, - node_version = "16.20.1", + node_version = "18.17.0", node_urls = [ "https://nodejs.org/dist/v{version}/{filename}", ], diff --git a/docs/developer/advanced/upgrading-nodejs.asciidoc b/docs/developer/advanced/upgrading-nodejs.asciidoc index 86eaf039e9938a..c2c559c9c380e9 100644 --- a/docs/developer/advanced/upgrading-nodejs.asciidoc +++ b/docs/developer/advanced/upgrading-nodejs.asciidoc @@ -17,7 +17,7 @@ These files must be updated when upgrading Node.js: - {kib-repo}blob/{branch}/WORKSPACE.bazel[`WORKSPACE.bazel`] - The version is specified in the `node_version` property. Besides this property, the list of files under `node_repositories` must be updated along with their respective SHA256 hashes. These can be found on the https://nodejs.org[nodejs.org] website. - Example for Node.js v16.20.1: https://nodejs.org/dist/v16.20.1/SHASUMS256.txt.asc + Example for Node.js v18.17.0: https://nodejs.org/dist/v18.17.0/SHASUMS256.txt.asc See PR {kib-repo}pull/128123[#128123] for an example of how the Node.js version has been upgraded previously. @@ -30,6 +30,13 @@ When upgrading to a new major version of Node.js, the following extra steps must You can change which Node.js major version to view, by changing the selected branch. If Node.js has dropped support for platform still supported by Kibana, appropriate steps must be taken as soon as possible to deprecate support for this platform. This way support for it can be dropped before the currently used major version of Node.js https://github.com/nodejs/release#release-schedule[reaches End-of-Life]. +[[custom-nodejs-builds]] +=== Custom builds of Node.js + +Due to Node.js 16 coming to an https://nodejs.org/en/blog/announcements/nodejs16-eol[early End-of-Life] and Node.js 18 no longer supporting the same platforms that {kib} supports (most notably CentOS7/RHEL7), we cannot bundle the official Node.js binaries with the Linux distributable of {kib}. +To keep support for these older platforms, we're bundling the Linux distributable of {kib} with a https://github.com/elastic/kibana-custom-nodejs-builds[custom build of Node.js] with extended backwards compatibility. +The only difference between the offical Node.js build and our custom build, is the version of `glibc` that it's compiled against. + === Backporting The following rules are not set in stone. diff --git a/docs/user/setup.asciidoc b/docs/user/setup.asciidoc index 87c398f1d44e0a..981e8651c7f132 100644 --- a/docs/user/setup.asciidoc +++ b/docs/user/setup.asciidoc @@ -21,6 +21,10 @@ Windows. Since Kibana runs on Node.js, we include the necessary Node.js binaries for these platforms. Running Kibana against a separately maintained version of Node.js is not supported. +To support certain older Linux platforms (most notably CentOS7/RHEL7), {kib} +for Linux ships with a custom build of Node.js with glibc 2.17 support. For +details, see <>. + [float] [[elasticsearch-version]] == Elasticsearch version diff --git a/package.json b/package.json index 47e82a89d274fa..3b1ee85678c9ee 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "serverless-security": "node scripts/kibana --dev --serverless=security", "spec_to_console": "node scripts/spec_to_console", "start": "node scripts/kibana --dev", - "storybook": "node scripts/storybook", + "storybook": "node --openssl-legacy-provider scripts/storybook", "test:ftr": "node scripts/functional_tests", "test:ftr:runner": "node scripts/functional_test_runner", "test:ftr:server": "node scripts/functional_tests_server", @@ -73,11 +73,11 @@ "url": "https://github.com/elastic/kibana.git" }, "engines": { - "node": "16.20.1", + "node": "18.17.0", "yarn": "^1.22.19" }, "resolutions": { - "**/@types/node": "16.11.68", + "**/@types/node": "18.17.1", "**/chokidar": "^3.5.3", "**/globule/minimatch": "^3.1.2", "**/hoist-non-react-statics": "^3.3.2", @@ -788,7 +788,6 @@ "@turf/length": "^6.0.2", "@xstate/react": "^3.2.2", "JSONStream": "1.3.5", - "abort-controller": "^3.0.0", "adm-zip": "^0.5.9", "ajv": "^8.12.0", "antlr4ts": "^0.5.0-alpha.3", @@ -929,7 +928,7 @@ "query-string": "^6.13.2", "rbush": "^3.0.1", "re-resizable": "^6.9.9", - "re2": "1.17.4", + "re2": "1.17.7", "react": "^17.0.2", "react-ace": "^7.0.5", "react-beautiful-dnd": "^13.1.0", @@ -1298,8 +1297,8 @@ "@types/multistream": "^4.1.0", "@types/mustache": "^0.8.31", "@types/nock": "^10.0.3", - "@types/node": "16.11.68", - "@types/node-fetch": "^2.6.0", + "@types/node": "18.17.1", + "@types/node-fetch": "2.6.4", "@types/node-forge": "^1.3.1", "@types/nodemailer": "^6.4.0", "@types/normalize-path": "^3.0.0", diff --git a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx index f680a1b5d6ba90..ad9d2921443177 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx @@ -36,11 +36,14 @@ class FakeApp implements App { const store = new Map(); const originalLocalStorage = window.localStorage; -(window as any).localStorage = { - setItem: (key: string, value: string) => store.set(String(key), String(value)), - getItem: (key: string) => store.get(String(key)), - removeItem: (key: string) => store.delete(String(key)), -}; +Object.defineProperty(window, 'localStorage', { + value: { + setItem: (key: string, value: string) => store.set(String(key), String(value)), + getItem: (key: string) => store.get(String(key)), + removeItem: (key: string) => store.delete(String(key)), + }, + writable: true, +}); function defaultStartDeps(availableApps?: App[]) { const deps = { diff --git a/packages/core/chrome/core-chrome-browser-internal/src/recently_accessed/recently_accessed_service.test.ts b/packages/core/chrome/core-chrome-browser-internal/src/recently_accessed/recently_accessed_service.test.ts index 9bafbe09918eba..20784f0f2ea113 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/recently_accessed/recently_accessed_service.test.ts +++ b/packages/core/chrome/core-chrome-browser-internal/src/recently_accessed/recently_accessed_service.test.ts @@ -44,7 +44,10 @@ describe('RecentlyAccessed#start()', () => { let originalLocalStorage: Storage; beforeAll(() => { originalLocalStorage = window.localStorage; - window.localStorage = new LocalStorageMock(); + Object.defineProperty(window, 'localStorage', { + value: new LocalStorageMock(), + writable: true, + }); }); beforeEach(() => localStorage.clear()); afterAll(() => (window.localStorage = originalLocalStorage)); diff --git a/packages/core/elasticsearch/core-elasticsearch-client-server-internal/src/agent_manager.test.ts b/packages/core/elasticsearch/core-elasticsearch-client-server-internal/src/agent_manager.test.ts index 448bfe2674e8fa..de5c960be35bf3 100644 --- a/packages/core/elasticsearch/core-elasticsearch-client-server-internal/src/agent_manager.test.ts +++ b/packages/core/elasticsearch/core-elasticsearch-client-server-internal/src/agent_manager.test.ts @@ -16,8 +16,8 @@ import { AgentManager } from './agent_manager'; jest.mock('http'); jest.mock('https'); -const HttpAgentMock = HttpAgent as jest.Mock; -const HttpsAgentMock = HttpsAgent as jest.Mock; +const HttpAgentMock = HttpAgent as unknown as jest.Mock; +const HttpsAgentMock = HttpsAgent as unknown as jest.Mock; describe('AgentManager', () => { let logger: MockedLogger; diff --git a/packages/kbn-es/src/artifact.ts b/packages/kbn-es/src/artifact.ts index 04cde128181b33..57a0e6fd5db06a 100644 --- a/packages/kbn-es/src/artifact.ts +++ b/packages/kbn-es/src/artifact.ts @@ -14,7 +14,6 @@ import { pipeline, Transform } from 'stream'; import { setTimeout } from 'timers/promises'; import fetch, { Headers } from 'node-fetch'; -import AbortController from 'abort-controller'; import chalk from 'chalk'; import { ToolingLog } from '@kbn/tooling-log'; diff --git a/packages/kbn-monaco/BUILD.bazel b/packages/kbn-monaco/BUILD.bazel index 8d13702e74588f..2ca10b073fd18f 100644 --- a/packages/kbn-monaco/BUILD.bazel +++ b/packages/kbn-monaco/BUILD.bazel @@ -56,9 +56,11 @@ webpack_cli( env = select({ "//:dist": { "NODE_ENV": "production", + "NODE_OPTIONS": "--openssl-legacy-provider", }, "//conditions:default": { "NODE_ENV": "development", + "NODE_OPTIONS": "--openssl-legacy-provider", }, }), visibility = ["//visibility:public"], diff --git a/packages/kbn-optimizer/src/optimizer/observe_worker.ts b/packages/kbn-optimizer/src/optimizer/observe_worker.ts index 22674f7ca86994..0ac2dda605e920 100644 --- a/packages/kbn-optimizer/src/optimizer/observe_worker.ts +++ b/packages/kbn-optimizer/src/optimizer/observe_worker.ts @@ -61,6 +61,7 @@ function usingWorkerProc(config: OptimizerConfig, fn: (proc: ChildProcess) => const proc = fork(require.resolve('../worker/run_worker'), [], { execArgv: [ `--require=@kbn/babel-register/install`, + '--openssl-legacy-provider', ...(inspectFlag && config.inspectWorkers ? [`${inspectFlag}=${inspectPortCounter++}`] : []), diff --git a/packages/kbn-plugin-helpers/src/integration_tests/build.test.ts b/packages/kbn-plugin-helpers/src/integration_tests/build.test.ts index 5b6f7404e64a07..e3d1ca81e2c26d 100644 --- a/packages/kbn-plugin-helpers/src/integration_tests/build.test.ts +++ b/packages/kbn-plugin-helpers/src/integration_tests/build.test.ts @@ -39,6 +39,9 @@ it('builds a generated plugin into a viable archive', async () => { process.execPath, ['scripts/generate_plugin', '-y', '--name', 'fooTestPlugin'], { + env: { + NODE_OPTIONS: '--openssl-legacy-provider', + }, cwd: REPO_ROOT, all: true, } @@ -61,6 +64,9 @@ it('builds a generated plugin into a viable archive', async () => { process.execPath, ['../../scripts/plugin_helpers', 'build', '--kibana-version', '7.5.0'], { + env: { + NODE_OPTIONS: '--openssl-legacy-provider', + }, cwd: PLUGIN_DIR, all: true, } diff --git a/packages/kbn-ui-shared-deps-npm/BUILD.bazel b/packages/kbn-ui-shared-deps-npm/BUILD.bazel index e20aabc31a0252..3b6cf5f0dfeda1 100644 --- a/packages/kbn-ui-shared-deps-npm/BUILD.bazel +++ b/packages/kbn-ui-shared-deps-npm/BUILD.bazel @@ -86,9 +86,11 @@ webpack_cli( env = select({ "//:dist": { "NODE_ENV": "production", + "NODE_OPTIONS": "--openssl-legacy-provider", }, "//conditions:default": { "NODE_ENV": "development", + "NODE_OPTIONS": "--openssl-legacy-provider", }, }) ) diff --git a/packages/kbn-ui-shared-deps-src/BUILD.bazel b/packages/kbn-ui-shared-deps-src/BUILD.bazel index 0b350c51331ff7..49c2cc62dcfe57 100644 --- a/packages/kbn-ui-shared-deps-src/BUILD.bazel +++ b/packages/kbn-ui-shared-deps-src/BUILD.bazel @@ -45,9 +45,11 @@ webpack_cli( env = select({ "//:dist": { "NODE_ENV": "production", + "NODE_OPTIONS": "--openssl-legacy-provider", }, "//conditions:default": { "NODE_ENV": "development", + "NODE_OPTIONS": "--openssl-legacy-provider", }, }), visibility = ["//visibility:public"], diff --git a/src/dev/build/lib/download.ts b/src/dev/build/lib/download.ts index d39cb7d77f9610..ea9f56cb4fe35d 100644 --- a/src/dev/build/lib/download.ts +++ b/src/dev/build/lib/download.ts @@ -112,7 +112,7 @@ export async function downloadToDisk({ const downloadedSha = hash.digest('hex'); if (downloadedSha !== shaChecksum) { throw new Error( - `Downloaded checksum ${downloadedSha} does not match the expected ${shaAlgorithm} checksum.` + `Downloaded checksum ${downloadedSha} does not match the expected (${shaAlgorithm}) checksum ${shaChecksum}, for file: ${url}.` ); } } diff --git a/src/dev/build/lib/integration_tests/download.test.ts b/src/dev/build/lib/integration_tests/download.test.ts index 7046a831d84f0e..8291427d34e32f 100644 --- a/src/dev/build/lib/integration_tests/download.test.ts +++ b/src/dev/build/lib/integration_tests/download.test.ts @@ -113,7 +113,7 @@ describe('downloadToDisk', () => { shaAlgorithm: 'sha256', }); await expect(promise).rejects.toMatchInlineSnapshot( - `[Error: Downloaded checksum 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae does not match the expected sha256 checksum.]` + `[Error: Downloaded checksum ${FOO_SHA256} does not match the expected (sha256) checksum bar, for file: ${serverUrl}.]` ); try { @@ -175,7 +175,7 @@ describe('downloadToDisk', () => { " info Retrying in 0.1 seconds", " debg [2/3] Attempting download of TEST_SERVER_URL sha256", " debg Downloaded 3 bytes to TMP_DIR/__tmp_download_js_test_file__", - " debg Download failed: Downloaded checksum fcde2b2edba56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9 does not match the expected sha256 checksum.", + " debg Download failed: Downloaded checksum fcde2b2edba56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9 does not match the expected (sha256) checksum 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae, for file: TEST_SERVER_URL.", " debg Deleting downloaded data at TMP_DIR/__tmp_download_js_test_file__", " info Retrying in 0.2 seconds", " debg [3/3] Attempting download of TEST_SERVER_URL sha256", diff --git a/src/dev/build/tasks/patch_native_modules_task.ts b/src/dev/build/tasks/patch_native_modules_task.ts index 2c4436f387dfe8..f7b323f13efc7e 100644 --- a/src/dev/build/tasks/patch_native_modules_task.ts +++ b/src/dev/build/tasks/patch_native_modules_task.ts @@ -41,17 +41,13 @@ interface Package { const packages: Package[] = [ { name: 're2', - version: '1.17.4', + version: '1.17.7', destinationPath: 'node_modules/re2/build/Release/re2.node', extractMethod: 'gunzip', archives: { - 'darwin-x64': { - url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.17.4/darwin-x64-93.gz', - sha256: '9558c5cb39622e9b3653203e772b129d6c634e7dbd7af1b244352fc1d704601f', - }, 'linux-x64': { - url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.17.4/linux-x64-93.gz', - sha256: '4d06747b266c75b6f7ced93977692c0586ce6a52924cabb569bd966378941aa1', + url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.17.7/linux-x64-108.gz', + sha256: 'e0b62ff7c415c95f57232f2726711c0fd71056c848538f095ba3fa1126ef5e31', }, // ARM builds are currently done manually as Github Actions used in upstream project @@ -67,8 +63,13 @@ const packages: Package[] = [ // * capture the sha256 with: `shasum -a 256 linux-arm64-*` // * upload the `linux-arm64-*.gz` artifact to the `yarn-prebuilt-artifacts` bucket in GCS using the correct version number 'linux-arm64': { - url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.17.4/linux-arm64-93.gz', - sha256: '25409584f76f3d6ed85463d84adf094eb6e256ed1cb0b754b95bcbda6691fc26', + url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.17.7/linux-arm64-108.gz', + sha256: 'e2025ead87be9f1ec4a9d892d1cce69c573101762720d56f52b1d52ed7ae0fef', + }, + + 'darwin-x64': { + url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.17.7/darwin-x64-108.gz', + sha256: '4ed378c5a7fe6134b717afe7642254aff1ed7a881cbcaa53a012ac3efab49f99', }, // A similar process is necessary for building on ARM macs: @@ -78,13 +79,13 @@ const packages: Package[] = [ // * capture the sha256 with: `shasum -a 256 darwin-arm64-*` // * upload the `darwin-arm64-*.gz` artifact to the `yarn-prebuilt-artifacts` bucket in GCS using the correct version number 'darwin-arm64': { - url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.17.4/darwin-arm64-93.gz', - sha256: 'd4b708749ddef1c87019f6b80e051ed0c29ccd1de34f233c47d8dcaddf803872', + url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.17.7/darwin-arm64-108.gz', + sha256: '42afc32137ff5c5bebae5d68347a9786906748c2f28e06194d8950707f2ae90e', }, 'win32-x64': { - url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.17.4/win32-x64-93.gz', - sha256: '0320d0c0385432944c6fb3c8c8fcd78d440ce5626f7618f9ec71d88e44820674', + url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.17.7/win32-x64-108.gz', + sha256: 'ff72fe02de652262659c8e17e44a932f3c873362233756b40d1a97538d05de92', }, }, }, diff --git a/src/plugins/console/public/application/models/sense_editor/sense_editor.test.js b/src/plugins/console/public/application/models/sense_editor/sense_editor.test.js index 244092d04ff875..0d04f3b8e372f6 100644 --- a/src/plugins/console/public/application/models/sense_editor/sense_editor.test.js +++ b/src/plugins/console/public/application/models/sense_editor/sense_editor.test.js @@ -39,7 +39,10 @@ describe('Editor', () => { oldUrl = global.URL; olldWindow = { ...global.window }; global.URL = URL; - global.window = Object.create(window); + Object.defineProperty(global, 'window', { + value: Object.create(window), + writable: true, + }); Object.defineProperty(window, 'location', { value: { origin: 'http://localhost:5620', diff --git a/src/plugins/kibana_usage_collection/server/collectors/cloud/cloud_provider_collector.ts b/src/plugins/kibana_usage_collection/server/collectors/cloud/cloud_provider_collector.ts index 238462cf863c78..6939b20f4169c2 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/cloud/cloud_provider_collector.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/cloud/cloud_provider_collector.ts @@ -7,7 +7,6 @@ */ import { firstValueFrom, type Observable } from 'rxjs'; -import AbortController from 'abort-controller'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; import { CloudDetector } from './detector'; diff --git a/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/aws.ts b/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/aws.ts index ca1fe78aab5bfd..833548f55b8d6e 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/aws.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/aws.ts @@ -9,7 +9,6 @@ import { readFile } from 'fs/promises'; import { get, omit } from 'lodash'; import fetch from 'node-fetch'; -import { AbortSignal } from 'abort-controller'; import { CloudService } from './cloud_service'; import { CloudServiceResponse } from './cloud_response'; diff --git a/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/azure.ts b/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/azure.ts index 11a84b2e860140..23b86be59a6414 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/azure.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/azure.ts @@ -8,7 +8,6 @@ import { get, omit } from 'lodash'; import fetch from 'node-fetch'; -import { AbortSignal } from 'abort-controller'; import { CloudService } from './cloud_service'; import { CloudServiceResponse } from './cloud_response'; diff --git a/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/cloud_detector.ts b/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/cloud_detector.ts index d3664f8c94daa4..7e79f26d23041c 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/cloud_detector.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/cloud_detector.ts @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -import { AbortSignal } from 'abort-controller'; import type { CloudService } from './cloud_service'; import type { CloudServiceResponseJson } from './cloud_response'; diff --git a/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/cloud_service.ts b/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/cloud_service.ts index e6751321528a24..58ab2352253902 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/cloud_service.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/cloud_service.ts @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -import { AbortSignal } from 'abort-controller'; import { isObject, isPlainObject } from 'lodash'; import { CloudServiceResponse } from './cloud_response'; diff --git a/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/gcp.ts b/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/gcp.ts index 2c73a81fc94da3..816354524166b3 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/gcp.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/cloud/detector/gcp.ts @@ -7,7 +7,6 @@ */ import fetch, { Response } from 'node-fetch'; -import { AbortSignal } from 'abort-controller'; import { CloudService } from './cloud_service'; import { CloudServiceResponse } from './cloud_response'; diff --git a/x-pack/plugins/actions/server/lib/request_oauth_client_credentials_token.test.ts b/x-pack/plugins/actions/server/lib/request_oauth_client_credentials_token.test.ts index 20896e2691f102..223c8c28b55bc6 100644 --- a/x-pack/plugins/actions/server/lib/request_oauth_client_credentials_token.test.ts +++ b/x-pack/plugins/actions/server/lib/request_oauth_client_credentials_token.test.ts @@ -74,6 +74,7 @@ describe('requestOAuthClientCredentialsToken', () => { "maxSockets": Infinity, "maxTotalSockets": Infinity, "options": Object { + "noDelay": true, "path": null, "rejectUnauthorized": true, }, diff --git a/x-pack/plugins/actions/server/lib/request_oauth_jwt_token.test.ts b/x-pack/plugins/actions/server/lib/request_oauth_jwt_token.test.ts index 318775762bbbd5..af65bcf67d3dbb 100644 --- a/x-pack/plugins/actions/server/lib/request_oauth_jwt_token.test.ts +++ b/x-pack/plugins/actions/server/lib/request_oauth_jwt_token.test.ts @@ -75,6 +75,7 @@ describe('requestOAuthJWTToken', () => { "maxSockets": Infinity, "maxTotalSockets": Infinity, "options": Object { + "noDelay": true, "path": null, "rejectUnauthorized": true, }, diff --git a/x-pack/plugins/actions/server/lib/request_oauth_token.test.ts b/x-pack/plugins/actions/server/lib/request_oauth_token.test.ts index cc9ea6a74517ac..9843783aadf8de 100644 --- a/x-pack/plugins/actions/server/lib/request_oauth_token.test.ts +++ b/x-pack/plugins/actions/server/lib/request_oauth_token.test.ts @@ -82,6 +82,7 @@ describe('requestOAuthToken', () => { "maxSockets": Infinity, "maxTotalSockets": Infinity, "options": Object { + "noDelay": true, "path": null, "rejectUnauthorized": true, }, diff --git a/x-pack/plugins/canvas/scripts/shareable_runtime.js b/x-pack/plugins/canvas/scripts/shareable_runtime.js index a0b8421f8da012..f3e1e66c1744aa 100644 --- a/x-pack/plugins/canvas/scripts/shareable_runtime.js +++ b/x-pack/plugins/canvas/scripts/shareable_runtime.js @@ -55,6 +55,7 @@ run( execa.sync( process.execPath, [ + '--openssl-legacy-provider', require.resolve('webpack-dev-server/bin/webpack-dev-server'), '--config', webpackConfig, @@ -88,6 +89,7 @@ run( execa.sync( process.execPath, [ + '--openssl-legacy-provider', require.resolve('webpack/bin/webpack'), '--config', webpackConfig, diff --git a/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.ts b/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.ts index 7d849d23df80db..16aa1ab0100b98 100644 --- a/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.ts +++ b/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.ts @@ -5,7 +5,6 @@ * 2.0. */ -import AbortController from 'abort-controller'; import fetch from 'node-fetch'; import { KibanaRequest, Logger } from '@kbn/core/server'; diff --git a/x-pack/plugins/lists/public/exceptions/api.test.ts b/x-pack/plugins/lists/public/exceptions/api.test.ts index a0f2bf9c21fe4f..318bbde58688de 100644 --- a/x-pack/plugins/lists/public/exceptions/api.test.ts +++ b/x-pack/plugins/lists/public/exceptions/api.test.ts @@ -689,7 +689,7 @@ describe('Exceptions Lists API', () => { stream: jest.fn(), text: jest.fn(), type: 'json', - } as Blob; + } as unknown as Blob; beforeEach(() => { httpMock.fetch.mockResolvedValue(blob); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts index e43581e5739f4e..aad6cf8a049175 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts @@ -445,7 +445,7 @@ describe('Detections Rules API', () => { slice: jest.fn(), stream: jest.fn(), text: jest.fn(), - } as File; + } as unknown as File; const formData = new FormData(); formData.append('file', fileToImport); @@ -527,7 +527,7 @@ describe('Detections Rules API', () => { slice: jest.fn(), stream: jest.fn(), text: jest.fn(), - } as Blob; + } as unknown as Blob; beforeEach(() => { fetchMock.mockClear(); diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts index fca93d1848f4ae..ea788063b572c8 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts @@ -279,7 +279,8 @@ export const getAgentDownloadUrl = async ( ): Promise => { const agentVersion = closestMatch ? await getLatestAgentDownloadVersion(version, log) : version; const downloadArch = - { arm64: 'arm64', x64: 'x86_64' }[process.arch] ?? `UNSUPPORTED_ARCHITECTURE_${process.arch}`; + { arm64: 'arm64', x64: 'x86_64' }[process.arch as string] ?? + `UNSUPPORTED_ARCHITECTURE_${process.arch}`; const agentFile = `elastic-agent-${agentVersion}-linux-${downloadArch}.tar.gz`; const artifactSearchUrl = `https://artifacts-api.elastic.co/v1/search/${agentVersion}/${agentFile}`; diff --git a/x-pack/plugins/stack_connectors/server/connector_types/email/send_email_graph_api.test.ts b/x-pack/plugins/stack_connectors/server/connector_types/email/send_email_graph_api.test.ts index 4ab03837f416b6..199681a13e9683 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/email/send_email_graph_api.test.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/email/send_email_graph_api.test.ts @@ -90,6 +90,7 @@ describe('sendEmailGraphApi', () => { "maxSockets": Infinity, "maxTotalSockets": Infinity, "options": Object { + "noDelay": true, "path": null, "rejectUnauthorized": true, }, @@ -180,6 +181,7 @@ describe('sendEmailGraphApi', () => { "maxSockets": Infinity, "maxTotalSockets": Infinity, "options": Object { + "noDelay": true, "path": null, "rejectUnauthorized": true, }, @@ -269,6 +271,7 @@ describe('sendEmailGraphApi', () => { "maxSockets": Infinity, "maxTotalSockets": Infinity, "options": Object { + "noDelay": true, "path": null, "rejectUnauthorized": true, }, diff --git a/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.test.ts b/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.test.ts index bd094c10e9ef88..3c2a0196251369 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.test.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.test.ts @@ -231,7 +231,7 @@ describe('callAPI', () => { 'x-kibana-version': '8.7.0', }, httpsAgent: expect.objectContaining({ - options: { rejectUnauthorized: true, path: null }, + options: { rejectUnauthorized: true, path: null, noDelay: true }, }), method: 'POST', url: 'https://service.dev/monitors', @@ -251,7 +251,7 @@ describe('callAPI', () => { 'x-kibana-version': '8.7.0', }, httpsAgent: expect.objectContaining({ - options: { rejectUnauthorized: true, path: null }, + options: { rejectUnauthorized: true, path: null, noDelay: true }, }), method: 'POST', url: 'https://qa.service.elstc.co/monitors', @@ -271,7 +271,7 @@ describe('callAPI', () => { 'x-kibana-version': '8.7.0', }, httpsAgent: expect.objectContaining({ - options: { rejectUnauthorized: true, path: null }, + options: { rejectUnauthorized: true, path: null, noDelay: true }, }), method: 'POST', url: 'https://qa.service.stg.co/monitors', @@ -347,6 +347,7 @@ describe('callAPI', () => { options: { rejectUnauthorized: true, path: null, + noDelay: true, cert: 'test-certificate', key: 'test-key', }, @@ -400,6 +401,7 @@ describe('callAPI', () => { options: { rejectUnauthorized: true, path: null, + noDelay: true, cert: 'test-certificate', key: 'test-key', }, @@ -459,6 +461,7 @@ describe('callAPI', () => { options: { rejectUnauthorized: true, path: null, + noDelay: true, cert: 'test-certificate', key: 'test-key', }, diff --git a/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.test.tsx index 38c3c64dc37dad..41278c30863fbb 100644 --- a/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.test.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.test.tsx @@ -133,7 +133,10 @@ describe('MonitorList component', () => { setItem: jest.fn(), }; - global.localStorage = localStorageMock; + Object.defineProperty(global, 'localStorage', { + value: localStorageMock, + writable: true, + }); }); it('renders a no items message when no data is provided', async () => { diff --git a/yarn.lock b/yarn.lock index 80a5baaef5903d..3dfd4bedfdf256 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2396,6 +2396,18 @@ resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" @@ -6218,6 +6230,13 @@ "@gar/promisify" "^1.1.3" semver "^7.3.5" +"@npmcli/fs@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== + dependencies: + semver "^7.3.5" + "@npmcli/move-file@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" @@ -6635,6 +6654,11 @@ node-addon-api "^3.2.1" node-gyp-build "^4.3.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": version "0.5.7" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz#58f8217ba70069cc6a73f5d7e05e85b458c150e2" @@ -8994,7 +9018,15 @@ dependencies: "@types/node" "*" -"@types/node-fetch@^2.5.7", "@types/node-fetch@^2.6.0": +"@types/node-fetch@2.6.4": + version "2.6.4" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660" + integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node-fetch@^2.5.7": version "2.6.2" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== @@ -9016,10 +9048,10 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@16.11.68", "@types/node@>= 8", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@>=8.9.0", "@types/node@^10.1.0", "@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0", "@types/node@^14.14.31": - version "16.11.68" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.68.tgz#30ee923f4d940793e0380f5ce61c0bd4b7196b6c" - integrity sha512-JkRpuVz3xCNCWaeQ5EHLR/6woMbHZz/jZ7Kmc63AkU+1HxnoUugzSWMck7dsR4DvNYX8jp9wTi9K7WvnxOIQZQ== +"@types/node@*", "@types/node@18.17.1", "@types/node@>= 8", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@>=8.9.0", "@types/node@^10.1.0", "@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0", "@types/node@^14.14.31": + version "18.17.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.1.tgz#84c32903bf3a09f7878c391d31ff08f6fe7d8335" + integrity sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw== "@types/nodemailer@^6.4.0": version "6.4.0" @@ -10200,18 +10232,11 @@ abab@^2.0.4, abab@^2.0.6: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@1: +abbrev@1, abbrev@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -10482,6 +10507,11 @@ ansi-regex@^5.0.0, ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^2.0.1, ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -10506,6 +10536,11 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + ansi-to-html@^0.6.11: version "0.6.13" resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.13.tgz#c72eae8b63e5ca0643aab11bfc6e6f2217425833" @@ -11918,6 +11953,24 @@ cacache@^16.1.0: tar "^6.1.11" unique-filename "^2.0.0" +cacache@^17.0.0: + version "17.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044" + integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -14527,6 +14580,11 @@ earcut@^2.2.4: resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -14733,7 +14791,7 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.0.0: +emoji-regex@^9.0.0, emoji-regex@^9.2.2: version "9.2.2" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== @@ -15612,11 +15670,6 @@ event-emitter@^0.3.5, event-emitter@~0.3.5: d "1" es5-ext "~0.10.14" -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - eventemitter-asyncresource@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz#734ff2e44bf448e627f7748f905d6bdd57bdb65b" @@ -15785,6 +15838,11 @@ expiry-js@0.1.7: resolved "https://registry.yarnpkg.com/expiry-js/-/expiry-js-0.1.7.tgz#76be8c05e572bf936df40c1766448d0b3b2f555f" integrity sha1-dr6MBeVyv5Nt9AwXZkSNCzsvVV8= +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + expose-loader@^0.7.5: version "0.7.5" resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-0.7.5.tgz#e29ea2d9aeeed3254a3faa1b35f502db9f9c3f6f" @@ -16361,6 +16419,14 @@ foreground-child@^2.0.0: cross-spawn "^7.0.0" signal-exit "^3.0.2" +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -16560,6 +16626,13 @@ fs-minipass@^2.0.0, fs-minipass@^2.1.0: dependencies: minipass "^3.0.0" +fs-minipass@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3" + integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g== + dependencies: + minipass "^5.0.0" + fs-mkdirp-stream@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz#1e82575c4023929ad35cf69269f84f1a8c973aa7" @@ -16899,6 +16972,17 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^10.2.2: + version "10.2.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.2.7.tgz#9dd2828cd5bc7bd861e7738d91e7113dda41d7d8" + integrity sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.0.3" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2" + path-scurry "^1.7.0" + glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0, glob@~7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -17688,7 +17772,7 @@ htmlparser2@^8.0.1: domutils "^3.0.1" entities "^4.4.0" -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== @@ -18061,7 +18145,7 @@ inquirer@^8.2.3: through "^2.3.6" wrap-ansi "^7.0.0" -install-artifact-from-github@^1.3.0: +install-artifact-from-github@^1.3.1: version "1.3.3" resolved "https://registry.yarnpkg.com/install-artifact-from-github/-/install-artifact-from-github-1.3.3.tgz#57d89bacfa0f47d7307fe41b6247cda9f9a8079c" integrity sha512-x79SL0d8WOi1ZjXSTUqqs0GPQZ92YArJAN9O46wgU9wdH2U9ecyyhB9YGDbPe2OLV4ptmt6AZYRQZ2GydQZosQ== @@ -18907,6 +18991,15 @@ its-name@1.0.0: resolved "https://registry.yarnpkg.com/its-name/-/its-name-1.0.0.tgz#2065f1883ecb568c65f7112ddbf123401fae4af0" integrity sha1-IGXxiD7LVoxl9xEt2/EjQB+uSvA= +jackspeak@^2.0.3: + version "2.2.1" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" + integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jake@^10.8.5: version "10.8.5" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" @@ -20589,6 +20682,11 @@ lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== +lru-cache@^9.1.1: + version "9.1.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.2.tgz#255fdbc14b75589d6d0e73644ca167a8db506835" + integrity sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ== + lru-queue@0.1: version "0.1.0" resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" @@ -20665,6 +20763,27 @@ make-fetch-happen@^10.0.4: socks-proxy-agent "^7.0.0" ssri "^9.0.0" +make-fetch-happen@^11.0.3: + version "11.1.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + make-fetch-happen@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" @@ -21288,6 +21407,13 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253" + integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -21336,6 +21462,17 @@ minipass-fetch@^2.0.3: optionalDependencies: encoding "^0.1.13" +minipass-fetch@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce" + integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ== + dependencies: + minipass "^5.0.0" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -21371,6 +21508,16 @@ minipass@^4.0.0: dependencies: yallist "^4.0.0" +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" + integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== + minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -21692,7 +21839,7 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.15.0, nan@^2.17.0: +nan@^2.16.0, nan@^2.17.0: version "2.17.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== @@ -21942,6 +22089,23 @@ node-gyp@^8.4.1: tar "^6.1.2" which "^2.0.2" +node-gyp@^9.0.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369" + integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^11.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -22043,6 +22207,13 @@ nopt@^5.0.0: dependencies: abbrev "1" +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -22926,6 +23097,14 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.7.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63" + integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg== + dependencies: + lru-cache "^9.1.1" + minipass "^5.0.0 || ^6.0.2" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -24192,14 +24371,14 @@ re-resizable@^6.9.9: resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.9.9.tgz#99e8b31c67a62115dc9c5394b7e55892265be216" integrity sha512-l+MBlKZffv/SicxDySKEEh42hR6m5bAHfNu3Tvxks2c4Ah+ldnWjfnVRwxo/nxF27SsUsxDS0raAzFuJNKABXA== -re2@1.17.4: - version "1.17.4" - resolved "https://registry.yarnpkg.com/re2/-/re2-1.17.4.tgz#7bf29290bdde963014e77bd2c2e799a6d788386e" - integrity sha512-xyZ4h5PqE8I9tAxTh3G0UttcK5ufrcUxReFjGzfX61vtanNbS1XZHjnwRSyPcLgChI4KLxVgOT/ioZXnUAdoTA== +re2@1.17.7: + version "1.17.7" + resolved "https://registry.yarnpkg.com/re2/-/re2-1.17.7.tgz#e14cab85a177a5534c7215c322d1b043c55aa1e9" + integrity sha512-X8GSuiBoVWwcjuppqSjsIkRxNUKDdjhkO9SBekQbZ2ksqWUReCy7DQPWOVpoTnpdtdz5PIpTTxTFzvJv5UMfjA== dependencies: - install-artifact-from-github "^1.3.0" - nan "^2.15.0" - node-gyp "^8.4.1" + install-artifact-from-github "^1.3.1" + nan "^2.16.0" + node-gyp "^9.0.0" react-ace@^7.0.5: version "7.0.5" @@ -26110,6 +26289,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" + integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== + simple-bin-help@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/simple-bin-help/-/simple-bin-help-1.8.0.tgz#21bb82c6bccd9fa8678f9c0fadf2956b54e2160a" @@ -26616,6 +26800,13 @@ sshpk@^1.14.1: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +ssri@^10.0.0: + version "10.0.4" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6" + integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ== + dependencies: + minipass "^5.0.0" + ssri@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" @@ -26848,6 +27039,15 @@ string-similarity@^4.0.1: resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-4.0.3.tgz#ef52d6fc59c8a0fc93b6307fbbc08cc6e18cde21" integrity sha512-QEwJzNFCqq+5AGImk5z4vbsEPTN/+gtyKfXBVLBcbPBRPNganZGfQnIuf9yJ+GiwSnD65sT8xrw/uwU1Q1WmfQ== +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -26857,15 +27057,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -26874,6 +27065,15 @@ string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + "string.prototype.matchall@^4.0.0 || ^3.0.1", string.prototype.matchall@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" @@ -26954,6 +27154,13 @@ stringify-entities@^3.0.0, stringify-entities@^3.0.1: is-decimal "^1.0.2" is-hexadecimal "^1.0.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -26975,12 +27182,12 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: - ansi-regex "^5.0.1" + ansi-regex "^6.0.1" strip-bom-string@1.X: version "1.0.0" @@ -28227,6 +28434,13 @@ unique-filename@^2.0.0: dependencies: unique-slug "^3.0.0" +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" @@ -28241,6 +28455,13 @@ unique-slug@^3.0.0: dependencies: imurmurhash "^0.1.4" +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" @@ -29679,6 +29900,15 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -29704,14 +29934,14 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" wrappy@1: version "1.0.2" From c9c61544c7f3172419afbd33233b77ad75ef0924 Mon Sep 17 00:00:00 2001 From: Alison Goryachev Date: Thu, 27 Jul 2023 08:28:32 -0400 Subject: [PATCH 32/58] [Index Management] Unskip nodes test (#162524) --- .../apis/management/index_lifecycle_management/nodes.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/test/api_integration/apis/management/index_lifecycle_management/nodes.js b/x-pack/test/api_integration/apis/management/index_lifecycle_management/nodes.js index d0603999c1b717..7514d079e5b414 100644 --- a/x-pack/test/api_integration/apis/management/index_lifecycle_management/nodes.js +++ b/x-pack/test/api_integration/apis/management/index_lifecycle_management/nodes.js @@ -17,8 +17,7 @@ export default function ({ getService }) { const { getNodesStats } = initElasticsearchHelpers(getService); const { loadNodes, getNodeDetails } = registerHelpers({ supertest }); - // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/141134 - describe.skip('nodes', function () { + describe('nodes', function () { // Cloud disallows setting custom node attributes, so we can't use `NODE_CUSTOM_ATTRIBUTE` // to retrieve the IDs we expect. this.tags(['skipCloud']); From 3136548545459a46aee3a37fc01d38a0da6270d3 Mon Sep 17 00:00:00 2001 From: Konrad Szwarc Date: Thu, 27 Jul 2023 15:14:18 +0200 Subject: [PATCH 33/58] [Defend Workflows] Alert should have Respond options available as long as agent.id has Endpoint installed (#162550) Before: If agent.type !== endpoint, we were disabling the Respond button in the Take Action dropdown on the Alert Detail page. However, an alert coming from, for example, filebeats, could be originating from an agent with Defend integration, which supports respond actions. After: I removed the check for agent.type, resulting in the API /endpoint/metadata/:id being called in all cases. If the API returns a 200 status code, we display the respond button since the endpoint supports the response console. If the API returns a 404 status code, we display a tooltip saying 'Please add Defend integration' and keep the button disabled.` Take Action button ![test](https://github.com/elastic/kibana/assets/29123534/52e8bcda-39d6-4b4f-8979-7f20f0db7751) Timelines ![test](https://github.com/elastic/kibana/assets/29123534/3223636c-58bc-4bb8-b74f-938447218a67) --- .../public/common/mock/test_providers.tsx | 8 +++- .../use_responder_action_data.ts | 12 +++--- .../use_responder_action_item.tsx | 11 +----- .../take_action_dropdown/index.test.tsx | 39 ++++++++++++++++--- 4 files changed, 50 insertions(+), 20 deletions(-) diff --git a/x-pack/plugins/security_solution/public/common/mock/test_providers.tsx b/x-pack/plugins/security_solution/public/common/mock/test_providers.tsx index 9672f2563dc5aa..6b662ea9e3cb8b 100644 --- a/x-pack/plugins/security_solution/public/common/mock/test_providers.tsx +++ b/x-pack/plugins/security_solution/public/common/mock/test_providers.tsx @@ -61,7 +61,13 @@ export const TestProvidersComponent: React.FC = ({ onDragEnd = jest.fn(), cellActions = [], }) => { - const queryClient = new QueryClient(); + const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + }, + }, + }); return ( diff --git a/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.ts b/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.ts index 1485e9434e8bfb..8a35bf420a5bac 100644 --- a/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.ts +++ b/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_data.ts @@ -29,6 +29,7 @@ export const useResponderActionData = ({ tooltip: ReactNode; } => { const showEndpointResponseActionsConsole = useWithShowEndpointResponder(); + const { data: endpointHostInfo, isFetching, @@ -36,15 +37,16 @@ export const useResponderActionData = ({ } = useGetEndpointDetails(endpointId, { enabled: Boolean(endpointId) }); const [isDisabled, tooltip]: [disabled: boolean, tooltip: ReactNode] = useMemo(() => { - if (!endpointId) { - return [true, NOT_FROM_ENDPOINT_HOST_TOOLTIP]; - } - // Still loading Endpoint host info if (isFetching) { return [true, LOADING_ENDPOINT_DATA_TOOLTIP]; } + // if we got an error, and it's a 404 it means the endpoint is not from the endpoint host + if (error && error.body?.statusCode === 404) { + return [true, NOT_FROM_ENDPOINT_HOST_TOOLTIP]; + } + // if we got an error and it's a 400 with unenrolled in the error message (alerts can exist for endpoint that are no longer around) // or, // the Host status is `unenrolled` @@ -61,7 +63,7 @@ export const useResponderActionData = ({ } return [false, undefined]; - }, [endpointHostInfo, endpointId, error, isFetching]); + }, [endpointHostInfo, error, isFetching]); const handleResponseActionsClick = useCallback(() => { if (endpointHostInfo) showEndpointResponseActionsConsole(endpointHostInfo.metadata); diff --git a/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_item.tsx b/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_item.tsx index 21a4bebcf4a370..737a862b128094 100644 --- a/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_item.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/endpoint_responder/use_responder_action_item.tsx @@ -9,10 +9,7 @@ import React, { useMemo } from 'react'; import type { TimelineEventsDetailsItem } from '@kbn/timelines-plugin/common'; import { FormattedMessage } from '@kbn/i18n-react'; import { useUserPrivileges } from '../../../common/components/user_privileges'; -import { - isAlertFromEndpointEvent, - isTimelineEventItemAnAlert, -} from '../../../common/utils/endpoint_alert_check'; +import { isTimelineEventItemAnAlert } from '../../../common/utils/endpoint_alert_check'; import { getFieldValue } from '../host_isolation/helpers'; import type { AlertTableContextMenuItem } from '../alerts_table/types'; import { useResponderActionData } from './use_responder_action_data'; @@ -28,17 +25,13 @@ export const useResponderActionItem = ( return isTimelineEventItemAnAlert(eventDetailsData || []); }, [eventDetailsData]); - const isEndpointAlert = useMemo(() => { - return isAlertFromEndpointEvent({ data: eventDetailsData || [] }); - }, [eventDetailsData]); - const endpointId = useMemo( () => getFieldValue({ category: 'agent', field: 'agent.id' }, eventDetailsData), [eventDetailsData] ); const { handleResponseActionsClick, isDisabled, tooltip } = useResponderActionData({ - endpointId: isEndpointAlert ? endpointId : '', + endpointId, onClick, }); diff --git a/x-pack/plugins/security_solution/public/detections/components/take_action_dropdown/index.test.tsx b/x-pack/plugins/security_solution/public/detections/components/take_action_dropdown/index.test.tsx index b841ae0723eaea..d342092dd3d9d0 100644 --- a/x-pack/plugins/security_solution/public/detections/components/take_action_dropdown/index.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/take_action_dropdown/index.test.tsx @@ -23,8 +23,9 @@ import { mockCasesContract } from '@kbn/cases-plugin/public/mocks'; import { initialUserPrivilegesState as mockInitialUserPrivilegesState } from '../../../common/components/user_privileges/user_privileges_context'; import { useUserPrivileges } from '../../../common/components/user_privileges'; import { - NOT_FROM_ENDPOINT_HOST_TOOLTIP, HOST_ENDPOINT_UNENROLLED_TOOLTIP, + LOADING_ENDPOINT_DATA_TOOLTIP, + NOT_FROM_ENDPOINT_HOST_TOOLTIP, } from '../endpoint_responder/translations'; import { endpointMetadataHttpMocks } from '../../../management/pages/endpoint_hosts/mocks'; import type { HttpSetup } from '@kbn/core/public'; @@ -477,17 +478,45 @@ describe('take action dropdown', () => { expect(findLaunchResponderButton()).toHaveLength(0); }); - it('should disable the button if alert NOT from a host running endpoint', async () => { + it('should enable button for non endpoint event type when defend integration present', async () => { setTypeOnEcsDataWithAgentType('filebeat'); if (defaultProps.detailsData) { defaultProps.detailsData = generateAlertDetailsDataMock() as TimelineEventsDetailsItem[]; } render(); - const consoleButton = findLaunchResponderButton().first(); + expect(findLaunchResponderButton().first().prop('disabled')).toBe(true); + expect(findLaunchResponderButton().first().prop('toolTipContent')).toEqual( + LOADING_ENDPOINT_DATA_TOOLTIP + ); + + await waitFor(() => { + expect(apiMocks.responseProvider.metadataDetails).toHaveBeenCalled(); + wrapper.update(); + + expect(findLaunchResponderButton().first().prop('disabled')).toBe(false); + expect(findLaunchResponderButton().first().prop('toolTipContent')).toEqual(undefined); + }); + }); + + it('should disable the button for non endpoint event type when defend integration not present', async () => { + setAlertDetailsDataMockToEndpointAgent(); + apiMocks.responseProvider.metadataDetails.mockImplementation(() => { + const error: Error & { body?: { statusCode: number } } = new Error(); + error.body = { statusCode: 404 }; + throw error; + }); + render(); + + await waitFor(() => { + expect(apiMocks.responseProvider.metadataDetails).toThrow(); + wrapper.update(); - expect(consoleButton.prop('disabled')).toBe(true); - expect(consoleButton.prop('toolTipContent')).toEqual(NOT_FROM_ENDPOINT_HOST_TOOLTIP); + expect(findLaunchResponderButton().first().prop('disabled')).toBe(true); + expect(findLaunchResponderButton().first().prop('toolTipContent')).toEqual( + NOT_FROM_ENDPOINT_HOST_TOOLTIP + ); + }); }); it('should disable the button if host status is unenrolled', async () => { From c39a40e8dc4db4406754fc645cc9679c2711b1a5 Mon Sep 17 00:00:00 2001 From: Elastic Machine Date: Thu, 27 Jul 2023 23:15:18 +1000 Subject: [PATCH 34/58] [main] Sync bundled packages with Package Storage (#162624) Automated by https://internal-ci.elastic.co/job/package_storage/job/sync-bundled-packages-job/job/main/5874/ Co-authored-by: apmmachine --- fleet_packages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fleet_packages.json b/fleet_packages.json index 65f6969fc20343..c94a6aecf1b410 100644 --- a/fleet_packages.json +++ b/fleet_packages.json @@ -54,7 +54,7 @@ }, { "name": "synthetics", - "version": "1.0.2" + "version": "1.0.3" }, { "name": "security_detection_engine", From a487ad77bdc9beb61fc453ec49f4b7f6b8a0ae98 Mon Sep 17 00:00:00 2001 From: Alex Szabo Date: Thu, 27 Jul 2023 16:05:01 +0200 Subject: [PATCH 35/58] [SharedUX] Merge similar toast messages in case of a toast-flood/storm (#161738) ## Summary This PR addresses the occasional toast-floods/toast-storms with a simple catch mechanism: deduplicate/group toasts by their broad alikeness, their text and title. This implementation plugs in to the `global_toast_list.tsx` in Kibana's GlobalToastList component, capturing updates on the toast update stream, and collapses toasts before passing them further to the downstream EUI Toast list react components. The core idea is to not display notifications directly, but to keep the toast notifications apart from their visual representation. This way, we can represent more notifications with one toast on our end, if we group rightly. The only issue then, is to clean up everything nicely when it's time. For this we're also exporting a mapping that shows which toast ID represents which grouped toasts. I also changed the type `ToastInputFields` to accept rendered react components as title/text - this will prevent attempts to unmount react components from elements that are not displayed, thus causing React warnings. The close-all button is an EUI feature, which we've started discussing [here](https://github.com/elastic/eui/issues/6945), probably not part of this PR. ## What toasts get merged? The exact merging strategy was not settled, and it's kind of a valve, where we trade off potential detail lost in toasts for the prevented noise in the toast floods. The current strategy is as folows: ``` * These toasts will be merged: * - where title and text are strings, and the same (1) * - where titles are the same, and texts are missing (2) * - where titles are the same, and the text's mount function is the same string (3) * - where titles are missing, but the texts are the same string (4) ``` The base merge case is `(1) & (2)`, after some discussion with @Dosant we decided to include (3) as a compromise, where we're still merging somewhat similar toasts, and extend the merging to `ToastsApi::addError` where all error toasts have a MountPoint as their text. We understand this might hide some details (e.g.: same titles, but very slightly different MountPoints as their text) but realistically this shouldn't really happen. The ultimate future improvement will be (as suggested in the comments by @jloleysens) a sort of identifier to the toast, based on which we can group without fear of losing information. But this will require more work on all the call-sites. Relates to: #161482 ![1ca12f39-75af-4d24-8906-9f27fad33c45](https://github.com/elastic/kibana/assets/4738868/b4578f2e-756d-40d0-9d24-fdffe8b9c724) ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios ### For maintainers - [x] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../deduplicate_toasts.test.tsx.snap | 15 ++ .../global_toast_list.test.tsx.snap | 112 ++++++++++++++ .../src/toasts/deduplicate_toasts.test.tsx | 126 ++++++++++++++++ .../src/toasts/deduplicate_toasts.tsx | 138 ++++++++++++++++++ .../src/toasts/global_toast_list.test.tsx | 80 +++++++++- .../src/toasts/global_toast_list.tsx | 25 +++- .../tsconfig.json | 1 + 7 files changed, 489 insertions(+), 8 deletions(-) create mode 100644 packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/deduplicate_toasts.test.tsx.snap create mode 100644 packages/core/notifications/core-notifications-browser-internal/src/toasts/deduplicate_toasts.test.tsx create mode 100644 packages/core/notifications/core-notifications-browser-internal/src/toasts/deduplicate_toasts.tsx diff --git a/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/deduplicate_toasts.test.tsx.snap b/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/deduplicate_toasts.test.tsx.snap new file mode 100644 index 00000000000000..b940ae7a6a1783 --- /dev/null +++ b/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/deduplicate_toasts.test.tsx.snap @@ -0,0 +1,15 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`TitleWithBadge component renders with string titles 1`] = ` + + Welcome! + + + 5 + + +`; diff --git a/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/global_toast_list.test.tsx.snap b/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/global_toast_list.test.tsx.snap index 558f0f19080e6b..d9dc9f6c7b13dd 100644 --- a/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/global_toast_list.test.tsx.snap +++ b/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/global_toast_list.test.tsx.snap @@ -1,5 +1,117 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`global_toast_list with duplicate elements renders the list with a single element 1`] = ` +, + "toastLifeTimeMs": 5000, + }, + ] + } +/> +`; + +exports[`global_toast_list with duplicate elements, using MountPoints renders the all separate elements element: euiToastList 1`] = ` +, + "toastLifeTimeMs": 5000, + }, + Object { + "id": "1", + "text": "You've got mail!", + "title": , + "toastLifeTimeMs": 5000, + }, + Object { + "id": "2", + "text": "You've got mail!", + "title": , + "toastLifeTimeMs": 5000, + }, + Object { + "id": "3", + "text": "You've got mail!", + "title": , + "toastLifeTimeMs": 5000, + }, + ] + } +/> +`; + +exports[`global_toast_list with duplicate elements, using MountPoints renders the all separate elements element: globalToastList 1`] = ` +, + "toastLifeTimeMs": 5000, + }, + Object { + "id": "1", + "text": "You've got mail!", + "title": , + "toastLifeTimeMs": 5000, + }, + Object { + "id": "2", + "text": "You've got mail!", + "title": , + "toastLifeTimeMs": 5000, + }, + Object { + "id": "3", + "text": "You've got mail!", + "title": , + "toastLifeTimeMs": 5000, + }, + ] + } +/> +`; + exports[`renders matching snapshot 1`] = ` () => {}; + +describe('deduplicate toasts', () => { + it('returns an empty list for an empty input', () => { + const toasts: Toast[] = []; + + const { toasts: deduplicatedToastList } = deduplicateToasts(toasts); + + expect(deduplicatedToastList).toHaveLength(0); + }); + + it(`doesn't affect singular notifications`, () => { + const toasts: Toast[] = [ + toast('A', 'B'), // single toast + toast('X', 'Y'), // single toast + ]; + + const { toasts: deduplicatedToastList } = deduplicateToasts(toasts); + + expect(deduplicatedToastList).toHaveLength(toasts.length); + verifyTextAndTitle(deduplicatedToastList[0], 'A', 'B'); + verifyTextAndTitle(deduplicatedToastList[1], 'X', 'Y'); + }); + + it(`doesn't group notifications with MountPoints for title`, () => { + const toasts: Toast[] = [ + toast('A', 'B'), + toast(fakeMountPoint, 'B'), + toast(fakeMountPoint, 'B'), + toast(fakeMountPoint, fakeMountPoint), + toast(fakeMountPoint, fakeMountPoint), + ]; + + const { toasts: deduplicatedToastList } = deduplicateToasts(toasts); + + expect(deduplicatedToastList).toHaveLength(toasts.length); + }); + + it('groups toasts based on title + text', () => { + const toasts: Toast[] = [ + toast('A', 'B'), // 2 of these + toast('X', 'Y'), // 3 of these + toast('A', 'B'), + toast('X', 'Y'), + toast('A', 'C'), // 1 of these + toast('X', 'Y'), + ]; + + const { toasts: deduplicatedToastList } = deduplicateToasts(toasts); + + expect(deduplicatedToastList).toHaveLength(3); + verifyTextAndTitle(deduplicatedToastList[0], 'A 2', 'B'); + verifyTextAndTitle(deduplicatedToastList[1], 'X 3', 'Y'); + verifyTextAndTitle(deduplicatedToastList[2], 'A', 'C'); + }); + + it('groups toasts based on title, when text is not available', () => { + const toasts: Toast[] = [ + toast('A', 'B'), // 2 of these + toast('A', fakeMountPoint), // 2 of these + toast('A', 'C'), // 1 of this + toast('A', 'B'), + toast('A', fakeMountPoint), + toast('A'), // but it doesn't group functions with missing texts + ]; + + const { toasts: deduplicatedToastList } = deduplicateToasts(toasts); + + expect(deduplicatedToastList).toHaveLength(4); + verifyTextAndTitle(deduplicatedToastList[0], 'A 2', 'B'); + verifyTextAndTitle(deduplicatedToastList[1], 'A 2', expect.any(Function)); + verifyTextAndTitle(deduplicatedToastList[2], 'A', 'C'); + verifyTextAndTitle(deduplicatedToastList[3], 'A', undefined); + }); +}); + +describe('TitleWithBadge component', () => { + it('renders with string titles', () => { + const title = 'Welcome!'; + + const titleComponent = ; + const shallowRender = shallow(titleComponent); + const fullRender = mount(titleComponent); + + expect(fullRender.text()).toBe('Welcome! 5'); + expect(shallowRender).toMatchSnapshot(); + }); +}); + +function verifyTextAndTitle( + { text, title }: ToastWithRichTitle, + expectedTitle?: string, + expectedText?: string +) { + expect(getNodeText(title)).toEqual(expectedTitle); + expect(text).toEqual(expectedText); +} + +function getNodeText(node: ReactNode) { + const rendered = render(node as ReactElement); + return rendered.text(); +} diff --git a/packages/core/notifications/core-notifications-browser-internal/src/toasts/deduplicate_toasts.tsx b/packages/core/notifications/core-notifications-browser-internal/src/toasts/deduplicate_toasts.tsx new file mode 100644 index 00000000000000..51a3a8989b7b81 --- /dev/null +++ b/packages/core/notifications/core-notifications-browser-internal/src/toasts/deduplicate_toasts.tsx @@ -0,0 +1,138 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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, { ReactNode } from 'react'; +import { css } from '@emotion/css'; + +import { EuiNotificationBadge } from '@elastic/eui'; +import { Toast } from '@kbn/core-notifications-browser'; +import { MountPoint } from '@kbn/core-mount-utils-browser'; + +/** + * We can introduce this type within this domain, to allow for react-managed titles + */ +export type ToastWithRichTitle = Omit & { + title?: MountPoint | ReactNode; +}; + +export interface DeduplicateResult { + toasts: ToastWithRichTitle[]; + idToToasts: Record; +} + +interface TitleWithBadgeProps { + title: string | undefined; + counter: number; +} + +/** + * Collects toast messages to groups based on the `getKeyOf` function, + * then represents every group of message with a single toast + * @param allToasts + * @return the deduplicated list of toasts, and a lookup to find toasts represented by their first toast's ID + */ +export function deduplicateToasts(allToasts: Toast[]): DeduplicateResult { + const toastGroups = groupByKey(allToasts); + + const distinctToasts: ToastWithRichTitle[] = []; + const idToToasts: Record = {}; + for (const toastGroup of Object.values(toastGroups)) { + const firstElement = toastGroup[0]; + idToToasts[firstElement.id] = toastGroup; + if (toastGroup.length === 1) { + distinctToasts.push(firstElement); + } else { + // Grouping will only happen for toasts whose titles are strings (or missing) + const title = firstElement.title as string | undefined; + distinctToasts.push({ + ...firstElement, + title: , + }); + } + } + + return { toasts: distinctToasts, idToToasts }; +} + +/** + * Derives a key from a toast object + * these keys decide what makes between different toasts, and which ones should be merged + * These toasts will be merged: + * - where title and text are strings, and the same + * - where titles are the same, and texts are missing + * - where titles are the same, and the text's mount function is the same string + * - where titles are missing, but the texts are the same string + * @param toast The toast whose key we're deriving + */ +function getKeyOf(toast: Toast): string { + if (isString(toast.title) && isString(toast.text)) { + return toast.title + ' ' + toast.text; + } else if (isString(toast.title) && !toast.text) { + return toast.title; + } else if (isString(toast.title) && typeof toast.text === 'function') { + return toast.title + ' ' + djb2Hash(toast.text.toString()); + } else if (isString(toast.text) && !toast.title) { + return toast.text; + } else { + // Either toast or text is a mount function, or both missing + return 'KEY_' + toast.id.toString(); + } +} + +function isString(a: string | any): a is string { + return typeof a === 'string'; +} + +// Based on: https://gist.github.com/eplawless/52813b1d8ad9af510d85 +function djb2Hash(str: string): number { + const len = str.length; + let hash = 5381; + + for (let i = 0; i < len; i++) { + // eslint-disable-next-line no-bitwise + hash = (hash * 33) ^ str.charCodeAt(i); + } + // eslint-disable-next-line no-bitwise + return hash >>> 0; +} + +function groupByKey(allToasts: Toast[]) { + const toastGroups: Record = {}; + for (const toast of allToasts) { + const key = getKeyOf(toast); + + if (!toastGroups[key]) { + toastGroups[key] = [toast]; + } else { + toastGroups[key].push(toast); + } + } + return toastGroups; +} + +const floatTopRight = css` + position: absolute; + top: -8px; + right: -8px; +`; + +/** + * A component that renders a title with a floating counter + * @param title {string} The title string + * @param counter {number} The count of notifications represented + */ +export function TitleWithBadge({ title, counter }: TitleWithBadgeProps) { + return ( + + {title}{' '} + + {counter} + + + ); +} diff --git a/packages/core/notifications/core-notifications-browser-internal/src/toasts/global_toast_list.test.tsx b/packages/core/notifications/core-notifications-browser-internal/src/toasts/global_toast_list.test.tsx index 77430aa951b116..3835dfd24e8995 100644 --- a/packages/core/notifications/core-notifications-browser-internal/src/toasts/global_toast_list.test.tsx +++ b/packages/core/notifications/core-notifications-browser-internal/src/toasts/global_toast_list.test.tsx @@ -7,14 +7,17 @@ */ import { EuiGlobalToastList } from '@elastic/eui'; +import { Toast } from '@kbn/core-notifications-browser/src/types'; import { shallow } from 'enzyme'; import React from 'react'; import { Observable, from, EMPTY } from 'rxjs'; import { GlobalToastList } from './global_toast_list'; +const mockDismissToast = jest.fn(); + function render(props: Partial = {}) { - return ; + return ; } it('renders matching snapshot', () => { @@ -52,3 +55,78 @@ it('passes latest value from toasts$ to ', () => { expect(el.find(EuiGlobalToastList).prop('toasts')).toEqual([{ id: '1' }, { id: '2' }]); }); + +describe('global_toast_list with duplicate elements', () => { + const dummyText = `You've got mail!`; + const dummyTitle = `AOL Notifications`; + const toast = (id: any): Toast => ({ + id: id.toString(), + text: dummyText, + title: dummyTitle, + toastLifeTimeMs: 5000, + }); + + const globalToastList = shallow( + render({ + toasts$: from([[toast(0), toast(1), toast(2), toast(3)]]) as any, + }) + ); + + const euiToastList = globalToastList.find(EuiGlobalToastList); + const toastsProp = euiToastList.prop('toasts'); + + it('renders the list with a single element', () => { + expect(toastsProp).toBeDefined(); + expect(toastsProp).toHaveLength(1); + expect(euiToastList).toMatchSnapshot(); + }); + + it('renders the single toast with the common text', () => { + const firstRenderedToast = toastsProp![0]; + expect(firstRenderedToast.text).toBe(dummyText); + }); + + it(`calls all toast's dismiss when closed`, () => { + const firstRenderedToast = toastsProp![0]; + const dismissToast = globalToastList.prop('dismissToast'); + dismissToast(firstRenderedToast); + + expect(mockDismissToast).toHaveBeenCalledTimes(4); + expect(mockDismissToast).toHaveBeenCalledWith('0'); + expect(mockDismissToast).toHaveBeenCalledWith('1'); + expect(mockDismissToast).toHaveBeenCalledWith('2'); + expect(mockDismissToast).toHaveBeenCalledWith('3'); + }); +}); + +describe('global_toast_list with duplicate elements, using MountPoints', () => { + const dummyText = `You've got mail!`; + const toast = (id: any): Toast => ({ + id: id.toString(), + text: dummyText, + title: (element) => { + const a = document.createElement('a'); + a.innerText = 'Click me!'; + a.href = 'https://elastic.co'; + element.appendChild(a); + return () => element.removeChild(a); + }, + toastLifeTimeMs: 5000, + }); + + const globalToastList = shallow( + render({ + toasts$: from([[toast(0), toast(1), toast(2), toast(3)]]) as any, + }) + ); + + const euiToastList = globalToastList.find(EuiGlobalToastList); + const toastsProp = euiToastList.prop('toasts'); + + it('renders the all separate elements element', () => { + expect(toastsProp).toBeDefined(); + expect(toastsProp).toHaveLength(4); + expect(euiToastList).toMatchSnapshot('euiToastList'); + expect(globalToastList).toMatchSnapshot('globalToastList'); + }); +}); diff --git a/packages/core/notifications/core-notifications-browser-internal/src/toasts/global_toast_list.tsx b/packages/core/notifications/core-notifications-browser-internal/src/toasts/global_toast_list.tsx index db700da12cf0a9..e0a5d631d3776e 100644 --- a/packages/core/notifications/core-notifications-browser-internal/src/toasts/global_toast_list.tsx +++ b/packages/core/notifications/core-notifications-browser-internal/src/toasts/global_toast_list.tsx @@ -13,6 +13,7 @@ import { i18n } from '@kbn/i18n'; import type { Toast } from '@kbn/core-notifications-browser'; import { MountWrapper } from '@kbn/core-mount-utils-browser-internal'; +import { deduplicateToasts, ToastWithRichTitle } from './deduplicate_toasts'; interface Props { toasts$: Observable; @@ -20,25 +21,28 @@ interface Props { } interface State { - toasts: Toast[]; + toasts: ToastWithRichTitle[]; + idToToasts: Record; } -const convertToEui = (toast: Toast): EuiToast => ({ +const convertToEui = (toast: ToastWithRichTitle): EuiToast => ({ ...toast, - title: typeof toast.title === 'function' ? : toast.title, - text: typeof toast.text === 'function' ? : toast.text, + title: toast.title instanceof Function ? : toast.title, + text: toast.text instanceof Function ? : toast.text, }); export class GlobalToastList extends React.Component { public state: State = { toasts: [], + idToToasts: {}, }; private subscription?: Subscription; public componentDidMount() { - this.subscription = this.props.toasts$.subscribe((toasts) => { - this.setState({ toasts }); + this.subscription = this.props.toasts$.subscribe((redundantToastList) => { + const { toasts, idToToasts } = deduplicateToasts(redundantToastList); + this.setState({ toasts, idToToasts }); }); } @@ -48,6 +52,13 @@ export class GlobalToastList extends React.Component { } } + private closeToastsRepresentedById(id: string) { + const representedToasts = this.state.idToToasts[id]; + if (representedToasts) { + representedToasts.forEach((toast) => this.props.dismissToast(toast.id)); + } + } + public render() { return ( { })} data-test-subj="globalToastList" toasts={this.state.toasts.map(convertToEui)} - dismissToast={({ id }) => this.props.dismissToast(id)} + dismissToast={({ id }) => this.closeToastsRepresentedById(id)} /** * This prop is overridden by the individual toasts that are added. * Use `Infinity` here so that it's obvious a timeout hasn't been diff --git a/packages/core/notifications/core-notifications-browser-internal/tsconfig.json b/packages/core/notifications/core-notifications-browser-internal/tsconfig.json index f2828768aa26b5..a2cdcd20e48893 100644 --- a/packages/core/notifications/core-notifications-browser-internal/tsconfig.json +++ b/packages/core/notifications/core-notifications-browser-internal/tsconfig.json @@ -28,6 +28,7 @@ "@kbn/test-jest-helpers", "@kbn/core-overlays-browser-mocks", "@kbn/core-theme-browser-mocks", + "@kbn/core-mount-utils-browser", ], "exclude": [ "target/**/*", From 33195fb7df966d52e7d6ebefb16c5d62f795cf82 Mon Sep 17 00:00:00 2001 From: Antonio Date: Thu, 27 Jul 2023 16:41:36 +0200 Subject: [PATCH 36/58] [Cases] Total number of user actions on a case. (#161848) Connected to https://github.com/elastic/kibana/issues/146945 ## Summary | Description | Limit | Done? | Documented? | ------------- | ---- | :---: | ---- | | Total number of user actions and comments combined on a case | 10000 | :white_check_mark: | No | ### Checklist Delete any items that are not applicable to this PR. - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios ### Release Notes Updating a case will now fail if the operation makes it reach more than 10000 user actions. --- .../plugins/cases/common/constants/index.ts | 1 + x-pack/plugins/cases/common/utils/index.ts | 1 + .../cases/common/utils/validators.test.ts | 38 +- .../plugins/cases/common/utils/validators.ts | 27 +- .../server/client/attachments/add.test.ts | 26 +- .../cases/server/client/attachments/add.ts | 3 + .../client/attachments/bulk_create.test.ts | 52 +- .../server/client/attachments/bulk_create.ts | 7 + .../cases/server/client/cases/update.test.ts | 112 +++ .../cases/server/client/cases/update.ts | 90 ++- x-pack/plugins/cases/server/services/mocks.ts | 2 + .../services/user_actions/index.test.ts | 288 +++++--- .../server/services/user_actions/index.ts | 50 ++ .../server/services/user_actions/mocks.ts | 676 ++++++++++++++++-- .../user_actions/operations/create.test.ts | 78 ++ .../user_actions/operations/create.ts | 33 +- .../server/services/user_actions/types.ts | 26 +- 17 files changed, 1287 insertions(+), 223 deletions(-) diff --git a/x-pack/plugins/cases/common/constants/index.ts b/x-pack/plugins/cases/common/constants/index.ts index 2b4e576dcf7f11..02a20b014aa8a2 100644 --- a/x-pack/plugins/cases/common/constants/index.ts +++ b/x-pack/plugins/cases/common/constants/index.ts @@ -127,6 +127,7 @@ export const MAX_DELETE_IDS_LENGTH = 100 as const; export const MAX_SUGGESTED_PROFILES = 10 as const; export const MAX_CASES_TO_UPDATE = 100 as const; export const MAX_BULK_CREATE_ATTACHMENTS = 100 as const; +export const MAX_USER_ACTIONS_PER_CASE = 10000 as const; export const MAX_PERSISTABLE_STATE_AND_EXTERNAL_REFERENCES = 100 as const; /** diff --git a/x-pack/plugins/cases/common/utils/index.ts b/x-pack/plugins/cases/common/utils/index.ts index b8be12831200e7..ef509fb8bfd867 100644 --- a/x-pack/plugins/cases/common/utils/index.ts +++ b/x-pack/plugins/cases/common/utils/index.ts @@ -7,3 +7,4 @@ export * from './connectors_api'; export * from './capabilities'; +export * from './validators'; diff --git a/x-pack/plugins/cases/common/utils/validators.test.ts b/x-pack/plugins/cases/common/utils/validators.test.ts index 9b0a20320118d2..1daf64f90c611f 100644 --- a/x-pack/plugins/cases/common/utils/validators.test.ts +++ b/x-pack/plugins/cases/common/utils/validators.test.ts @@ -5,8 +5,9 @@ * 2.0. */ -import { MAX_ASSIGNEES_PER_CASE } from '../constants'; -import { areTotalAssigneesInvalid } from './validators'; +import { createUserActionServiceMock } from '../../server/services/mocks'; +import { MAX_ASSIGNEES_PER_CASE, MAX_USER_ACTIONS_PER_CASE } from '../constants'; +import { areTotalAssigneesInvalid, validateMaxUserActions } from './validators'; describe('validators', () => { describe('areTotalAssigneesInvalid', () => { @@ -31,4 +32,37 @@ describe('validators', () => { expect(areTotalAssigneesInvalid(generateAssignees(MAX_ASSIGNEES_PER_CASE + 1))).toBe(true); }); }); + + describe('validateMaxUserActions', () => { + const caseId = 'test-case'; + const userActionService = createUserActionServiceMock(); + + userActionService.getMultipleCasesUserActionsTotal.mockResolvedValue({ + [caseId]: MAX_USER_ACTIONS_PER_CASE - 1, + }); + + it('does not throw if the limit is not reached', async () => { + await expect( + validateMaxUserActions({ caseId, userActionService, userActionsToAdd: 1 }) + ).resolves.not.toThrow(); + }); + + it('throws if the max user actions per case limit is reached', async () => { + await expect( + validateMaxUserActions({ caseId, userActionService, userActionsToAdd: 2 }) + ).rejects.toThrow( + `The case with id ${caseId} has reached the limit of ${MAX_USER_ACTIONS_PER_CASE} user actions.` + ); + }); + + it('the caseId does not exist in the response', async () => { + userActionService.getMultipleCasesUserActionsTotal.mockResolvedValue({ + foobar: MAX_USER_ACTIONS_PER_CASE - 1, + }); + + await expect( + validateMaxUserActions({ caseId, userActionService, userActionsToAdd: 1 }) + ).resolves.not.toThrow(); + }); + }); }); diff --git a/x-pack/plugins/cases/common/utils/validators.ts b/x-pack/plugins/cases/common/utils/validators.ts index 9311c3a9a8bae7..cd85401d7a6bd9 100644 --- a/x-pack/plugins/cases/common/utils/validators.ts +++ b/x-pack/plugins/cases/common/utils/validators.ts @@ -5,7 +5,10 @@ * 2.0. */ -import { MAX_ASSIGNEES_PER_CASE } from '../constants'; +import Boom from '@hapi/boom'; + +import type { CaseUserActionService } from '../../server/services'; +import { MAX_ASSIGNEES_PER_CASE, MAX_USER_ACTIONS_PER_CASE } from '../constants'; import type { CaseAssignees } from '../types/domain'; export const areTotalAssigneesInvalid = (assignees?: CaseAssignees): boolean => { @@ -15,3 +18,25 @@ export const areTotalAssigneesInvalid = (assignees?: CaseAssignees): boolean => return assignees.length > MAX_ASSIGNEES_PER_CASE; }; + +export const validateMaxUserActions = async ({ + caseId, + userActionService, + userActionsToAdd, +}: { + caseId: string; + userActionService: CaseUserActionService; + userActionsToAdd: number; +}) => { + const result = await userActionService.getMultipleCasesUserActionsTotal({ + caseIds: [caseId], + }); + + const totalUserActions = result[caseId] ?? 0; + + if (totalUserActions + userActionsToAdd > MAX_USER_ACTIONS_PER_CASE) { + throw Boom.badRequest( + `The case with id ${caseId} has reached the limit of ${MAX_USER_ACTIONS_PER_CASE} user actions.` + ); + } +}; diff --git a/x-pack/plugins/cases/server/client/attachments/add.test.ts b/x-pack/plugins/cases/server/client/attachments/add.test.ts index b78ec1219088bb..ff610cba6cd2b9 100644 --- a/x-pack/plugins/cases/server/client/attachments/add.test.ts +++ b/x-pack/plugins/cases/server/client/attachments/add.test.ts @@ -5,13 +5,19 @@ * 2.0. */ +import { MAX_COMMENT_LENGTH, MAX_USER_ACTIONS_PER_CASE } from '../../../common/constants'; import { comment } from '../../mocks'; +import { createUserActionServiceMock } from '../../services/mocks'; import { createCasesClientMockArgs } from '../mocks'; -import { MAX_COMMENT_LENGTH } from '../../../common/constants'; import { addComment } from './add'; describe('addComment', () => { + const caseId = 'test-case'; + const clientArgs = createCasesClientMockArgs(); + const userActionService = createUserActionServiceMock(); + + clientArgs.services.userActionService = userActionService; beforeEach(() => { jest.clearAllMocks(); @@ -20,7 +26,7 @@ describe('addComment', () => { it('throws with excess fields', async () => { await expect( // @ts-expect-error: excess attribute - addComment({ comment: { ...comment, foo: 'bar' }, caseId: 'test-case' }, clientArgs) + addComment({ comment: { ...comment, foo: 'bar' }, caseId }, clientArgs) ).rejects.toThrow('invalid keys "foo"'); }); @@ -28,7 +34,7 @@ describe('addComment', () => { const longComment = 'x'.repeat(MAX_COMMENT_LENGTH + 1); await expect( - addComment({ comment: { ...comment, comment: longComment }, caseId: 'test-case' }, clientArgs) + addComment({ comment: { ...comment, comment: longComment }, caseId }, clientArgs) ).rejects.toThrow( `Failed while adding a comment to case id: test-case error: Error: The length of the comment is too long. The maximum length is ${MAX_COMMENT_LENGTH}.` ); @@ -36,7 +42,7 @@ describe('addComment', () => { it('should throw an error if the comment is an empty string', async () => { await expect( - addComment({ comment: { ...comment, comment: '' }, caseId: 'test-case' }, clientArgs) + addComment({ comment: { ...comment, comment: '' }, caseId }, clientArgs) ).rejects.toThrow( 'Failed while adding a comment to case id: test-case error: Error: The comment field cannot be an empty string.' ); @@ -44,9 +50,19 @@ describe('addComment', () => { it('should throw an error if the description is a string with empty characters', async () => { await expect( - addComment({ comment: { ...comment, comment: ' ' }, caseId: 'test-case' }, clientArgs) + addComment({ comment: { ...comment, comment: ' ' }, caseId }, clientArgs) ).rejects.toThrow( 'Failed while adding a comment to case id: test-case error: Error: The comment field cannot be an empty string.' ); }); + + it(`throws error when the case user actions become > ${MAX_USER_ACTIONS_PER_CASE}`, async () => { + userActionService.getMultipleCasesUserActionsTotal.mockResolvedValue({ + [caseId]: MAX_USER_ACTIONS_PER_CASE, + }); + + await expect(addComment({ comment, caseId }, clientArgs)).rejects.toThrow( + `The case with id ${caseId} has reached the limit of ${MAX_USER_ACTIONS_PER_CASE} user actions.` + ); + }); }); diff --git a/x-pack/plugins/cases/server/client/attachments/add.ts b/x-pack/plugins/cases/server/client/attachments/add.ts index 987b87bdcf52c4..5eba3d4b81f02b 100644 --- a/x-pack/plugins/cases/server/client/attachments/add.ts +++ b/x-pack/plugins/cases/server/client/attachments/add.ts @@ -7,6 +7,7 @@ import { SavedObjectsUtils } from '@kbn/core/server'; +import { validateMaxUserActions } from '../../../common/utils'; import { AttachmentRequestRt } from '../../../common/types/api'; import type { Case } from '../../../common/types/domain'; import { decodeWithExcessOrThrow } from '../../../common/api'; @@ -31,11 +32,13 @@ export const addComment = async (addArgs: AddArgs, clientArgs: CasesClientArgs): authorization, persistableStateAttachmentTypeRegistry, externalReferenceAttachmentTypeRegistry, + services: { userActionService }, } = clientArgs; try { const query = decodeWithExcessOrThrow(AttachmentRequestRt)(comment); + await validateMaxUserActions({ caseId, userActionService, userActionsToAdd: 1 }); decodeCommentRequest(comment, externalReferenceAttachmentTypeRegistry); const savedObjectID = SavedObjectsUtils.generateId(); diff --git a/x-pack/plugins/cases/server/client/attachments/bulk_create.test.ts b/x-pack/plugins/cases/server/client/attachments/bulk_create.test.ts index 5d72eb17277b02..bd65dcd3896f14 100644 --- a/x-pack/plugins/cases/server/client/attachments/bulk_create.test.ts +++ b/x-pack/plugins/cases/server/client/attachments/bulk_create.test.ts @@ -7,11 +7,21 @@ import { comment, actionComment } from '../../mocks'; import { createCasesClientMockArgs } from '../mocks'; -import { MAX_COMMENT_LENGTH, MAX_BULK_CREATE_ATTACHMENTS } from '../../../common/constants'; +import { + MAX_COMMENT_LENGTH, + MAX_BULK_CREATE_ATTACHMENTS, + MAX_USER_ACTIONS_PER_CASE, +} from '../../../common/constants'; import { bulkCreate } from './bulk_create'; +import { createUserActionServiceMock } from '../../services/mocks'; describe('bulkCreate', () => { + const caseId = 'test-case'; + const clientArgs = createCasesClientMockArgs(); + const userActionService = createUserActionServiceMock(); + + clientArgs.services.userActionService = userActionService; beforeEach(() => { jest.clearAllMocks(); @@ -20,18 +30,30 @@ describe('bulkCreate', () => { it('throws with excess fields', async () => { await expect( // @ts-expect-error: excess attribute - bulkCreate({ attachments: [{ ...comment, foo: 'bar' }], caseId: 'test-case' }, clientArgs) + bulkCreate({ attachments: [{ ...comment, foo: 'bar' }], caseId }, clientArgs) ).rejects.toThrow('invalid keys "foo"'); }); it(`throws error when attachments are more than ${MAX_BULK_CREATE_ATTACHMENTS}`, async () => { const attachments = Array(MAX_BULK_CREATE_ATTACHMENTS + 1).fill(comment); - await expect(bulkCreate({ attachments, caseId: 'test-case' }, clientArgs)).rejects.toThrow( + await expect(bulkCreate({ attachments, caseId }, clientArgs)).rejects.toThrow( `The length of the field attachments is too long. Array must be of length <= ${MAX_BULK_CREATE_ATTACHMENTS}.` ); }); + it(`throws error when the case user actions become > ${MAX_USER_ACTIONS_PER_CASE}`, async () => { + userActionService.getMultipleCasesUserActionsTotal.mockResolvedValue({ + [caseId]: MAX_USER_ACTIONS_PER_CASE - 1, + }); + + await expect( + bulkCreate({ attachments: [comment, comment], caseId }, clientArgs) + ).rejects.toThrow( + `The case with id ${caseId} has reached the limit of ${MAX_USER_ACTIONS_PER_CASE} user actions.` + ); + }); + describe('comments', () => { it('should throw an error if the comment length is too long', async () => { const longComment = Array(MAX_COMMENT_LENGTH + 1) @@ -39,10 +61,7 @@ describe('bulkCreate', () => { .toString(); await expect( - bulkCreate( - { attachments: [{ ...comment, comment: longComment }], caseId: 'test-case' }, - clientArgs - ) + bulkCreate({ attachments: [{ ...comment, comment: longComment }], caseId }, clientArgs) ).rejects.toThrow( `Failed while bulk creating attachment to case id: test-case error: Error: The length of the comment is too long. The maximum length is ${MAX_COMMENT_LENGTH}.` ); @@ -50,7 +69,7 @@ describe('bulkCreate', () => { it('should throw an error if the comment is an empty string', async () => { await expect( - bulkCreate({ attachments: [{ ...comment, comment: '' }], caseId: 'test-case' }, clientArgs) + bulkCreate({ attachments: [{ ...comment, comment: '' }], caseId }, clientArgs) ).rejects.toThrow( 'Failed while bulk creating attachment to case id: test-case error: Error: The comment field cannot be an empty string.' ); @@ -58,10 +77,7 @@ describe('bulkCreate', () => { it('should throw an error if the description is a string with empty characters', async () => { await expect( - bulkCreate( - { attachments: [{ ...comment, comment: ' ' }], caseId: 'test-case' }, - clientArgs - ) + bulkCreate({ attachments: [{ ...comment, comment: ' ' }], caseId }, clientArgs) ).rejects.toThrow( 'Failed while bulk creating attachment to case id: test-case error: Error: The comment field cannot be an empty string.' ); @@ -76,7 +92,7 @@ describe('bulkCreate', () => { await expect( bulkCreate( - { attachments: [{ ...actionComment, comment: longComment }], caseId: 'test-case' }, + { attachments: [{ ...actionComment, comment: longComment }], caseId }, clientArgs ) ).rejects.toThrow( @@ -86,10 +102,7 @@ describe('bulkCreate', () => { it('should throw an error if the comment is an empty string', async () => { await expect( - bulkCreate( - { attachments: [{ ...actionComment, comment: '' }], caseId: 'test-case' }, - clientArgs - ) + bulkCreate({ attachments: [{ ...actionComment, comment: '' }], caseId }, clientArgs) ).rejects.toThrow( 'Failed while bulk creating attachment to case id: test-case error: Error: The comment field cannot be an empty string.' ); @@ -97,10 +110,7 @@ describe('bulkCreate', () => { it('should throw an error if the description is a string with empty characters', async () => { await expect( - bulkCreate( - { attachments: [{ ...actionComment, comment: ' ' }], caseId: 'test-case' }, - clientArgs - ) + bulkCreate({ attachments: [{ ...actionComment, comment: ' ' }], caseId }, clientArgs) ).rejects.toThrow( 'Failed while bulk creating attachment to case id: test-case error: Error: The comment field cannot be an empty string.' ); diff --git a/x-pack/plugins/cases/server/client/attachments/bulk_create.ts b/x-pack/plugins/cases/server/client/attachments/bulk_create.ts index 693336ffd31f7e..8e265ab9c88d54 100644 --- a/x-pack/plugins/cases/server/client/attachments/bulk_create.ts +++ b/x-pack/plugins/cases/server/client/attachments/bulk_create.ts @@ -7,6 +7,7 @@ import { SavedObjectsUtils } from '@kbn/core/server'; +import { validateMaxUserActions } from '../../../common/utils'; import type { AttachmentRequest } from '../../../common/types/api'; import { BulkCreateAttachmentsRequestRt } from '../../../common/types/api'; import type { Case } from '../../../common/types/domain'; @@ -33,10 +34,16 @@ export const bulkCreate = async ( authorization, externalReferenceAttachmentTypeRegistry, persistableStateAttachmentTypeRegistry, + services: { userActionService }, } = clientArgs; try { decodeWithExcessOrThrow(BulkCreateAttachmentsRequestRt)(attachments); + await validateMaxUserActions({ + caseId, + userActionService, + userActionsToAdd: attachments.length, + }); attachments.forEach((attachment) => { decodeCommentRequest(attachment, externalReferenceAttachmentTypeRegistry); diff --git a/x-pack/plugins/cases/server/client/cases/update.test.ts b/x-pack/plugins/cases/server/client/cases/update.test.ts index 5a6d81f0209288..039f4e85828044 100644 --- a/x-pack/plugins/cases/server/client/cases/update.test.ts +++ b/x-pack/plugins/cases/server/client/cases/update.test.ts @@ -12,6 +12,7 @@ import { MAX_LENGTH_PER_TAG, MAX_TITLE_LENGTH, MAX_CASES_TO_UPDATE, + MAX_USER_ACTIONS_PER_CASE, } from '../../../common/constants'; import { mockCases } from '../../mocks'; import { createCasesClientMockArgs } from '../mocks'; @@ -737,5 +738,116 @@ describe('update', () => { 'Error: The length of the field cases is too short. Array must be of length >= 1.' ); }); + + describe('Validate max user actions per page', () => { + const casesClient = createCasesClientMockArgs(); + + beforeEach(() => { + jest.clearAllMocks(); + casesClient.services.caseService.getCases.mockResolvedValue({ + saved_objects: [{ ...mockCases[0] }, { ...mockCases[1] }], + }); + casesClient.services.caseService.getAllCaseComments.mockResolvedValue({ + saved_objects: [], + total: 0, + per_page: 10, + page: 1, + }); + }); + + it('passes validation if max user actions per case is not reached', async () => { + casesClient.services.userActionService.getMultipleCasesUserActionsTotal.mockResolvedValue({ + [mockCases[0].id]: MAX_USER_ACTIONS_PER_CASE - 1, + }); + + // @ts-ignore: only the array length matters here + casesClient.services.userActionService.creator.buildUserActions.mockReturnValue({ + [mockCases[0].id]: [1], + }); + + casesClient.services.caseService.patchCases.mockResolvedValue({ + saved_objects: [{ ...mockCases[0] }], + }); + + await expect( + update( + { + cases: [ + { + id: mockCases[0].id, + version: mockCases[0].version ?? '', + title: 'This is a test case!!', + }, + ], + }, + casesClient + ) + ).resolves.not.toThrow(); + }); + + it(`throws an error when the user actions to be created will reach ${MAX_USER_ACTIONS_PER_CASE}`, async () => { + casesClient.services.userActionService.getMultipleCasesUserActionsTotal.mockResolvedValue({ + [mockCases[0].id]: MAX_USER_ACTIONS_PER_CASE, + }); + + // @ts-ignore: only the array length matters here + casesClient.services.userActionService.creator.buildUserActions.mockReturnValue({ + [mockCases[0].id]: [1, 2, 3], + }); + + await expect( + update( + { + cases: [ + { + id: mockCases[0].id, + version: mockCases[0].version ?? '', + title: 'This is a test case!!', + }, + ], + }, + casesClient + ) + ).rejects.toThrow( + `Error: The case with case id ${mockCases[0].id} has reached the limit of ${MAX_USER_ACTIONS_PER_CASE} user actions.` + ); + }); + + it('throws an error when trying to update multiple cases and one of them is expected to fail', async () => { + casesClient.services.userActionService.getMultipleCasesUserActionsTotal.mockResolvedValue({ + [mockCases[0].id]: MAX_USER_ACTIONS_PER_CASE, + [mockCases[1].id]: 0, + }); + + // @ts-ignore: only the array length matters here + casesClient.services.userActionService.creator.buildUserActions.mockReturnValue({ + [mockCases[0].id]: [1, 2, 3], + [mockCases[1].id]: [1], + }); + + await expect( + update( + { + cases: [ + { + id: mockCases[0].id, + version: mockCases[0].version ?? '', + title: 'This is supposed to fail', + }, + + { + id: mockCases[1].id, + version: mockCases[1].version ?? '', + title: 'This is supposed to pass', + }, + ], + }, + casesClient + ) + ).rejects.toThrow( + `Error: The case with case id ${mockCases[0].id} has reached the limit of ${MAX_USER_ACTIONS_PER_CASE} user actions.` + ); + }); + }); }); }); diff --git a/x-pack/plugins/cases/server/client/cases/update.ts b/x-pack/plugins/cases/server/client/cases/update.ts index c7b2e124dbf76f..1844b12b3ab07e 100644 --- a/x-pack/plugins/cases/server/client/cases/update.ts +++ b/x-pack/plugins/cases/server/client/cases/update.ts @@ -17,28 +17,29 @@ import type { import { nodeBuilder } from '@kbn/es-query'; +import type { AlertService, CasesService, CaseUserActionService } from '../../services'; +import type { UpdateAlertStatusRequest } from '../alerts/types'; +import type { CasesClientArgs } from '..'; +import type { OwnerEntity } from '../../authorization'; +import type { PatchCasesArgs } from '../../services/cases/types'; +import type { UserActionEvent, UserActionsDict } from '../../services/user_actions/types'; + import type { CasePatchRequest, CasesPatchRequest } from '../../../common/types/api'; import { areTotalAssigneesInvalid } from '../../../common/utils/validators'; -import { decodeWithExcessOrThrow } from '../../../common/api'; import { CASE_COMMENT_SAVED_OBJECT, CASE_SAVED_OBJECT, MAX_ASSIGNEES_PER_CASE, + MAX_USER_ACTIONS_PER_CASE, } from '../../../common/constants'; - -import { arraysDifference, getCaseToUpdate } from '../utils'; - -import type { AlertService, CasesService } from '../../services'; +import { Operations } from '../../authorization'; import { createCaseError } from '../../common/error'; import { createAlertUpdateStatusRequest, flattenCaseSavedObject, isCommentRequestTypeAlert, } from '../../common/utils'; -import type { UpdateAlertStatusRequest } from '../alerts/types'; -import type { CasesClientArgs } from '..'; -import type { OwnerEntity } from '../../authorization'; -import { Operations } from '../../authorization'; +import { arraysDifference, getCaseToUpdate } from '../utils'; import { dedupAssignees, getClosedInfoForUpdate, getDurationForUpdate } from './utils'; import { LICENSING_CASE_ASSIGNMENT_FEATURE } from '../../common/constants'; import type { LicensingService } from '../../services/licensing'; @@ -53,6 +54,7 @@ import type { AttachmentAttributes, } from '../../../common/types/domain'; import { CasesPatchRequestRt } from '../../../common/types/api'; +import { decodeWithExcessOrThrow } from '../../../common/api'; import { CasesRt, CaseStatuses, AttachmentType } from '../../../common/types/domain'; /** @@ -67,6 +69,36 @@ function throwIfUpdateOwner(requests: UpdateRequestWithOriginalCase[]) { } } +/** + * Throws an error if any of the requests attempt to create a number of user actions that would put + * it's case over the limit. + */ +async function throwIfMaxUserActionsReached({ + userActionsDict, + userActionService, +}: { + userActionsDict: UserActionsDict; + userActionService: CaseUserActionService; +}) { + if (userActionsDict == null) { + return; + } + + const currentTotals = await userActionService.getMultipleCasesUserActionsTotal({ + caseIds: Object.keys(userActionsDict), + }); + + Object.keys(currentTotals).forEach((caseId) => { + const totalToAdd = userActionsDict?.[caseId]?.length ?? 0; + + if (currentTotals[caseId] + totalToAdd > MAX_USER_ACTIONS_PER_CASE) { + throw Boom.badRequest( + `The case with case id ${caseId} has reached the limit of ${MAX_USER_ACTIONS_PER_CASE} user actions.` + ); + } + }); +} + /** * Throws an error if any of the requests attempt to update the assignees of the case * without the appropriate license @@ -364,9 +396,16 @@ export const update = async ( throwIfUpdateAssigneesWithoutValidLicense(casesToUpdate, hasPlatinumLicense); throwIfTotalAssigneesAreInvalid(casesToUpdate); + const patchCasesPayload = createPatchCasesPayload({ user, casesToUpdate }); + const userActionsDict = userActionService.creator.buildUserActions({ + updatedCases: patchCasesPayload, + user, + }); + + await throwIfMaxUserActionsReached({ userActionsDict, userActionService }); notifyPlatinumUsage(licensingService, casesToUpdate); - const updatedCases = await patchCases({ caseService, user, casesToUpdate }); + const updatedCases = await patchCases({ caseService, patchCasesPayload }); // If a status update occurred and the case is synced then we need to update all alerts' status // attached to the case to the new status. @@ -413,10 +452,15 @@ export const update = async ( return flattenCases; }, [] as Case[]); + const builtUserActions = + userActionsDict != null + ? Object.keys(userActionsDict).reduce((acc, key) => { + return [...acc, ...userActionsDict[key]]; + }, []) + : []; + await userActionService.creator.bulkCreateUpdateCase({ - originalCases: myCases.saved_objects, - updatedCases: updatedCases.saved_objects, - user, + builtUserActions, }); const casesAndAssigneesToNotifyForAssignment = getCasesAndAssigneesToNotifyForAssignment( @@ -442,18 +486,16 @@ export const update = async ( } }; -const patchCases = async ({ - caseService, +const createPatchCasesPayload = ({ casesToUpdate, user, }: { - caseService: CasesService; casesToUpdate: UpdateRequestWithOriginalCase[]; user: User; -}) => { +}): PatchCasesArgs => { const updatedDt = new Date().toISOString(); - const updatedCases = await caseService.patchCases({ + return { cases: casesToUpdate.map(({ updateReq, originalCase }) => { // intentionally removing owner from the case so that we don't accidentally allow it to be updated const { id: caseId, version, owner, assignees, ...updateCaseAttributes } = updateReq; @@ -483,9 +525,17 @@ const patchCases = async ({ }; }), refresh: false, - }); + }; +}; - return updatedCases; +const patchCases = async ({ + caseService, + patchCasesPayload, +}: { + caseService: CasesService; + patchCasesPayload: PatchCasesArgs; +}) => { + return caseService.patchCases(patchCasesPayload); }; const getCasesAndAssigneesToNotifyForAssignment = ( diff --git a/x-pack/plugins/cases/server/services/mocks.ts b/x-pack/plugins/cases/server/services/mocks.ts index b43a3c226b1e48..7a9507be8b080c 100644 --- a/x-pack/plugins/cases/server/services/mocks.ts +++ b/x-pack/plugins/cases/server/services/mocks.ts @@ -97,6 +97,7 @@ const createUserActionPersisterServiceMock = (): CaseUserActionPersisterServiceM const service: PublicMethodsOf = { bulkAuditLogCaseDeletion: jest.fn(), bulkCreateUpdateCase: jest.fn(), + buildUserActions: jest.fn(), bulkCreateAttachmentDeletion: jest.fn(), bulkCreateAttachmentCreation: jest.fn(), createUserAction: jest.fn(), @@ -126,6 +127,7 @@ export const createUserActionServiceMock = (): CaseUserActionServiceMock => { getAll: jest.fn(), getUniqueConnectors: jest.fn(), getUserActionIdsForCases: jest.fn(), + getMultipleCasesUserActionsTotal: jest.fn(), getCaseUserActionStats: jest.fn(), getUsers: jest.fn(), }; diff --git a/x-pack/plugins/cases/server/services/user_actions/index.test.ts b/x-pack/plugins/cases/server/services/user_actions/index.test.ts index b59172b6999b89..b09b8aba8d1141 100644 --- a/x-pack/plugins/cases/server/services/user_actions/index.test.ts +++ b/x-pack/plugins/cases/server/services/user_actions/index.test.ts @@ -12,27 +12,27 @@ import type { SavedObject, SavedObjectsBulkCreateObject, SavedObjectsFindResponse, - SavedObjectsUpdateResponse, } from '@kbn/core/server'; import { auditLoggerMock } from '@kbn/security-plugin/server/audit/mocks'; -import { - CaseSeverity, - CaseStatuses, - UserActionActions, - UserActionTypes, -} from '../../../common/types/domain'; -import { SECURITY_SOLUTION_OWNER } from '../../../common/constants'; +import type { CaseUserActionWithoutReferenceIds } from '../../../common/types/domain'; +import type { UserActionEvent } from './types'; -import { createCaseSavedObjectResponse, createSOFindResponse } from '../test_utils'; +import { SECURITY_SOLUTION_OWNER } from '../../../common/constants'; +import { createSOFindResponse } from '../test_utils'; import { casePayload, externalService, - originalCases, - updatedCases, attachments, - updatedAssigneesCases, - originalCasesWithAssignee, - updatedTagsCases, + patchRemoveAssigneesCasesRequest, + patchCasesRequest, + patchAssigneesCasesRequest, + patchAddRemoveAssigneesCasesRequest, + patchTagsCasesRequest, + getBuiltUserActions, + getAssigneesAddedUserActions, + getAssigneesRemovedUserActions, + getAssigneesAddedRemovedUserActions, + getTagsAddedRemovedUserActions, } from './mocks'; import { CaseUserActionService } from '.'; import { createPersistableStateAttachmentTypeRegistryMock } from '../../attachment_framework/mocks'; @@ -44,9 +44,11 @@ import { pushConnectorUserAction, } from './test_utils'; import { comment } from '../../mocks'; -import type { - CaseUserActionWithoutReferenceIds, - CaseAttributes, +import { + UserActionActions, + UserActionTypes, + CaseSeverity, + CaseStatuses, } from '../../../common/types/domain'; describe('CaseUserActionService', () => { @@ -506,13 +508,73 @@ describe('CaseUserActionService', () => { }); }); + describe('buildUserActions', () => { + it('creates the correct user actions when bulk updating cases', async () => { + expect( + await service.creator.buildUserActions({ + updatedCases: patchCasesRequest, + user: commonArgs.user, + }) + ).toEqual(getBuiltUserActions({ isMock: false })); + }); + + it('creates the correct user actions when an assignee is added', async () => { + expect( + await service.creator.buildUserActions({ + updatedCases: patchAssigneesCasesRequest, + user: commonArgs.user, + }) + ).toEqual(getAssigneesAddedUserActions({ isMock: false })); + }); + + it('creates the correct user actions when an assignee is removed', async () => { + expect( + await service.creator.buildUserActions({ + updatedCases: patchRemoveAssigneesCasesRequest, + user: commonArgs.user, + }) + ).toEqual(getAssigneesRemovedUserActions({ isMock: false })); + }); + + it('creates the correct user actions when assignees are added and removed', async () => { + expect( + await service.creator.buildUserActions({ + updatedCases: patchAddRemoveAssigneesCasesRequest, + user: commonArgs.user, + }) + ).toEqual( + getAssigneesAddedRemovedUserActions({ + isMock: false, + }) + ); + }); + + it('creates the correct user actions when tags are added and removed', async () => { + expect( + await service.creator.buildUserActions({ + updatedCases: patchTagsCasesRequest, + user: commonArgs.user, + }) + ).toEqual( + getTagsAddedRemovedUserActions({ + isMock: false, + }) + ); + }); + }); + describe('bulkCreateUpdateCase', () => { + const mockBuiltUserActions = getBuiltUserActions({ isMock: true }); + const builtUserActions = Object.keys(mockBuiltUserActions).reduce( + (acc, key) => { + return [...acc, ...mockBuiltUserActions[key]]; + }, + [] + ); + it('creates the correct user actions when bulk updating cases', async () => { await service.creator.bulkCreateUpdateCase({ - ...commonArgs, - originalCases, - updatedCases, - user: commonArgs.user, + builtUserActions, }); expect(unsecuredSavedObjectsClient.bulkCreate).toHaveBeenCalledWith( @@ -582,6 +644,22 @@ describe('CaseUserActionService', () => { ], type: 'cases-user-actions', }, + { + attributes: { + action: UserActionActions.update, + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + type: 'category', + owner: 'securitySolution', + payload: { category: 'pizza toppings' }, + }, + references: [{ id: '1', name: 'associated-cases', type: 'cases' }], + type: 'cases-user-actions', + }, { attributes: { action: UserActionActions.update, @@ -677,13 +755,10 @@ describe('CaseUserActionService', () => { it('logs the correct user actions when bulk updating cases', async () => { await service.creator.bulkCreateUpdateCase({ - ...commonArgs, - originalCases, - updatedCases, - user: commonArgs.user, + builtUserActions, }); - expect(mockAuditLogger.log).toBeCalledTimes(8); + expect(mockAuditLogger.log).toBeCalledTimes(9); expect(mockAuditLogger.log.mock.calls).toMatchInlineSnapshot(` Array [ Array [ @@ -704,7 +779,7 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User updated the title for case id: 1 - user action id: 0", + "message": undefined, }, ], Array [ @@ -725,7 +800,7 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User updated the status for case id: 1 - user action id: 1", + "message": undefined, }, ], Array [ @@ -746,7 +821,28 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User changed the case connector to id: 456 for case id: 1 - user action id: 2", + "message": undefined, + }, + ], + Array [ + Object { + "event": Object { + "action": "case_user_action_update_case_category", + "category": Array [ + "database", + ], + "outcome": "success", + "type": Array [ + "change", + ], + }, + "kibana": Object { + "saved_object": Object { + "id": "1", + "type": "cases", + }, + }, + "message": undefined, }, ], Array [ @@ -767,7 +863,7 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User updated the description for case id: 2 - user action id: 3", + "message": undefined, }, ], Array [ @@ -788,7 +884,7 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User added tags to case id: 2 - user action id: 4", + "message": undefined, }, ], Array [ @@ -809,7 +905,7 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User deleted tags in case id: 2 - user action id: 5", + "message": undefined, }, ], Array [ @@ -830,7 +926,7 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User updated the settings for case id: 2 - user action id: 6", + "message": undefined, }, ], Array [ @@ -851,19 +947,23 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User updated the severity for case id: 2 - user action id: 7", + "message": undefined, }, ], ] `); }); + const mockAssigneesAddedUserActions = getAssigneesAddedUserActions({ isMock: true }); + const assigneesAddedUserActions = Object.keys(mockAssigneesAddedUserActions).reduce< + UserActionEvent[] + >((acc, key) => { + return [...acc, ...mockAssigneesAddedUserActions[key]]; + }, []); + it('creates the correct user actions when an assignee is added', async () => { await service.creator.bulkCreateUpdateCase({ - ...commonArgs, - originalCases, - updatedCases: updatedAssigneesCases, - user: commonArgs.user, + builtUserActions: assigneesAddedUserActions, }); expect(unsecuredSavedObjectsClient.bulkCreate.mock.calls[0]).toMatchInlineSnapshot(` @@ -907,10 +1007,7 @@ describe('CaseUserActionService', () => { it('logs the correct user actions when an assignee is added', async () => { await service.creator.bulkCreateUpdateCase({ - ...commonArgs, - originalCases, - updatedCases: updatedAssigneesCases, - user: commonArgs.user, + builtUserActions: assigneesAddedUserActions, }); expect(mockAuditLogger.log).toBeCalledTimes(1); @@ -934,29 +1031,23 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User assigned uids: [1] to case id: 1 - user action id: 0", + "message": undefined, }, ], ] `); }); - it('creates the correct user actions when an assignee is removed', async () => { - const casesWithAssigneeRemoved: Array> = [ - { - ...createCaseSavedObjectResponse(), - id: '1', - attributes: { - assignees: [], - }, - }, - ]; + const mockAssigneesRemovedUserActions = getAssigneesRemovedUserActions({ isMock: true }); + const assigneesRemovedUserActions = Object.keys(mockAssigneesRemovedUserActions).reduce< + UserActionEvent[] + >((acc, key) => { + return [...acc, ...mockAssigneesRemovedUserActions[key]]; + }, []); + it('creates the correct user actions when an assignee is removed', async () => { await service.creator.bulkCreateUpdateCase({ - ...commonArgs, - originalCases: originalCasesWithAssignee, - updatedCases: casesWithAssigneeRemoved, - user: commonArgs.user, + builtUserActions: assigneesRemovedUserActions, }); expect(unsecuredSavedObjectsClient.bulkCreate.mock.calls[0]).toMatchInlineSnapshot(` @@ -999,21 +1090,8 @@ describe('CaseUserActionService', () => { }); it('logs the correct user actions when an assignee is removed', async () => { - const casesWithAssigneeRemoved: Array> = [ - { - ...createCaseSavedObjectResponse(), - id: '1', - attributes: { - assignees: [], - }, - }, - ]; - await service.creator.bulkCreateUpdateCase({ - ...commonArgs, - originalCases: originalCasesWithAssignee, - updatedCases: casesWithAssigneeRemoved, - user: commonArgs.user, + builtUserActions: assigneesRemovedUserActions, }); expect(mockAuditLogger.log).toBeCalledTimes(1); @@ -1037,29 +1115,25 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User unassigned uids: [1] from case id: 1 - user action id: 0", + "message": undefined, }, ], ] `); }); - it('creates the correct user actions when assignees are added and removed', async () => { - const caseAssignees: Array> = [ - { - ...createCaseSavedObjectResponse(), - id: '1', - attributes: { - assignees: [{ uid: '2' }], - }, - }, - ]; + const mockAssigneesAddedRemovedUserActions = getAssigneesAddedRemovedUserActions({ + isMock: true, + }); + const assigneesAddedRemovedUserActions = Object.keys( + mockAssigneesAddedRemovedUserActions + ).reduce((acc, key) => { + return [...acc, ...mockAssigneesAddedRemovedUserActions[key]]; + }, []); + it('creates the correct user actions when assignees are added and removed', async () => { await service.creator.bulkCreateUpdateCase({ - ...commonArgs, - originalCases: originalCasesWithAssignee, - updatedCases: caseAssignees, - user: commonArgs.user, + builtUserActions: assigneesAddedRemovedUserActions, }); expect(unsecuredSavedObjectsClient.bulkCreate.mock.calls[0]).toMatchInlineSnapshot(` @@ -1130,21 +1204,8 @@ describe('CaseUserActionService', () => { }); it('logs the correct user actions when assignees are added and removed', async () => { - const caseAssignees: Array> = [ - { - ...createCaseSavedObjectResponse(), - id: '1', - attributes: { - assignees: [{ uid: '2' }], - }, - }, - ]; - await service.creator.bulkCreateUpdateCase({ - ...commonArgs, - originalCases: originalCasesWithAssignee, - updatedCases: caseAssignees, - user: commonArgs.user, + builtUserActions: assigneesAddedRemovedUserActions, }); expect(mockAuditLogger.log).toBeCalledTimes(2); @@ -1168,7 +1229,7 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User assigned uids: [2] to case id: 1 - user action id: 0", + "message": undefined, }, ], Array [ @@ -1189,19 +1250,25 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User unassigned uids: [1] from case id: 1 - user action id: 1", + "message": undefined, }, ], ] `); }); + const mockTagsAddedRemovedUserActions = getTagsAddedRemovedUserActions({ + isMock: true, + }); + const tagsAddedRemovedUserActions = Object.keys(mockTagsAddedRemovedUserActions).reduce< + UserActionEvent[] + >((acc, key) => { + return [...acc, ...mockTagsAddedRemovedUserActions[key]]; + }, []); + it('creates the correct user actions when tags are added and removed', async () => { await service.creator.bulkCreateUpdateCase({ - ...commonArgs, - originalCases, - updatedCases: updatedTagsCases, - user: commonArgs.user, + builtUserActions: tagsAddedRemovedUserActions, }); expect(unsecuredSavedObjectsClient.bulkCreate.mock.calls[0]).toMatchInlineSnapshot(` @@ -1270,10 +1337,7 @@ describe('CaseUserActionService', () => { it('logs the correct user actions when tags are added and removed', async () => { await service.creator.bulkCreateUpdateCase({ - ...commonArgs, - originalCases, - updatedCases: updatedTagsCases, - user: commonArgs.user, + builtUserActions: tagsAddedRemovedUserActions, }); expect(mockAuditLogger.log).toBeCalledTimes(2); @@ -1297,7 +1361,7 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User added tags to case id: 1 - user action id: 0", + "message": undefined, }, ], Array [ @@ -1318,7 +1382,7 @@ describe('CaseUserActionService', () => { "type": "cases", }, }, - "message": "User deleted tags in case id: 1 - user action id: 1", + "message": undefined, }, ], ] diff --git a/x-pack/plugins/cases/server/services/user_actions/index.ts b/x-pack/plugins/cases/server/services/user_actions/index.ts index 51188a6ff489b8..939fb843758d17 100644 --- a/x-pack/plugins/cases/server/services/user_actions/index.ts +++ b/x-pack/plugins/cases/server/services/user_actions/index.ts @@ -28,6 +28,7 @@ import type { ConnectorActivityAggsResult, ConnectorFieldsBeforePushAggsResult, GetUsersResponse, + MultipleCasesUserActionsTotalAggsResult, ParticipantsAggsResult, PushInfo, PushTimeFrameInfo, @@ -652,6 +653,55 @@ export class CaseUserActionService { }; } + public async getMultipleCasesUserActionsTotal({ + caseIds, + }: { + caseIds: string[]; + }): Promise> { + const response = await this.context.unsecuredSavedObjectsClient.find< + unknown, + MultipleCasesUserActionsTotalAggsResult + >({ + type: CASE_USER_ACTION_SAVED_OBJECT, + hasReference: caseIds.map((id) => ({ type: CASE_SAVED_OBJECT, id })), + hasReferenceOperator: 'OR', + page: 1, + perPage: 1, + sortField: defaultSortField, + aggs: CaseUserActionService.buildMultipleCasesUserActionsTotalAgg(caseIds.length), + }); + + const result: Record = {}; + + response?.aggregations?.references.caseUserActions.buckets.forEach( + ({ key, doc_count: totalUserActions }: { key: string; doc_count: number }) => { + result[key] = totalUserActions; + } + ); + + return result; + } + + private static buildMultipleCasesUserActionsTotalAgg( + idsLength: number + ): Record { + return { + references: { + nested: { + path: `${CASE_USER_ACTION_SAVED_OBJECT}.references`, + }, + aggregations: { + caseUserActions: { + terms: { + field: `${CASE_USER_ACTION_SAVED_OBJECT}.references.id`, + size: idsLength, + }, + }, + }, + }, + }; + } + public async getCaseUserActionStats({ caseId }: { caseId: string }) { const response = await this.context.unsecuredSavedObjectsClient.find< unknown, diff --git a/x-pack/plugins/cases/server/services/user_actions/mocks.ts b/x-pack/plugins/cases/server/services/user_actions/mocks.ts index b3aecb676d296b..41689cc7853243 100644 --- a/x-pack/plugins/cases/server/services/user_actions/mocks.ts +++ b/x-pack/plugins/cases/server/services/user_actions/mocks.ts @@ -11,6 +11,7 @@ import type { CasePostRequest } from '../../../common/types/api'; import { createCaseSavedObjectResponse } from '../test_utils'; import { transformSavedObjectToExternalModel } from '../cases/transform'; import { alertComment, comment } from '../../mocks'; +import type { UserActionsDict } from './types'; import { CaseSeverity, CaseStatuses, ConnectorTypes } from '../../../common/types/domain'; export const casePayload: CasePostRequest = { @@ -53,57 +54,648 @@ export const originalCases = [ { ...createCaseSavedObjectResponse(), id: '2' }, ].map((so) => transformSavedObjectToExternalModel(so)); -export const updatedCases = [ - { - ...createCaseSavedObjectResponse(), - id: '1', - type: CASE_SAVED_OBJECT, - attributes: { - title: 'updated title', - status: CaseStatuses.closed, - connector: casePayload.connector, - }, - references: [], - }, - { - ...createCaseSavedObjectResponse(), - id: '2', - type: CASE_SAVED_OBJECT, - attributes: { - description: 'updated desc', - tags: ['one', 'two'], - settings: { syncAlerts: false }, - severity: CaseSeverity.CRITICAL, - }, - references: [], - }, -]; +export const patchCasesRequest = { + cases: [ + { + ...createCaseSavedObjectResponse(), + caseId: '1', + type: CASE_SAVED_OBJECT, + updatedAttributes: { + title: 'updated title', + status: CaseStatuses.closed, + connector: casePayload.connector, + category: 'pizza toppings', + }, + originalCase: originalCases[0], + references: [], + }, + { + ...createCaseSavedObjectResponse(), + caseId: '2', + type: CASE_SAVED_OBJECT, + updatedAttributes: { + description: 'updated desc', + tags: ['one', 'two'], + settings: { syncAlerts: false }, + severity: CaseSeverity.CRITICAL, + }, + originalCase: originalCases[1], + references: [], + }, + ], +}; -export const originalCasesWithAssignee = [ +const originalCasesWithAssignee = [ { ...createCaseSavedObjectResponse({ overrides: { assignees: [{ uid: '1' }] } }), id: '1' }, ].map((so) => transformSavedObjectToExternalModel(so)); -export const updatedAssigneesCases = [ - { - ...createCaseSavedObjectResponse(), - id: '1', - attributes: { - assignees: [{ uid: '1' }], +export const patchAssigneesCasesRequest = { + cases: [ + { + ...createCaseSavedObjectResponse(), + caseId: '1', + updatedAttributes: { + assignees: [{ uid: '1' }], + }, + originalCase: originalCases[0], }, - }, -]; + ], +}; -export const updatedTagsCases = [ - { - ...createCaseSavedObjectResponse(), - id: '1', - attributes: { - tags: ['a', 'b'], +export const patchRemoveAssigneesCasesRequest = { + cases: [ + { + ...createCaseSavedObjectResponse(), + caseId: '1', + updatedAttributes: { + assignees: [], + }, + originalCase: originalCasesWithAssignee[0], }, - }, -]; + ], +}; + +export const patchAddRemoveAssigneesCasesRequest = { + cases: [ + { + ...createCaseSavedObjectResponse(), + caseId: '1', + updatedAttributes: { + assignees: [{ uid: '2' }], + }, + originalCase: originalCasesWithAssignee[0], + }, + ], +}; + +export const patchTagsCasesRequest = { + cases: [ + { + ...createCaseSavedObjectResponse(), + caseId: '1', + updatedAttributes: { + tags: ['a', 'b'], + }, + originalCase: originalCases[0], + }, + ], +}; export const attachments = [ { id: '1', attachment: { ...comment }, owner: SECURITY_SOLUTION_OWNER }, { id: '2', attachment: { ...alertComment }, owner: SECURITY_SOLUTION_OWNER }, ]; + +export const getBuiltUserActions = ({ isMock }: { isMock: boolean }): UserActionsDict => ({ + '1': [ + { + eventDetails: { + action: 'update', + descriptiveAction: 'case_user_action_update_case_title', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '1', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'update', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + title: 'updated title', + }, + type: 'title', + }, + references: [ + { + id: '1', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + { + eventDetails: { + action: 'update', + descriptiveAction: 'case_user_action_update_case_status', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '1', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'update', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + status: 'closed', + }, + type: 'status', + }, + references: [ + { + id: '1', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + { + eventDetails: { + action: 'update', + descriptiveAction: 'case_user_action_update_case_connector', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '1', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'update', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + connector: { + fields: { + category: 'Denial of Service', + destIp: true, + malwareHash: true, + malwareUrl: true, + priority: '2', + sourceIp: true, + subcategory: '45', + }, + name: 'ServiceNow SN', + type: '.servicenow-sir', + }, + }, + type: 'connector', + }, + references: [ + { + id: '1', + name: 'associated-cases', + type: 'cases', + }, + { + id: '456', + name: 'connectorId', + type: 'action', + }, + ], + }, + }, + { + eventDetails: { + action: 'update', + descriptiveAction: 'case_user_action_update_case_category', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '1', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'update', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + category: 'pizza toppings', + }, + type: 'category', + }, + references: [ + { + id: '1', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + ], + '2': [ + { + eventDetails: { + action: 'update', + descriptiveAction: 'case_user_action_update_case_description', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '2', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'update', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + description: 'updated desc', + }, + type: 'description', + }, + references: [ + { + id: '2', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + { + eventDetails: { + action: 'add', + descriptiveAction: 'case_user_action_add_case_tags', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '2', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'add', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + tags: ['one', 'two'], + }, + type: 'tags', + }, + references: [ + { + id: '2', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + { + eventDetails: { + action: 'delete', + descriptiveAction: 'case_user_action_delete_case_tags', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '2', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'delete', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + tags: ['defacement'], + }, + type: 'tags', + }, + references: [ + { + id: '2', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + { + eventDetails: { + action: 'update', + descriptiveAction: 'case_user_action_update_case_settings', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '2', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'update', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + settings: { + syncAlerts: false, + }, + }, + type: 'settings', + }, + references: [ + { + id: '2', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + { + eventDetails: { + action: 'update', + descriptiveAction: 'case_user_action_update_case_severity', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '2', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'update', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + severity: 'critical', + }, + type: 'severity', + }, + references: [ + { + id: '2', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + ], +}); + +export const getAssigneesAddedUserActions = ({ isMock }: { isMock: boolean }): UserActionsDict => ({ + '1': [ + { + eventDetails: { + action: 'add', + descriptiveAction: 'case_user_action_add_case_assignees', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '1', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'add', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + assignees: [ + { + uid: '1', + }, + ], + }, + type: 'assignees', + }, + references: [ + { + id: '1', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + ], +}); + +export const getAssigneesRemovedUserActions = ({ + isMock, +}: { + isMock: boolean; +}): UserActionsDict => ({ + '1': [ + { + eventDetails: { + action: 'delete', + descriptiveAction: 'case_user_action_delete_case_assignees', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '1', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'delete', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + assignees: [ + { + uid: '1', + }, + ], + }, + type: 'assignees', + }, + references: [ + { + id: '1', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + ], +}); + +export const getAssigneesAddedRemovedUserActions = ({ + isMock, +}: { + isMock: boolean; +}): UserActionsDict => ({ + '1': [ + { + eventDetails: { + action: 'add', + descriptiveAction: 'case_user_action_add_case_assignees', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '1', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'add', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + assignees: [ + { + uid: '2', + }, + ], + }, + type: 'assignees', + }, + references: [ + { + id: '1', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + { + eventDetails: { + action: 'delete', + descriptiveAction: 'case_user_action_delete_case_assignees', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '1', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'delete', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + assignees: [ + { + uid: '1', + }, + ], + }, + type: 'assignees', + }, + references: [ + { + id: '1', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + ], +}); + +export const getTagsAddedRemovedUserActions = ({ + isMock, +}: { + isMock: boolean; +}): UserActionsDict => ({ + '1': [ + { + eventDetails: { + action: 'add', + descriptiveAction: 'case_user_action_add_case_tags', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '1', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'add', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + tags: ['a', 'b'], + }, + type: 'tags', + }, + references: [ + { + id: '1', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + { + eventDetails: { + action: 'delete', + descriptiveAction: 'case_user_action_delete_case_tags', + getMessage: isMock ? jest.fn() : expect.any(Function), + savedObjectId: '1', + savedObjectType: 'cases', + }, + parameters: { + attributes: { + action: 'delete', + created_at: '2022-01-09T22:00:00.000Z', + created_by: { + email: 'elastic@elastic.co', + full_name: 'Elastic User', + username: 'elastic', + }, + owner: 'securitySolution', + payload: { + tags: ['defacement'], + }, + type: 'tags', + }, + references: [ + { + id: '1', + name: 'associated-cases', + type: 'cases', + }, + ], + }, + }, + ], +}); diff --git a/x-pack/plugins/cases/server/services/user_actions/operations/create.test.ts b/x-pack/plugins/cases/server/services/user_actions/operations/create.test.ts index 92f5a6b6c254b8..e29bb63168eced 100644 --- a/x-pack/plugins/cases/server/services/user_actions/operations/create.test.ts +++ b/x-pack/plugins/cases/server/services/user_actions/operations/create.test.ts @@ -17,6 +17,18 @@ import { UserActionPersister } from './create'; import { createUserActionSO } from '../test_utils'; import type { BulkCreateAttachmentUserAction, CreateUserActionClient } from '../types'; import type { UserActionPersistedAttributes } from '../../../common/types/user_actions'; +import { + getAssigneesAddedRemovedUserActions, + getAssigneesAddedUserActions, + getAssigneesRemovedUserActions, + getBuiltUserActions, + getTagsAddedRemovedUserActions, + patchAddRemoveAssigneesCasesRequest, + patchAssigneesCasesRequest, + patchCasesRequest, + patchRemoveAssigneesCasesRequest, + patchTagsCasesRequest, +} from '../mocks'; import { AttachmentType } from '../../../../common/types/domain'; describe('UserActionPersister', () => { @@ -28,6 +40,11 @@ describe('UserActionPersister', () => { let persister: UserActionPersister; + beforeAll(() => { + jest.useFakeTimers(); + jest.setSystemTime(new Date('2022-01-09T22:00:00.000Z')); + }); + beforeEach(() => { jest.resetAllMocks(); persister = new UserActionPersister({ @@ -39,6 +56,10 @@ describe('UserActionPersister', () => { }); }); + afterAll(() => { + jest.useRealTimers(); + }); + const getRequest = () => ({ action: 'update' as const, @@ -62,6 +83,8 @@ describe('UserActionPersister', () => { user: { email: '', full_name: '', username: '' }, }); + const testUser = { full_name: 'Elastic User', username: 'elastic', email: 'elastic@elastic.co' }; + describe('Decoding requests', () => { describe('createUserAction', () => { beforeEach(() => { @@ -141,4 +164,59 @@ describe('UserActionPersister', () => { }); }); }); + + describe('buildUserActions', () => { + it('creates the correct user actions when bulk updating cases', async () => { + expect( + persister.buildUserActions({ + updatedCases: patchCasesRequest, + user: testUser, + }) + ).toEqual(getBuiltUserActions({ isMock: false })); + }); + + it('creates the correct user actions when an assignee is added', async () => { + expect( + persister.buildUserActions({ + updatedCases: patchAssigneesCasesRequest, + user: testUser, + }) + ).toEqual(getAssigneesAddedUserActions({ isMock: false })); + }); + + it('creates the correct user actions when an assignee is removed', async () => { + expect( + persister.buildUserActions({ + updatedCases: patchRemoveAssigneesCasesRequest, + user: testUser, + }) + ).toEqual(getAssigneesRemovedUserActions({ isMock: false })); + }); + + it('creates the correct user actions when assignees are added and removed', async () => { + expect( + persister.buildUserActions({ + updatedCases: patchAddRemoveAssigneesCasesRequest, + user: testUser, + }) + ).toEqual( + getAssigneesAddedRemovedUserActions({ + isMock: false, + }) + ); + }); + + it('creates the correct user actions when tags are added and removed', async () => { + expect( + persister.buildUserActions({ + updatedCases: patchTagsCasesRequest, + user: testUser, + }) + ).toEqual( + getTagsAddedRemovedUserActions({ + isMock: false, + }) + ); + }); + }); }); diff --git a/x-pack/plugins/cases/server/services/user_actions/operations/create.ts b/x-pack/plugins/cases/server/services/user_actions/operations/create.ts index 5713197a653db8..3b9c51e2df24ba 100644 --- a/x-pack/plugins/cases/server/services/user_actions/operations/create.ts +++ b/x-pack/plugins/cases/server/services/user_actions/operations/create.ts @@ -22,6 +22,7 @@ import { isUserActionType } from '../../../../common/utils/user_actions'; import { decodeOrThrow } from '../../../../common/api'; import { BuilderFactory } from '../builder_factory'; import type { + BuildUserActionsDictParams, BuilderParameters, BulkCreateAttachmentUserAction, BulkCreateBulkUpdateCaseUserActions, @@ -34,6 +35,7 @@ import type { ServiceContext, TypedUserActionDiffedItems, UserActionEvent, + UserActionsDict, } from '../types'; import { isAssigneesArray, isStringArray } from '../type_guards'; import type { IndexRefresh } from '../../types'; @@ -55,30 +57,25 @@ export class UserActionPersister { this.auditLogger = new UserActionAuditLogger(this.context.auditLogger); } - public async bulkCreateUpdateCase({ - originalCases, - updatedCases, - user, - refresh, - }: BulkCreateBulkUpdateCaseUserActions): Promise { - const builtUserActions = updatedCases.reduce((acc, updatedCase) => { - const originalCase = originalCases.find(({ id }) => id === updatedCase.id); + public buildUserActions({ updatedCases, user }: BuildUserActionsDictParams): UserActionsDict { + return updatedCases.cases.reduce((acc, updatedCase) => { + const originalCase = updatedCase.originalCase; if (originalCase == null) { return acc; } - const caseId = updatedCase.id; + const caseId = updatedCase.caseId; const owner = originalCase.attributes.owner; const userActions: UserActionEvent[] = []; - const updatedFields = Object.keys(updatedCase.attributes); + const updatedFields = Object.keys(updatedCase.updatedAttributes); updatedFields .filter((field) => UserActionPersister.userActionFieldsAllowed.has(field)) .forEach((field) => { const originalValue = get(originalCase, ['attributes', field]); - const newValue = get(updatedCase, ['attributes', field]); + const newValue = get(updatedCase, ['updatedAttributes', field]); userActions.push( ...this.getUserActionItemByDifference({ field, @@ -91,9 +88,15 @@ export class UserActionPersister { ); }); - return [...acc, ...userActions]; - }, []); + acc[caseId] = userActions; + return acc; + }, {}); + } + public async bulkCreateUpdateCase({ + builtUserActions, + refresh, + }: BulkCreateBulkUpdateCaseUserActions): Promise { await this.bulkCreateAndLog({ userActions: builtUserActions, refresh, @@ -368,6 +371,7 @@ export class UserActionPersister { userAction: UserActionEvent; } & IndexRefresh): Promise { const createdUserAction = await this.create({ ...userAction.parameters, refresh }); + this.auditLogger.log(userAction.eventDetails, createdUserAction.id); } @@ -381,7 +385,7 @@ export class UserActionPersister { const decodedAttributes = decodeOrThrow(UserActionPersistedAttributesRt)(attributes); - return await this.context.unsecuredSavedObjectsClient.create( + const res = await this.context.unsecuredSavedObjectsClient.create( CASE_USER_ACTION_SAVED_OBJECT, decodedAttributes as unknown as T, { @@ -389,6 +393,7 @@ export class UserActionPersister { refresh, } ); + return res; } catch (error) { this.context.log.error(`Error on POST a new case user action: ${error}`); throw error; diff --git a/x-pack/plugins/cases/server/services/user_actions/types.ts b/x-pack/plugins/cases/server/services/user_actions/types.ts index 68e60fe6ccc0aa..657fc31d7275ba 100644 --- a/x-pack/plugins/cases/server/services/user_actions/types.ts +++ b/x-pack/plugins/cases/server/services/user_actions/types.ts @@ -11,7 +11,6 @@ import type { Logger, ISavedObjectsSerializer, SavedObjectsRawDoc, - SavedObjectsUpdateResponse, } from '@kbn/core/server'; import type { KueryNode } from '@kbn/es-query'; import type { AuditLogger } from '@kbn/security-plugin/server'; @@ -22,7 +21,6 @@ import type { ConnectorUserAction, PushedUserAction, UserActionType, - CaseAttributes, CaseSettings, CaseSeverity, CaseStatuses, @@ -35,7 +33,7 @@ import type { UserActionSavedObjectTransformed, } from '../../common/types/user_actions'; import type { IndexRefresh } from '../types'; -import type { CaseSavedObjectTransformed } from '../../common/types/case'; +import type { PatchCasesArgs } from '../cases/types'; import type { AttachmentRequest, CasePostRequest, @@ -237,6 +235,17 @@ export interface UserActionsStatsAggsResult { }; } +export interface MultipleCasesUserActionsTotalAggsResult { + references: { + caseUserActions: { + buckets: Array<{ + key: string; + doc_count: number; + }>; + }; + }; +} + export interface ParticipantsAggsResult { participants: { buckets: Array<{ @@ -282,12 +291,17 @@ export type CreatePayloadFunction = ( items: Item[] ) => UserActionParameters['payload']; -export interface BulkCreateBulkUpdateCaseUserActions extends IndexRefresh { - originalCases: CaseSavedObjectTransformed[]; - updatedCases: Array>; +export interface BuildUserActionsDictParams { + updatedCases: PatchCasesArgs; user: User; } +export type UserActionsDict = Record; + +export interface BulkCreateBulkUpdateCaseUserActions extends IndexRefresh { + builtUserActions: UserActionEvent[]; +} + export interface BulkCreateAttachmentUserAction extends Omit, IndexRefresh { From e0fb467a5c6e82dad1bd9eb7749e3707a871c1c4 Mon Sep 17 00:00:00 2001 From: Davis McPhee Date: Thu, 27 Jul 2023 11:53:40 -0300 Subject: [PATCH 37/58] Add `test/examples/discover_customization_examples` to `CODEOWNERS` (#162603) ## Summary This PR adds `test/examples/discover_customization_examples` to the `CODEOWNERS` file. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index acd02f0c7d200e..90dec4eeeb9265 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -790,6 +790,7 @@ packages/kbn-yarn-lock-validator @elastic/kibana-operations /x-pack/test/search_sessions_integration/ @elastic/kibana-data-discovery /test/plugin_functional/test_suites/data_plugin @elastic/kibana-data-discovery /examples/demo_search/ @elastic/kibana-data-discovery +/test/examples/discover_customization_examples @elastic/kibana-data-discovery # Vis Editors /src/plugins/visualize/ @elastic/kibana-visualizations From ced5dcbb4a29d97d2c6068e1cb12a5e89606dc22 Mon Sep 17 00:00:00 2001 From: Anton Dosov Date: Thu, 27 Jul 2023 16:57:15 +0200 Subject: [PATCH 38/58] [chore] Add Content Management onboarding guide to dev docs (#162572) Add our saved object -> content management onboarding guide to dev docs --- nav-kibana-dev.docnav.json | 5 ++++- .../{content_onboarding.md => content_onboarding.mdx} | 11 ++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) rename src/plugins/content_management/docs/{content_onboarding.md => content_onboarding.mdx} (98%) diff --git a/nav-kibana-dev.docnav.json b/nav-kibana-dev.docnav.json index 3af82d0ce2387f..9d71533c1a47e9 100644 --- a/nav-kibana-dev.docnav.json +++ b/nav-kibana-dev.docnav.json @@ -181,6 +181,9 @@ { "id": "kibDevTutorialScreenshotting" }, + { + "id": "kibDevTutorialsContentManagementOnboarding" + }, { "id": "kibDevTutorialsServerlessProjectNavigation" } @@ -485,4 +488,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/plugins/content_management/docs/content_onboarding.md b/src/plugins/content_management/docs/content_onboarding.mdx similarity index 98% rename from src/plugins/content_management/docs/content_onboarding.md rename to src/plugins/content_management/docs/content_onboarding.mdx index d170d80f879811..f198a720b98786 100644 --- a/src/plugins/content_management/docs/content_onboarding.md +++ b/src/plugins/content_management/docs/content_onboarding.mdx @@ -1,6 +1,11 @@ -# Content management - onboarding - -This documentation lays down the steps to migrate away from the saved object public client by using the content management registries (public and server) and its public client. +--- +id: kibDevTutorialsContentManagementOnboarding +slug: /kibana-dev-docs/content-management-onboarding +title: Content Management Onboarding +description: This documentation lays down the steps to migrate away from the saved object public client by using the content management registries (public and server) and its public client. +date: 2023-04-13 +tags: ['kibana', 'dev', 'content management', 'saved objects'] +--- ## High level architecture From 11e56ec4c4c6ef1ee476d9ae0d64d49a317c1e7b Mon Sep 17 00:00:00 2001 From: Yngrid Coello Date: Thu, 27 Jul 2023 17:02:43 +0200 Subject: [PATCH 39/58] [Logs onboarding] Align elastic-agent version with stackVersion (#162622) Closes https://github.com/elastic/kibana/issues/159382. ### Changes - `kibanaVersion` is passed as a resources to the routes. - `elastic-agent` version is based on `kibanaVersion`. #### Before image #### After image --- x-pack/plugins/observability_onboarding/server/plugin.ts | 1 + .../server/routes/custom_logs/route.ts | 6 ++---- .../server/routes/register_routes.ts | 3 +++ .../plugins/observability_onboarding/server/routes/types.ts | 1 + 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/observability_onboarding/server/plugin.ts b/x-pack/plugins/observability_onboarding/server/plugin.ts index 2b58fa82859bf3..9dc78fea2c6d50 100644 --- a/x-pack/plugins/observability_onboarding/server/plugin.ts +++ b/x-pack/plugins/observability_onboarding/server/plugin.ts @@ -74,6 +74,7 @@ export class ObservabilityOnboardingPlugin repository: getObservabilityOnboardingServerRouteRepository(), plugins: resourcePlugins, config, + kibanaVersion: this.initContext.env.packageInfo.version, services: { esLegacyConfigService: this.esLegacyConfigService, }, diff --git a/x-pack/plugins/observability_onboarding/server/routes/custom_logs/route.ts b/x-pack/plugins/observability_onboarding/server/routes/custom_logs/route.ts index a186c0c5d15945..b71292b94aa93f 100644 --- a/x-pack/plugins/observability_onboarding/server/routes/custom_logs/route.ts +++ b/x-pack/plugins/observability_onboarding/server/routes/custom_logs/route.ts @@ -16,8 +16,6 @@ import { getHasLogs } from './get_has_logs'; import { getObservabilityOnboardingState } from './get_observability_onboarding_state'; import { saveObservabilityOnboardingState } from './save_observability_onboarding_state'; -const ELASTIC_AGENT_VERSION = '8.8.0'; // This should be defined from a source with the latest public release - const logMonitoringPrivilegesRoute = createObservabilityOnboardingServerRoute({ endpoint: 'GET /internal/observability_onboarding/custom_logs/privileges', options: { tags: [] }, @@ -46,7 +44,7 @@ const installShipperSetupRoute = createObservabilityOnboardingServerRoute({ scriptDownloadUrl: string; elasticAgentVersion: string; }> { - const { core, plugins } = resources; + const { core, plugins, kibanaVersion } = resources; const coreStart = await core.start(); const kibanaUrl = @@ -59,7 +57,7 @@ const installShipperSetupRoute = createObservabilityOnboardingServerRoute({ return { apiEndpoint, scriptDownloadUrl, - elasticAgentVersion: ELASTIC_AGENT_VERSION, + elasticAgentVersion: kibanaVersion, }; }, }); diff --git a/x-pack/plugins/observability_onboarding/server/routes/register_routes.ts b/x-pack/plugins/observability_onboarding/server/routes/register_routes.ts index 26a670b8f0ee5f..d9078819b2ae37 100644 --- a/x-pack/plugins/observability_onboarding/server/routes/register_routes.ts +++ b/x-pack/plugins/observability_onboarding/server/routes/register_routes.ts @@ -25,6 +25,7 @@ interface RegisterRoutes { logger: Logger; plugins: ObservabilityOnboardingRouteHandlerResources['plugins']; config: ObservabilityOnboardingConfig; + kibanaVersion: string; services: { esLegacyConfigService: EsLegacyConfigService; }; @@ -36,6 +37,7 @@ export function registerRoutes({ logger, plugins, config, + kibanaVersion, services, }: RegisterRoutes) { const routes = Object.values(repository); @@ -82,6 +84,7 @@ export function registerRoutes({ }, }, config, + kibanaVersion, services, })) as any; diff --git a/x-pack/plugins/observability_onboarding/server/routes/types.ts b/x-pack/plugins/observability_onboarding/server/routes/types.ts index 5a1defdde16bca..893e7558e9a72d 100644 --- a/x-pack/plugins/observability_onboarding/server/routes/types.ts +++ b/x-pack/plugins/observability_onboarding/server/routes/types.ts @@ -33,6 +33,7 @@ export interface ObservabilityOnboardingRouteHandlerResources { start: () => Promise; }; config: ObservabilityOnboardingConfig; + kibanaVersion: string; services: { esLegacyConfigService: EsLegacyConfigService; }; From c82b679c2412822934559f8a9fcf559c4ae33fb5 Mon Sep 17 00:00:00 2001 From: Adam Demjen Date: Thu, 27 Jul 2023 11:25:08 -0400 Subject: [PATCH 40/58] [8.10] [Enterprise Search] Make single target field editable in multi-field editor (#162512) ## Summary This PR enhances the multi-field configuration screen for creating an ML inference pipeline. It adds different behavior to the target field based on the selected model: - For ELSER pipelines the target field is not editable, and the output field names are automatically generated as `ml.inference._expanded` - For non-ELSER pipelines the target field is editable if there's a single source field selected. For multiple source fields the names are automatically generated as `ml.inference.` The mapping auto-updater process now receives `model_id` and only changes the mapping for ELSER pipelines. In order to keep the scope of changes smaller, we're NOT switching over to the multi-field selector for non-ELSER pipelines just yet. We're making the logic ready for this here, but the actual switchover will happen in a following PR. Non-ELSER pipelines ![field_config_non_elser](https://github.com/elastic/kibana/assets/14224983/2f74b01d-ac40-4656-9fd2-2843657d40c1) ELSER pipelines ![field_config_elser](https://github.com/elastic/kibana/assets/14224983/57f5d06a-fa61-4139-9ecf-007595670469) ### 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 - [x] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [x] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [x] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../common/types/pipelines.ts | 1 + .../create_ml_inference_pipeline.test.ts | 3 +- .../pipelines/create_ml_inference_pipeline.ts | 2 + .../ml_inference/configure_fields.test.tsx | 2 +- .../ml_inference/ml_inference_logic.test.ts | 9 +- .../ml_inference/ml_inference_logic.ts | 44 +++++++-- .../multi_field_selector.test.tsx | 49 +++++++++- .../ml_inference/multi_field_selector.tsx | 96 +++++++++++++++---- .../ml_inference/test_pipeline_logic.test.ts | 2 + .../pipelines/ml_inference/types.ts | 1 + .../create_ml_inference_pipeline.ts | 4 +- .../update_ml_inference_mappings.test.ts | 52 +++++++++- .../update_ml_inference_mappings.ts | 14 +++ .../routes/enterprise_search/indices.ts | 6 +- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - 17 files changed, 250 insertions(+), 38 deletions(-) diff --git a/x-pack/plugins/enterprise_search/common/types/pipelines.ts b/x-pack/plugins/enterprise_search/common/types/pipelines.ts index 8dc5869df4c102..b94249d33af2b7 100644 --- a/x-pack/plugins/enterprise_search/common/types/pipelines.ts +++ b/x-pack/plugins/enterprise_search/common/types/pipelines.ts @@ -86,6 +86,7 @@ export interface CreateMlInferencePipelineParameters { export interface CreateMLInferencePipelineDefinition { field_mappings: FieldMapping[]; inference_config?: InferencePipelineInferenceConfig; + model_id: string; pipeline_definition: MlInferencePipeline; pipeline_name: string; } diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/pipelines/create_ml_inference_pipeline.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/pipelines/create_ml_inference_pipeline.test.ts index d62612c805f51b..cb1f5a1b5adcde 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/pipelines/create_ml_inference_pipeline.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/pipelines/create_ml_inference_pipeline.test.ts @@ -32,6 +32,7 @@ describe('CreateMlInferencePipelineApiLogic', () => { }, ], indexName: 'my-index', + modelId: 'my-model-id', pipelineName: 'my-pipeline', pipelineDefinition: { processors: [], version: 1 }, }; @@ -39,7 +40,7 @@ describe('CreateMlInferencePipelineApiLogic', () => { expect(http.post).toHaveBeenCalledWith( '/internal/enterprise_search/indices/my-index/ml_inference/pipeline_processors', { - body: '{"field_mappings":[{"sourceField":"my_source_field","targetField":"my_target_field"}],"pipeline_definition":{"processors":[],"version":1},"pipeline_name":"my-pipeline"}', + body: '{"field_mappings":[{"sourceField":"my_source_field","targetField":"my_target_field"}],"model_id":"my-model-id","pipeline_definition":{"processors":[],"version":1},"pipeline_name":"my-pipeline"}', } ); expect(result).toEqual({ diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/pipelines/create_ml_inference_pipeline.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/pipelines/create_ml_inference_pipeline.ts index 6626c88f69a59c..8b7c990a14fc04 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/pipelines/create_ml_inference_pipeline.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/pipelines/create_ml_inference_pipeline.ts @@ -18,6 +18,7 @@ export interface CreateMlInferencePipelineApiLogicArgs { fieldMappings: FieldMapping[]; indexName: string; inferenceConfig?: InferencePipelineInferenceConfig; + modelId: string; pipelineDefinition: MlInferencePipeline; pipelineName: string; } @@ -33,6 +34,7 @@ export const createMlInferencePipeline = async ( const params: CreateMLInferencePipelineDefinition = { field_mappings: args.fieldMappings, inference_config: args.inferenceConfig, + model_id: args.modelId, pipeline_definition: args.pipelineDefinition, pipeline_name: args.pipelineName, }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/configure_fields.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/configure_fields.test.tsx index 3d65e79eca664f..ef2101c1de7da3 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/configure_fields.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/configure_fields.test.tsx @@ -26,7 +26,7 @@ describe('ConfigureFields', () => { addInferencePipelineModal: { configuration: { existingPipeline: false } }, }; - it('renders multi-field selector components if non-text expansion model is selected', () => { + it('renders single field selector component if non-text expansion model is selected', () => { setMockValues(mockValues); const wrapper = shallow(); expect(wrapper.find(SingleFieldMapping)).toHaveLength(1); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.test.ts index 8e1b2ab9060327..0d85cd3428c68f 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.test.ts @@ -172,6 +172,7 @@ describe('MlInferenceLogic', () => { }, ], indexName: 'test', + modelId: 'test-model', pipelineDefinition: {}, pipelineName: 'unit-test', }); @@ -340,6 +341,7 @@ describe('MlInferenceLogic', () => { pipelineName: 'unit-test', sourceField: '', fieldMappings: [], + targetField: '', }); expect(MLInferenceLogic.values.mlInferencePipeline).toBeUndefined(); @@ -352,6 +354,7 @@ describe('MlInferenceLogic', () => { pipelineName: 'unit-test', sourceField: 'body', fieldMappings: [], + targetField: '', }); expect(MLInferenceLogic.values.mlInferencePipeline).not.toBeUndefined(); @@ -364,6 +367,7 @@ describe('MlInferenceLogic', () => { pipelineName: '', sourceField: '', fieldMappings: [], + targetField: '', }); expect(MLInferenceLogic.values.mlInferencePipeline).toBeUndefined(); }); @@ -383,6 +387,7 @@ describe('MlInferenceLogic', () => { pipelineName: 'unit-test', sourceField: '', fieldMappings: [], + targetField: '', }); expect(MLInferenceLogic.values.mlInferencePipeline).not.toBeUndefined(); expect(MLInferenceLogic.values.mlInferencePipeline).toEqual(existingPipeline); @@ -563,12 +568,13 @@ describe('MlInferenceLogic', () => { MLModelsApiLogic.actions.apiSuccess([textExpansionModel]); MLInferenceLogic.actions.selectFields(['my_source_field1', 'my_source_field2']); - MLInferenceLogic.actions.addSelectedFieldsToMapping(); + MLInferenceLogic.actions.addSelectedFieldsToMapping(true); MLInferenceLogic.actions.createPipeline(); expect(MLInferenceLogic.actions.makeCreatePipelineRequest).toHaveBeenCalledWith({ indexName: mockModelConfiguration.indexName, inferenceConfig: undefined, + modelId: textExpansionModel.model_id, fieldMappings: [ { sourceField: 'my_source_field1', @@ -609,6 +615,7 @@ describe('MlInferenceLogic', () => { targetField: `ml.inference.${mockModelConfiguration.configuration.destinationField}`, }, ], + modelId: nerModel.model_id, pipelineDefinition: expect.any(Object), // Generation logic is tested elsewhere pipelineName: mockModelConfiguration.configuration.pipelineName, }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.ts index 663f1e62a75415..f67d764a97bb0c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.ts @@ -93,11 +93,23 @@ export const EMPTY_PIPELINE_CONFIGURATION: InferencePipelineConfiguration = { modelID: '', pipelineName: '', sourceField: '', + targetField: '', }; const API_REQUEST_COMPLETE_STATUSES = [Status.SUCCESS, Status.ERROR]; const DEFAULT_CONNECTOR_FIELDS = ['body', 'title', 'id', 'type', 'url']; +const getFullTargetFieldName = ( + sourceField: string, + targetField: string | undefined, + isTextExpansionModelSelected: boolean +) => { + const suffixedTargetField = `${targetField || sourceField}${ + isTextExpansionModelSelected ? '_expanded' : '' + }`; + return getMlInferencePrefixedFieldName(suffixedTargetField); +}; + export interface MLInferencePipelineOption { disabled: boolean; disabledReason?: string; @@ -109,7 +121,9 @@ export interface MLInferencePipelineOption { } interface MLInferenceProcessorsActions { - addSelectedFieldsToMapping: () => void; + addSelectedFieldsToMapping: (isTextExpansionModelSelected: boolean) => { + isTextExpansionModelSelected: boolean; + }; attachApiError: Actions< AttachMlInferencePipelineApiLogicArgs, AttachMlInferencePipelineResponse @@ -166,6 +180,7 @@ interface MLInferenceProcessorsActions { setInferencePipelineConfiguration: (configuration: InferencePipelineConfiguration) => { configuration: InferencePipelineConfiguration; }; + setTargetField: (targetFieldName: string) => { targetFieldName: string }; startTextExpansionModelSuccess: StartTextExpansionModelApiLogicActions['apiSuccess']; } @@ -203,7 +218,9 @@ export const MLInferenceLogic = kea< MakeLogicType >({ actions: { - addSelectedFieldsToMapping: true, + addSelectedFieldsToMapping: (isTextExpansionModelSelected: string) => ({ + isTextExpansionModelSelected, + }), attachPipeline: true, clearFormErrors: true, createPipeline: true, @@ -217,6 +234,7 @@ export const MLInferenceLogic = kea< setInferencePipelineConfiguration: (configuration: InferencePipelineConfiguration) => ({ configuration, }), + setTargetField: (targetFieldName: string) => ({ targetFieldName }), }, connect: { actions: [ @@ -298,6 +316,7 @@ export const MLInferenceLogic = kea< targetField: getMlInferencePrefixedFieldName(configuration.destinationField), }, ], + modelId: configuration.modelID, pipelineDefinition: mlInferencePipeline!, pipelineName: configuration.pipelineName, }); @@ -314,6 +333,7 @@ export const MLInferenceLogic = kea< pipelineName, sourceField: params.source_field, fieldMappings: params.field_mappings, + targetField: params.destination_field ?? '', }); }, setIndexName: ({ indexName }) => { @@ -370,17 +390,21 @@ export const MLInferenceLogic = kea< step: AddInferencePipelineSteps.Configuration, }, { - addSelectedFieldsToMapping: (modal) => { + addSelectedFieldsToMapping: (modal, { isTextExpansionModelSelected }) => { const { - configuration: { fieldMappings }, + configuration: { fieldMappings, targetField }, selectedSourceFields, } = modal; const mergedFieldMappings: FieldMapping[] = [ ...(fieldMappings || []), - ...(selectedSourceFields || []).map((fieldName) => ({ + ...(selectedSourceFields || []).map((fieldName: string) => ({ sourceField: fieldName, - targetField: getMlInferencePrefixedFieldName(`${fieldName}_expanded`), + targetField: getFullTargetFieldName( + fieldName, + targetField, + isTextExpansionModelSelected + ), })), ]; @@ -389,6 +413,7 @@ export const MLInferenceLogic = kea< configuration: { ...modal.configuration, fieldMappings: mergedFieldMappings, + targetField: '', }, selectedSourceFields: [], }; @@ -437,6 +462,13 @@ export const MLInferenceLogic = kea< ...modal, configuration, }), + setTargetField: (modal, { targetFieldName }) => ({ + ...modal, + configuration: { + ...modal.configuration, + targetField: targetFieldName, + }, + }), }, ], createErrors: [ diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.test.tsx index 34b3a771fa46af..f9413dd57023e8 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.test.tsx @@ -11,7 +11,7 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { EuiBasicTable, EuiButton, EuiComboBox } from '@elastic/eui'; +import { EuiBasicTable, EuiButton, EuiComboBox, EuiFieldText } from '@elastic/eui'; import { MultiFieldMapping, SelectedFieldMappings } from './multi_field_selector'; @@ -92,6 +92,53 @@ describe('MultiFieldMapping', () => { const button = wrapper.find(EuiButton); expect(button.prop('disabled')).toBe(false); }); + it('disables target field text field if no source fields are selected', () => { + setMockValues(DEFAULT_VALUES); + const wrapper = shallow(); + + expect(wrapper.find(EuiFieldText)).toHaveLength(1); + const textField = wrapper.find(EuiFieldText); + expect(textField.prop('disabled')).toBe(true); + }); + it('disables target field text field if multiple source fields are selected', () => { + setMockValues({ + ...DEFAULT_VALUES, + addInferencePipelineModal: { + ...DEFAULT_VALUES.addInferencePipelineModal, + selectedSourceFields: ['my-source-field1', 'my-source-field2'], + }, + }); + const wrapper = shallow(); + + expect(wrapper.find(EuiFieldText)).toHaveLength(1); + const textField = wrapper.find(EuiFieldText); + expect(textField.prop('disabled')).toBe(true); + }); + it('disables target field text field if text expansion model is selected', () => { + setMockValues({ + ...DEFAULT_VALUES, + isTextExpansionModelSelected: true, + }); + const wrapper = shallow(); + + expect(wrapper.find(EuiFieldText)).toHaveLength(1); + const textField = wrapper.find(EuiFieldText); + expect(textField.prop('disabled')).toBe(true); + }); + it('enables target field text field if a single source field is selected', () => { + setMockValues({ + ...DEFAULT_VALUES, + addInferencePipelineModal: { + ...DEFAULT_VALUES.addInferencePipelineModal, + selectedSourceFields: ['my-source-field1'], + }, + }); + const wrapper = shallow(); + + expect(wrapper.find(EuiFieldText)).toHaveLength(1); + const textField = wrapper.find(EuiFieldText); + expect(textField.prop('disabled')).toBe(false); + }); }); describe('SelectedFieldMappings', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.tsx index a4bd4611719862..49d0a7be8fd86d 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React from 'react'; +import React, { useState } from 'react'; import { useValues, useActions } from 'kea'; @@ -31,13 +31,62 @@ import { MLInferenceLogic } from './ml_inference_logic'; type FieldNames = Array<{ label: string }>; +const TARGET_FIELD_PLACEHOLDER_TEXT_NO_FIELDS = i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.placeholder.noFields', + { + defaultMessage: 'Select a source field', + } +); + +const TARGET_FIELD_PLACEHOLDER_TEXT_MULTIPLE_FIELDS = i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.placeholder.multipleFields', + { + defaultMessage: 'Automatically created for multi-select', + } +); + +const TARGET_FIELD_PLACEHOLDER_TEXT_TEXT_EXPANSION_MODEL = i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.placeholder.textExpansionModel', + { + defaultMessage: 'Automatically created', + } +); + +const TARGET_FIELD_HELP_TEXT_DEFAULT = i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.helpText', + { + defaultMessage: 'Optional. Field name where inference results should be saved.', + } +); + +const TARGET_FIELD_HELP_TEXT_TEXT_EXPANSION_MODEL = i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.helpTextTextExpansionModel', + { + defaultMessage: 'ELSER target fields are created automatically.', + } +); + +const getInitialTargetFieldPlaceholderText = (isTextExpansionModelSelected: boolean) => + isTextExpansionModelSelected + ? TARGET_FIELD_PLACEHOLDER_TEXT_TEXT_EXPANSION_MODEL + : TARGET_FIELD_PLACEHOLDER_TEXT_NO_FIELDS; + +const getTargetFieldHelpText = (isTextExpansionModelSelected: boolean) => + isTextExpansionModelSelected + ? TARGET_FIELD_HELP_TEXT_TEXT_EXPANSION_MODEL + : TARGET_FIELD_HELP_TEXT_DEFAULT; + export const MultiFieldMapping: React.FC = () => { const { addInferencePipelineModal: { configuration, selectedSourceFields = [] }, + isTextExpansionModelSelected, sourceFields, } = useValues(MLInferenceLogic); const { ingestionMethod } = useValues(IndexViewLogic); - const { addSelectedFieldsToMapping, selectFields } = useActions(MLInferenceLogic); + const { addSelectedFieldsToMapping, selectFields, setTargetField } = useActions(MLInferenceLogic); + const [placeholderText, setPlaceholderText] = useState( + getInitialTargetFieldPlaceholderText(isTextExpansionModelSelected) + ); const mappedSourceFields = configuration.fieldMappings?.map(({ sourceField }) => sourceField) ?? []; @@ -50,9 +99,25 @@ export const MultiFieldMapping: React.FC = () => { const selectedFields = selectedSourceFields.map((fieldName) => ({ label: fieldName, })); + const targetField = configuration.targetField; + const isExactlyOneSourceFieldSelected = selectedSourceFields.length === 1; const onChangeSelectedFields = (selectedFieldNames: FieldNames) => { selectFields(selectedFieldNames.map(({ label }) => label)); + setTargetField( + !isTextExpansionModelSelected && selectedFieldNames.length === 1 + ? selectedFieldNames[0].label + : '' + ); + setPlaceholderText( + isTextExpansionModelSelected + ? TARGET_FIELD_PLACEHOLDER_TEXT_TEXT_EXPANSION_MODEL + : selectedFieldNames.length === 0 + ? TARGET_FIELD_PLACEHOLDER_TEXT_NO_FIELDS + : selectedFieldNames.length === 1 + ? selectedFieldNames[0].label + : TARGET_FIELD_PLACEHOLDER_TEXT_MULTIPLE_FIELDS + ); }; const onCreateField = (fieldName: string) => { @@ -63,6 +128,12 @@ export const MultiFieldMapping: React.FC = () => { selectFields([...selectedSourceFields, fieldName]); }; + const onAddSelectedFields = () => { + addSelectedFieldsToMapping(isTextExpansionModelSelected); + setTargetField(''); + setPlaceholderText(getInitialTargetFieldPlaceholderText(isTextExpansionModelSelected)); + }; + return ( <> @@ -109,23 +180,16 @@ export const MultiFieldMapping: React.FC = () => { defaultMessage: 'Target field', } )} - helpText={i18n.translate( - 'xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.helpText', - { - defaultMessage: 'This name is automatically created based on your source field.', - } - )} + helpText={getTargetFieldHelpText(isTextExpansionModelSelected)} fullWidth > setTargetField(e.target.value)} data-telemetry-id={`entSearchContent-${ingestionMethod}-pipelines-configureFields-targetField`} - disabled - value={i18n.translate( - 'xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.defaultValue', - { - defaultMessage: 'This is automatically created', - } - )} + disabled={isTextExpansionModelSelected || !isExactlyOneSourceFieldSelected} + value={targetField} + placeholder={placeholderText} fullWidth /> @@ -136,7 +200,7 @@ export const MultiFieldMapping: React.FC = () => { data-telemetry-id={`entSearchContent-${ingestionMethod}-pipelines-configureFields-addSelectedFieldsToMapping`} disabled={selectedFields.length === 0} iconType="plusInCircle" - onClick={addSelectedFieldsToMapping} + onClick={onAddSelectedFields} style={{ width: '60px' }} > {i18n.translate( diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/test_pipeline_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/test_pipeline_logic.test.ts index fcec6868e1b492..83bf8f7eef5459 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/test_pipeline_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/test_pipeline_logic.test.ts @@ -25,6 +25,7 @@ const DEFAULT_VALUES: TestPipelineValues = { modelID: '', pipelineName: '', sourceField: '', + targetField: '', }, indexName: '', step: AddInferencePipelineSteps.Configuration, @@ -70,6 +71,7 @@ describe('TestPipelineLogic', () => { modelID: '', pipelineName: '', sourceField: '', + targetField: '', }, indexName: '', step: AddInferencePipelineSteps.Configuration, diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/types.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/types.ts index ec1246ab8b4647..9754a378e7473e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/types.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/types.ts @@ -17,6 +17,7 @@ export interface InferencePipelineConfiguration { pipelineName: string; sourceField: string; fieldMappings?: FieldMapping[]; + targetField: string; } export interface AddInferencePipelineFormErrors { diff --git a/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/create_ml_inference_pipeline.ts b/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/create_ml_inference_pipeline.ts index eb8cdecb64a02e..21091fec671673 100644 --- a/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/create_ml_inference_pipeline.ts +++ b/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/create_ml_inference_pipeline.ts @@ -38,7 +38,7 @@ export const preparePipelineAndIndexForMlInference = async ( indexName: string, pipelineName: string, pipelineDefinition: IngestPipeline | undefined, - modelId: string | undefined, + modelId: string, sourceField: string | undefined, destinationField: string | null | undefined, fieldMappings: FieldMapping[] | undefined, @@ -62,7 +62,7 @@ export const preparePipelineAndIndexForMlInference = async ( ); const mappingResponse = fieldMappings - ? (await updateMlInferenceMappings(indexName, fieldMappings, esClient)).acknowledged + ? (await updateMlInferenceMappings(indexName, modelId, fieldMappings, esClient)).acknowledged : false; return { diff --git a/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/update_ml_inference_mappings.test.ts b/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/update_ml_inference_mappings.test.ts index 27425274608e10..59699929ec3131 100644 --- a/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/update_ml_inference_mappings.test.ts +++ b/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/update_ml_inference_mappings.test.ts @@ -13,11 +13,27 @@ import { updateMlInferenceMappings } from './update_ml_inference_mappings'; describe('updateMlInferenceMappings', () => { const indexName = 'my-index'; - + const modelId = 'my-model-id'; const mockClient = elasticsearchServiceMock.createScopedClusterClient(); beforeEach(() => { jest.clearAllMocks(); + + mockClient.asCurrentUser.ml.getTrainedModels.mockResolvedValue({ + count: 1, + trained_model_configs: [ + { + inference_config: { + text_expansion: {}, + }, + input: { + field_names: [], + }, + model_id: modelId, + tags: [], + }, + ], + }); }); const expectedMapping = { @@ -62,14 +78,42 @@ describe('updateMlInferenceMappings', () => { }, ]; - it('should update mappings for default output', async () => { - await updateMlInferenceMappings(indexName, fieldMappings, mockClient.asCurrentUser); + it('should update mappings for text expansion pipelines', async () => { + await updateMlInferenceMappings(indexName, modelId, fieldMappings, mockClient.asCurrentUser); expect(mockClient.asCurrentUser.indices.putMapping).toHaveBeenLastCalledWith({ index: indexName, properties: expectedMapping, }); }); + it('should not update mappings for pipelines other than text expansion', async () => { + const nonTextExpansionModelId = 'some-other-model-id'; + + mockClient.asCurrentUser.ml.getTrainedModels.mockResolvedValue({ + count: 1, + trained_model_configs: [ + { + inference_config: { + ner: {}, + }, + input: { + field_names: [], + }, + model_id: nonTextExpansionModelId, + tags: [], + }, + ], + }); + + await updateMlInferenceMappings( + indexName, + nonTextExpansionModelId, + fieldMappings, + mockClient.asCurrentUser + ); + expect(mockClient.asCurrentUser.indices.putMapping).not.toHaveBeenCalled(); + }); + it('should raise an error if the update fails', async () => { mockClient.asCurrentUser.indices.putMapping.mockImplementation(() => Promise.reject({ @@ -84,7 +128,7 @@ describe('updateMlInferenceMappings', () => { }) ); await expect( - updateMlInferenceMappings(indexName, fieldMappings, mockClient.asCurrentUser) + updateMlInferenceMappings(indexName, modelId, fieldMappings, mockClient.asCurrentUser) ).rejects.toThrowError(ErrorCode.MAPPING_UPDATE_FAILED); }); }); diff --git a/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/update_ml_inference_mappings.ts b/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/update_ml_inference_mappings.ts index 0108187efd120d..3cc2ef3c2ed4f7 100644 --- a/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/update_ml_inference_mappings.ts +++ b/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/update_ml_inference_mappings.ts @@ -21,9 +21,17 @@ import { isIllegalArgumentException } from '../../../../utils/identify_exception */ export const updateMlInferenceMappings = async ( indexName: string, + modelId: string, fieldMappings: FieldMapping[], esClient: ElasticsearchClient ) => { + // Check if the model is of text_expansion type, if not, skip the mapping update + if (!(await isTextExpansionModel(modelId, esClient))) { + return { + acknowledged: false, + }; + } + const sourceFields = fieldMappings.map(({ sourceField }) => sourceField); const nonDefaultTargetFields = fieldMappings @@ -97,3 +105,9 @@ const formDefaultElserMappingProps = (sourceFields: string[]) => { {} ); }; + +const isTextExpansionModel = async (modelId: string, esClient: ElasticsearchClient) => { + const models = await esClient.ml.getTrainedModels({ model_id: modelId }); + + return models.trained_model_configs[0]?.inference_config?.text_expansion !== undefined; +}; diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts index 5b5a0c7e99b9be..f2219b93919c91 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts @@ -409,7 +409,7 @@ export function registerIndexRoutes({ ), }) ), - model_id: schema.maybe(schema.string()), + model_id: schema.string(), pipeline_definition: schema.maybe( schema.object({ description: schema.maybe(schema.string()), @@ -437,14 +437,14 @@ export function registerIndexRoutes({ } = request.body; // additional validations - if ((pipelineDefinition || fieldMappings) && (sourceField || destinationField || modelId)) { + if ((pipelineDefinition || fieldMappings) && (sourceField || destinationField)) { return createError({ errorCode: ErrorCode.PARAMETER_CONFLICT, message: i18n.translate( 'xpack.enterpriseSearch.server.routes.createMlInferencePipeline.ParameterConflictError', { defaultMessage: - 'pipeline_definition and field_mappings should only be provided if source_field and destination_field and model_id are not provided', + 'pipeline_definition and field_mappings should only be provided if source_field and destination_field are not provided', } ), response, diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 10deeb381fe870..ba4b5e29ac9dfb 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -13596,7 +13596,6 @@ "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.sourceField.helpText": "Sélectionnez un champ existant ou tapez un nom de champ.", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.sourceField.placeholder": "Sélectionner un champ de schéma", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.sourceFieldLabel": "Champ source", - "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.defaultValue": "Ceci est créé automatiquement", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.helpText": "Ce nom est créé automatiquement en fonction de votre champ source.", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.label": "Champ cible (facultatif)", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetFieldLabel": "Champ cible", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 91c12ea264847c..30f3ee0c95ac9e 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -13610,7 +13610,6 @@ "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.sourceField.helpText": "既存のフィールドを選択するか、フィールド名を入力してください。", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.sourceField.placeholder": "スキーマフィールドを選択", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.sourceFieldLabel": "ソースフィールド", - "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.defaultValue": "これは自動的に作成されます", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.helpText": "この名前は、ソースフィールドに基づいて自動的に作成されます。", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.label": "ターゲットフィールド(任意)", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetFieldLabel": "ターゲットフィールド", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index ad863e29342aa2..a25740e041d4a5 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -13609,7 +13609,6 @@ "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.sourceField.helpText": "选择现有字段或键入字段名称。", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.sourceField.placeholder": "选择架构字段", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.sourceFieldLabel": "源字段", - "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.defaultValue": "这是自动创建的内容", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.helpText": "此名称基于您的源字段自动创建。", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetField.label": "目标字段(可选)", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.targetFieldLabel": "目标字段", From a3c0914dae4eb447aa6be235fff3b2fde9725400 Mon Sep 17 00:00:00 2001 From: "Quynh Nguyen (Quinn)" <43350163+qn895@users.noreply.github.com> Date: Thu, 27 Jul 2023 10:52:54 -0500 Subject: [PATCH 41/58] [ML] Unskip Data frame analytics feature importance tests (#162601) --- .../feature_importance/decision_path_classification.tsx | 4 +++- .../apps/ml/data_frame_analytics/results_view_content.ts | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/feature_importance/decision_path_classification.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/feature_importance/decision_path_classification.tsx index 58cea7e80f6b09..831839675591dd 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/feature_importance/decision_path_classification.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/feature_importance/decision_path_classification.tsx @@ -41,7 +41,9 @@ export const ClassificationDecisionPath: FC = ( baseline, }) => { const [currentClass, setCurrentClass] = useState( - getStringBasedClassName(topClasses[0].class_name) + Array.isArray(topClasses) && topClasses.length > 0 + ? getStringBasedClassName(topClasses[0].class_name) + : '' ); const selectedClass = topClasses.find( (t) => getStringBasedClassName(t.class_name) === getStringBasedClassName(currentClass) diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/results_view_content.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/results_view_content.ts index 1e34a577f34a7e..77cae02f3cfcbe 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/results_view_content.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/results_view_content.ts @@ -268,8 +268,7 @@ export default function ({ getService }: FtrProviderContext) { }); for (const testData of testDataList) { - // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/162427 - describe.skip(`${testData.suiteTitle}`, function () { + describe(`${testData.suiteTitle}`, function () { before(async () => { await ml.navigation.navigateToMl(); await ml.navigation.navigateToDataFrameAnalytics(); From b867d42f84194685d1d262fd54f1b4866a8d7bdf Mon Sep 17 00:00:00 2001 From: Adam Demjen Date: Thu, 27 Jul 2023 14:04:47 -0400 Subject: [PATCH 42/58] [Enterprise Search] Update ML inference field config UI (#162598) ## Summary Minor updates to ML inference multi-field configuration UI (no functional changes): - Add spacer between field selector and selected field list - Rename labels - ~Remove "Actions" label (since there's only a single action)~ ![Screenshot 2023-07-26 at 17 08 28](https://github.com/elastic/kibana/assets/14224983/48505ac1-69f3-4c89-960b-68bb510ed830) --- .../pipelines/ml_inference/configure_fields.tsx | 9 ++++++++- .../pipelines/ml_inference/multi_field_selector.test.tsx | 6 +++++- .../pipelines/ml_inference/multi_field_selector.tsx | 4 ++-- .../pipelines/ml_inference/single_field_selector.tsx | 2 +- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/configure_fields.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/configure_fields.tsx index db6f5476757ab3..c84266cc6cc032 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/configure_fields.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/configure_fields.tsx @@ -77,7 +77,14 @@ export const ConfigureFields: React.FC = () => { {isTextExpansionModelSelected ? ( <> - {areInputsDisabled || } + {areInputsDisabled ? ( + <> + ) : ( + <> + + + + )} ) : ( diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.test.tsx index f9413dd57023e8..4eb8bb7eb1829a 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.test.tsx @@ -180,6 +180,10 @@ describe('SelectedFieldMappings', () => { expect(wrapper.find(EuiBasicTable)).toHaveLength(1); const table = wrapper.find(EuiBasicTable); - expect(table.prop('columns').map((c) => c.name)).toEqual(['Source field', '', 'Target field']); + expect(table.prop('columns').map((c) => c.name)).toEqual([ + 'Source text field', + '', + 'Target field', + ]); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.tsx index 49d0a7be8fd86d..1ab912ae9d6135 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/multi_field_selector.tsx @@ -143,7 +143,7 @@ export const MultiFieldMapping: React.FC = () => { label={i18n.translate( 'xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.sourceFieldLabel', { - defaultMessage: 'Source field', + defaultMessage: 'Source text field', } )} helpText={i18n.translate( @@ -233,7 +233,7 @@ export const SelectedFieldMappings: React.FC = ({ is name: i18n.translate( 'xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.fieldMappings.sourceFieldHeader', { - defaultMessage: 'Source field', + defaultMessage: 'Source text field', } ), }, diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/single_field_selector.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/single_field_selector.tsx index 9cc4e77cbba5d1..354db83afbc341 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/single_field_selector.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/single_field_selector.tsx @@ -68,7 +68,7 @@ export const SingleFieldMapping: React.FC = () => { label={i18n.translate( 'xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.fields.sourceFieldLabel', { - defaultMessage: 'Source field', + defaultMessage: 'Source text field', } )} error={isEmptySourceFields && } From 614044bff53d4770e1a51923d2fe73a522eba3ca Mon Sep 17 00:00:00 2001 From: Jeramy Soucy Date: Thu, 27 Jul 2023 14:25:26 -0400 Subject: [PATCH 43/58] Fixes serverless common API security response headers API tests (#162655) Unblocks #162149 ## Summary Fixes serverless security response headers tests by using the internal request header. This PR also opts to use the `/logout` redirect endpoint in testing, as it is more relevant to serverless. --- .../test_suites/common/security_response_headers.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/x-pack/test_serverless/api_integration/test_suites/common/security_response_headers.ts b/x-pack/test_serverless/api_integration/test_suites/common/security_response_headers.ts index 2601e1cfed75f7..47f541184a37c0 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/security_response_headers.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/security_response_headers.ts @@ -25,7 +25,7 @@ export default function ({ getService }: FtrProviderContext) { it('API endpoint response contains default security headers', async () => { const { header } = await supertest .get(`/internal/security/me`) - .set(svlCommonApi.getCommonRequestHeader()) + .set(svlCommonApi.getInternalRequestHeader()) .expect(200); expect(header).toBeDefined(); @@ -40,9 +40,9 @@ export default function ({ getService }: FtrProviderContext) { it('redirect endpoint response contains default security headers', async () => { const { header } = await supertest - .get(`/login`) + .get(`/logout`) .set(svlCommonApi.getCommonRequestHeader()) - .expect(302); + .expect(200); expect(header).toBeDefined(); expect(header['content-security-policy']).toEqual(defaultCSP); From 5f913066a968f3075c010184e6829b1d4784a008 Mon Sep 17 00:00:00 2001 From: Ievgen Sorokopud Date: Thu, 27 Jul 2023 20:41:16 +0200 Subject: [PATCH 44/58] [Security Solution] Fix Accessibility Tests (#162143) ## Summary This PR un-skips security solution a11y tests. There were four main issues fixes: 1. All list items (`li`) must be contained within `ul` or `ol` parent elements: https://dequeuniversity.com/rules/axe/4.6/listitem?application=axeAPI 2. Lists must be marked up correctly, meaning they must not contain content elements other than `li` elements: https://dequeuniversity.com/rules/axe/4.6/list?application=axeAPI 3. Ensures elements marked `role="img"` elements have alternate text: https://dequeuniversity.com/rules/axe/4.6/role-img-alt?application=axeAPI 4. Each `select` element must have a programmatically associated label element: https://dequeuniversity.com/rules/axe/4.6/select-name?application=axeAPI Fixes next tests: 1. https://github.com/elastic/kibana/issues/95707 2. https://github.com/elastic/kibana/issues/101923 --- .../side_nav/src/solution_side_nav.tsx | 59 +++++++++---------- .../rules/schedule_item_form/index.tsx | 1 + .../components/rules/status_icon/index.tsx | 2 +- .../accessibility/apps/security_solution.ts | 3 +- .../page_objects/detections/index.ts | 2 +- 5 files changed, 33 insertions(+), 34 deletions(-) diff --git a/x-pack/packages/security-solution/side_nav/src/solution_side_nav.tsx b/x-pack/packages/security-solution/side_nav/src/solution_side_nav.tsx index f9ac3ab3d8ade1..dfae8526603325 100644 --- a/x-pack/packages/security-solution/side_nav/src/solution_side_nav.tsx +++ b/x-pack/packages/security-solution/side_nav/src/solution_side_nav.tsx @@ -106,28 +106,25 @@ export const SolutionSideNav: React.FC = React.memo(functi - - - - + + + - - - + @@ -284,16 +281,18 @@ const SolutionSideNavItem: React.FC = React.memo( <> - + + + {hasPanelNav && ( diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/schedule_item_form/index.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/schedule_item_form/index.tsx index 4da7f038cf6549..4dbbf1f3a9206a 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/schedule_item_form/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/schedule_item_form/index.tsx @@ -179,6 +179,7 @@ export const ScheduleItem = ({ options={timeTypeOptions.filter((type) => timeTypes.includes(type.value))} onChange={onChangeTimeType} value={timeType} + aria-label={field.label} data-test-subj="timeType" {...rest} /> diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/status_icon/index.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/status_icon/index.tsx index b52d317a6ce82d..6afb5c25604038 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/status_icon/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/status_icon/index.tsx @@ -31,7 +31,7 @@ const RuleStatusIconComponent: React.FC = ({ name, type }) const color = type === 'passive' ? theme.euiColorLightestShade : theme.euiColorPrimary; return ( - + {type === 'valid' ? : null} ); diff --git a/x-pack/test/accessibility/apps/security_solution.ts b/x-pack/test/accessibility/apps/security_solution.ts index ef930f093eb4a1..ba7d22fd2d39db 100644 --- a/x-pack/test/accessibility/apps/security_solution.ts +++ b/x-pack/test/accessibility/apps/security_solution.ts @@ -14,8 +14,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const toasts = getService('toasts'); const testSubjects = getService('testSubjects'); - // FLAKY: https://github.com/elastic/kibana/issues/95707 - describe.skip('Security Solution Accessibility', () => { + describe('Security Solution Accessibility', () => { before(async () => { await security.testUser.setRoles(['superuser'], { skipBrowserRefresh: true }); await common.navigateToApp('security'); diff --git a/x-pack/test/security_solution_ftr/page_objects/detections/index.ts b/x-pack/test/security_solution_ftr/page_objects/detections/index.ts index 9d5abd2631be1d..a8ff43a8e06bfc 100644 --- a/x-pack/test/security_solution_ftr/page_objects/detections/index.ts +++ b/x-pack/test/security_solution_ftr/page_objects/detections/index.ts @@ -121,7 +121,7 @@ export class DetectionsPageObject extends FtrService { async preview(): Promise { await this.common.clickAndValidate( - 'queryPreviewButton', + 'previewSubmitButton', 'queryPreviewCustomHistogram', undefined, 500 From 1c42ee97206d94b709916e3c34e3fa75526a8f79 Mon Sep 17 00:00:00 2001 From: Tomasz Kajtoch Date: Thu, 27 Jul 2023 20:47:18 +0200 Subject: [PATCH 45/58] Upgrade @elastic/eui to 85.0.1 (#162209) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary `eui@84.0.0` ⏩ `eui@85.0.1` ## [`85.0.1`](https://github.com/elastic/eui/tree/v85.0.1) **Bug fixes** - Fixed `EuiFilterGroup`'s responsive styles ([#6983](https://github.com/elastic/eui/pull/6983)) ## [`85.0.0`](https://github.com/elastic/eui/tree/v85.0.0) - Updated `EuiThemeProvider` to set an Emotion theme context that returns the values of `useEuiTheme()` ([#6913](https://github.com/elastic/eui/pull/6913)) - Added `size` prop to `EuiStepsHorizontal`, defaulting to the previous size of `m` ([#6928](https://github.com/elastic/eui/pull/6928)) - Added new `s` sizing to `EuiStepsHorizontal` ([#6928](https://github.com/elastic/eui/pull/6928)) - Added `at` and `key` icon glyphs. ([#6934](https://github.com/elastic/eui/pull/6934)) - Added a new `cloneElementWithCss` Emotion utility ([#6939](https://github.com/elastic/eui/pull/6939)) - Updated `EuiPopover` to allow consumer control of all `focusTrapProps` ([#6955](https://github.com/elastic/eui/pull/6955)) **Bug fixes** - Fixed `EuiDataGrid` height calculation bug when browser zoom levels are not 100% ([#6895](https://github.com/elastic/eui/pull/6895)) - Fixed `EuiTab` not correctly passing selection color state to `prepend` and `append` children ([#6938](https://github.com/elastic/eui/pull/6938)) - Fixed `EuiInputPopover` to allow consumer control of its focus trap via `focusTrapProps` ([#6955](https://github.com/elastic/eui/pull/6955)) **Breaking changes** - `EuiProvider` will no longer render multiple or duplicate nested instances of itself. If a nested `EuiProvider` is detected, that instance will return early without further processing, and will warn if configured to do so via `setEuiDevProviderWarning`. For nested theming, use `EuiThemeProvider` instead. ([#6949](https://github.com/elastic/eui/pull/6949)) - Removed `onTrapDeactivation` prop from `EuiPopover`. Use `focusTrapProps.onDeactivation` instead ([#6955](https://github.com/elastic/eui/pull/6955)) **CSS-in-JS conversions** - Converted `EuiFilterGroup` and `EuiFilterButton` to Emotion; Removed styles attached to `.euiFilterGroup__popoverPanel` ([#6957](https://github.com/elastic/eui/pull/6957)) --------- Co-authored-by: Cee Chen Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- package.json | 2 +- .../src/components/table_sort_select.tsx | 2 +- .../src/components/tag_filter_panel.tsx | 2 +- .../field_list_filters/field_type_filter.tsx | 12 ++++++-- src/dev/license_checker/config.ts | 2 +- .../field_picker/field_type_filter.scss | 1 + .../field_picker/field_type_filter.tsx | 2 +- .../finder/saved_object_finder.test.tsx | 4 +-- .../filter_activity.tsx | 1 + .../filters/groups_filter_popover.test.tsx | 2 +- .../filters/jobs_table_filters.test.tsx | 30 +++++++++++++++---- .../flow_direction_select.test.tsx | 2 +- .../components/open_timeline/index.test.tsx | 2 +- .../open_timeline/search_row/index.test.tsx | 2 +- .../event_log_list_status_filter.test.tsx | 2 +- .../components/rule_status_filter.test.tsx | 4 +-- .../es_deprecations.helpers.ts | 4 +-- .../kibana_deprecations.helpers.ts | 4 +-- .../filter_status_button.test.tsx.snap | 8 ++--- .../__snapshots__/status_filter.test.tsx.snap | 26 ++++++++-------- yarn.lock | 8 ++--- 21 files changed, 74 insertions(+), 48 deletions(-) diff --git a/package.json b/package.json index 3b1ee85678c9ee..58234e06565558 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.8.0-canary.2", "@elastic/ems-client": "8.4.0", - "@elastic/eui": "84.0.0", + "@elastic/eui": "85.0.1", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", diff --git a/packages/content-management/table_list_view_table/src/components/table_sort_select.tsx b/packages/content-management/table_list_view_table/src/components/table_sort_select.tsx index 37cc6fc9eea805..9140c8ac3bc327 100644 --- a/packages/content-management/table_list_view_table/src/components/table_sort_select.tsx +++ b/packages/content-management/table_list_view_table/src/components/table_sort_select.tsx @@ -160,7 +160,7 @@ export function TableSortSelect({ tableSort, hasUpdatedAtMetadata, onChange }: P closePopover={closePopover} panelPaddingSize="none" anchorPosition="downCenter" - panelClassName="euiFilterGroup__popoverPanel" + panelProps={{ css: { width: euiTheme.base * 18 } }} > <> {i18nText.headerSort} diff --git a/packages/content-management/table_list_view_table/src/components/tag_filter_panel.tsx b/packages/content-management/table_list_view_table/src/components/tag_filter_panel.tsx index 03439f9dec1612..c9871eb509d7e4 100644 --- a/packages/content-management/table_list_view_table/src/components/tag_filter_panel.tsx +++ b/packages/content-management/table_list_view_table/src/components/tag_filter_panel.tsx @@ -116,7 +116,7 @@ export const TagFilterPanel: FC = ({ closePopover={closePopover} panelPaddingSize="none" anchorPosition="downCenter" - panelClassName="euiFilterGroup__popoverPanel" + panelProps={{ css: { width: euiTheme.base * 18 } }} panelStyle={isInUse ? { transition: 'none' } : undefined} > diff --git a/packages/kbn-unified-field-list/src/components/field_list_filters/field_type_filter.tsx b/packages/kbn-unified-field-list/src/components/field_list_filters/field_type_filter.tsx index db98acad650139..1afe4bac5f0ba2 100644 --- a/packages/kbn-unified-field-list/src/components/field_list_filters/field_type_filter.tsx +++ b/packages/kbn-unified-field-list/src/components/field_list_filters/field_type_filter.tsx @@ -47,7 +47,8 @@ const popoverTitleStyle = css` padding: ${EQUAL_HEIGHT_OFFSET}px 0; `; const filterButtonStyle = css` - .euiFilterButton__textShift { + &, + & .euiFilterButton__textShift { min-width: 0; line-height: 1; } @@ -105,7 +106,12 @@ export function FieldTypeFilter({ const itemStyle = useMemo( () => css` font-size: ${euiTheme.size.m}; - padding: ${euiTheme.size.s} ${euiTheme.size.m}; + + // Specificity needed to override Sass styles + // EUI TODO: Remove this selector once EuiContextMenu has been converted to Emotion + &.euiContextMenuItem { + padding: ${euiTheme.size.s} ${euiTheme.size.m}; + } & + & { border-top: 1px solid ${euiTheme.colors.lightestShade}; @@ -149,7 +155,7 @@ export function FieldTypeFilter({ return ( {}} isDisabled={!isPopoverOpen}> { wrapper.instance().componentDidMount!(); await nextTick(); expect(wrapper.find('button.euiFilterButton')).toHaveLength(2); - expect(wrapper.find('button.euiFilterButton [data-text="Types"]')).toHaveLength(1); - expect(wrapper.find('button.euiFilterButton [data-text="Tags"]')).toHaveLength(1); + expect(wrapper.find('button.euiFilterButton span[data-text="Types"]')).toHaveLength(1); + expect(wrapper.find('button.euiFilterButton span[data-text="Tags"]')).toHaveLength(1); }); it('should not render filter buttons if disabled', async () => { diff --git a/x-pack/plugins/cases/public/components/user_actions_activity_bar/filter_activity.tsx b/x-pack/plugins/cases/public/components/user_actions_activity_bar/filter_activity.tsx index ba95479ae6107d..f3730a24cbad83 100644 --- a/x-pack/plugins/cases/public/components/user_actions_activity_bar/filter_activity.tsx +++ b/x-pack/plugins/cases/public/components/user_actions_activity_bar/filter_activity.tsx @@ -27,6 +27,7 @@ const MyEuiFilterGroup = styled(EuiFilterGroup)` `; const FilterAllButton = styled(EuiFilterButton)` + &, & .euiFilterButton__textShift { min-width: 28px; } diff --git a/x-pack/plugins/security_solution/public/common/components/ml_popover/jobs_table/filters/groups_filter_popover.test.tsx b/x-pack/plugins/security_solution/public/common/components/ml_popover/jobs_table/filters/groups_filter_popover.test.tsx index 403d48c38850e4..1e10ab18b5783e 100644 --- a/x-pack/plugins/security_solution/public/common/components/ml_popover/jobs_table/filters/groups_filter_popover.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/ml_popover/jobs_table/filters/groups_filter_popover.test.tsx @@ -38,7 +38,7 @@ describe('GroupsFilterPopover', () => { /> ); - wrapper.find('[data-test-subj="groups-filter-popover-button"]').first().simulate('click'); + wrapper.find('button[data-test-subj="groups-filter-popover-button"]').first().simulate('click'); wrapper.update(); wrapper.find('EuiFilterSelectItem').first().simulate('click'); diff --git a/x-pack/plugins/security_solution/public/common/components/ml_popover/jobs_table/filters/jobs_table_filters.test.tsx b/x-pack/plugins/security_solution/public/common/components/ml_popover/jobs_table/filters/jobs_table_filters.test.tsx index 6156a01c704852..bf367a8c57e41e 100644 --- a/x-pack/plugins/security_solution/public/common/components/ml_popover/jobs_table/filters/jobs_table_filters.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/ml_popover/jobs_table/filters/jobs_table_filters.test.tsx @@ -25,7 +25,10 @@ describe('JobsTableFilters', () => { ); - wrapper.find('[data-test-subj="show-elastic-jobs-filter-button"]').first().simulate('click'); + wrapper + .find('button[data-test-subj="show-elastic-jobs-filter-button"]') + .first() + .simulate('click'); wrapper.update(); expect( @@ -42,7 +45,10 @@ describe('JobsTableFilters', () => { ); - wrapper.find('[data-test-subj="show-custom-jobs-filter-button"]').first().simulate('click'); + wrapper + .find('button[data-test-subj="show-custom-jobs-filter-button"]') + .first() + .simulate('click'); wrapper.update(); expect( @@ -59,10 +65,16 @@ describe('JobsTableFilters', () => { ); - wrapper.find('[data-test-subj="show-custom-jobs-filter-button"]').first().simulate('click'); + wrapper + .find('button[data-test-subj="show-custom-jobs-filter-button"]') + .first() + .simulate('click'); wrapper.update(); - wrapper.find('[data-test-subj="show-elastic-jobs-filter-button"]').first().simulate('click'); + wrapper + .find('button[data-test-subj="show-elastic-jobs-filter-button"]') + .first() + .simulate('click'); wrapper.update(); expect( @@ -85,10 +97,16 @@ describe('JobsTableFilters', () => { ); - wrapper.find('[data-test-subj="show-custom-jobs-filter-button"]').first().simulate('click'); + wrapper + .find('button[data-test-subj="show-custom-jobs-filter-button"]') + .first() + .simulate('click'); wrapper.update(); - wrapper.find('[data-test-subj="show-custom-jobs-filter-button"]').first().simulate('click'); + wrapper + .find('button[data-test-subj="show-custom-jobs-filter-button"]') + .first() + .simulate('click'); wrapper.update(); expect( diff --git a/x-pack/plugins/security_solution/public/explore/network/components/flow_controls/flow_direction_select.test.tsx b/x-pack/plugins/security_solution/public/explore/network/components/flow_controls/flow_direction_select.test.tsx index 57d31bd2a03e5c..1899c3ae33cc3c 100644 --- a/x-pack/plugins/security_solution/public/explore/network/components/flow_controls/flow_direction_select.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/components/flow_controls/flow_direction_select.test.tsx @@ -44,7 +44,7 @@ describe('Select Flow Direction', () => { ); wrapper - .find(`[data-test-subj="${FlowDirection.biDirectional}"]`) + .find(`button[data-test-subj="${FlowDirection.biDirectional}"]`) .first() .simulate('click', event); wrapper.update(); diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.test.tsx index 62f1445529066e..471561d6eeb0e8 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.test.tsx @@ -472,7 +472,7 @@ describe('StatefulOpenTimeline', () => { false ); - wrapper.find('[data-test-subj="only-favorites-toggle"]').first().simulate('click'); + wrapper.find('button[data-test-subj="only-favorites-toggle"]').first().simulate('click'); expect(wrapper.find('[data-test-subj="open-timeline"]').last().prop('onlyFavorites')).toEqual( true diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/search_row/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/search_row/index.test.tsx index 3b0f2cc4ad7c0a..e7bda4a5b79b98 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/search_row/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/search_row/index.test.tsx @@ -77,7 +77,7 @@ describe('SearchRow', () => { ); - wrapper.find('[data-test-subj="only-favorites-toggle"]').first().simulate('click'); + wrapper.find('button[data-test-subj="only-favorites-toggle"]').first().simulate('click'); expect(onToggleOnlyFavorites).toHaveBeenCalled(); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/event_log/event_log_list_status_filter.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/event_log/event_log_list_status_filter.test.tsx index d3e8b38a8a557b..df1cb6b7a1e2c3 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/event_log/event_log_list_status_filter.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/event_log/event_log_list_status_filter.test.tsx @@ -42,7 +42,7 @@ describe('event_log_list_status_filter', () => { ); - wrapper.find(EuiFilterButton).simulate('click'); + wrapper.find(EuiFilterButton).find('button').simulate('click'); const statusItems = wrapper.find(EuiFilterSelectItem); expect(statusItems.length).toEqual(4); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_filter.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_filter.test.tsx index 27eddb21177cd1..7221736830917a 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_filter.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_filter.test.tsx @@ -35,7 +35,7 @@ describe('RuleStatusFilter', () => { expect(wrapper.find('[data-test-subj="ruleStateFilterSelect"]').exists()).toBeFalsy(); - wrapper.find(EuiFilterButton).simulate('click'); + wrapper.find(EuiFilterButton).find('button').simulate('click'); const statusItems = wrapper.find(EuiSelectableListItem); expect(statusItems.length).toEqual(3); @@ -46,7 +46,7 @@ describe('RuleStatusFilter', () => { ); - wrapper.find(EuiFilterButton).simulate('click'); + wrapper.find(EuiFilterButton).find('button').simulate('click'); wrapper.find(EuiSelectableListItem).at(0).simulate('click'); expect(onChangeMock).toHaveBeenCalledWith(['enabled']); diff --git a/x-pack/plugins/upgrade_assistant/__jest__/client_integration/es_deprecations/es_deprecations.helpers.ts b/x-pack/plugins/upgrade_assistant/__jest__/client_integration/es_deprecations/es_deprecations.helpers.ts index e6e87087ed55d7..87f022fc4f47b0 100644 --- a/x-pack/plugins/upgrade_assistant/__jest__/client_integration/es_deprecations/es_deprecations.helpers.ts +++ b/x-pack/plugins/upgrade_assistant/__jest__/client_integration/es_deprecations/es_deprecations.helpers.ts @@ -56,7 +56,7 @@ const createActions = (testBed: TestBed) => { // EUI doesn't support data-test-subj's on the filter buttons, so we must access via CSS selector find('searchBarContainer') .find('.euiPopover') - .find('.euiFilterButton') + .find('button.euiFilterButton') .at(index) .simulate('click'); }); @@ -75,7 +75,7 @@ const createActions = (testBed: TestBed) => { clickCriticalFilterButton: async () => { await act(async () => { // EUI doesn't support data-test-subj's on the filter buttons, so we must access via CSS selector - find('searchBarContainer').find('.euiFilterButton').at(0).simulate('click'); + find('searchBarContainer').find('button.euiFilterButton').at(0).simulate('click'); }); component.update(); diff --git a/x-pack/plugins/upgrade_assistant/__jest__/client_integration/kibana_deprecations/kibana_deprecations.helpers.ts b/x-pack/plugins/upgrade_assistant/__jest__/client_integration/kibana_deprecations/kibana_deprecations.helpers.ts index 8899212ca341c3..adf24716ca9323 100644 --- a/x-pack/plugins/upgrade_assistant/__jest__/client_integration/kibana_deprecations/kibana_deprecations.helpers.ts +++ b/x-pack/plugins/upgrade_assistant/__jest__/client_integration/kibana_deprecations/kibana_deprecations.helpers.ts @@ -64,7 +64,7 @@ const createActions = (testBed: TestBed) => { find('kibanaDeprecations') .find('.euiSearchBar__filtersHolder') .find('.euiPopover') - .find('.euiFilterButton') + .find('button.euiFilterButton') .at(0) .simulate('click'); }); @@ -77,7 +77,7 @@ const createActions = (testBed: TestBed) => { // EUI doesn't support data-test-subj's on the filter buttons, so we must access via CSS selector find('kibanaDeprecations') .find('.euiSearchBar__filtersHolder') - .find('.euiFilterButton') + .find('button.euiFilterButton') .at(0) .simulate('click'); }); diff --git a/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/filter_status_button.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/filter_status_button.test.tsx.snap index f71c1d6885b996..e0aaefdf9d5496 100644 --- a/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/filter_status_button.test.tsx.snap +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/filter_status_button.test.tsx.snap @@ -2,18 +2,18 @@ exports[`FilterStatusButton renders without errors for valid props 1`] = `