From ccb36d929a2514dfce82534471455480e335e206 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Wed, 12 Jul 2023 17:19:00 +0200 Subject: [PATCH 01/50] [APM] Fix broken unit tests (#161636) A bunch of APM unit tests were passing on CI but failing locally. This PR fixes the unit tests **Why fail locally and pass on CI??** The reason they pass on CI is because `console.error` calls are omitted. In the APM jest config `console.error` is treated as a test failure: https://github.com/elastic/kibana/blob/7ea0dd6b116a93024d68ea2d93fa4ce90e9bf189/x-pack/plugins/apm/jest_setup.js#L12-L15 --- .../error_count_rule_type/index.stories.tsx | 13 ++++++++----- .../components/app/service_map/index.test.tsx | 5 +++-- .../transaction_overview.test.tsx | 10 ++++++---- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/x-pack/plugins/apm/public/components/alerting/rule_types/error_count_rule_type/index.stories.tsx b/x-pack/plugins/apm/public/components/alerting/rule_types/error_count_rule_type/index.stories.tsx index 424e490b732b1..ddcae65209f67 100644 --- a/x-pack/plugins/apm/public/components/alerting/rule_types/error_count_rule_type/index.stories.tsx +++ b/x-pack/plugins/apm/public/components/alerting/rule_types/error_count_rule_type/index.stories.tsx @@ -10,6 +10,7 @@ import React, { useState } from 'react'; import { CoreStart } from '@kbn/core/public'; import { createKibanaReactContext } from '@kbn/kibana-react-plugin/public'; import { TIME_UNITS } from '@kbn/triggers-actions-ui-plugin/public'; +import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { RuleParams, ErrorCountRuleType } from '.'; import { ENVIRONMENT_ALL } from '../../../../../common/environment_filter_values'; import { createCallApmApi } from '../../../../services/rest/create_call_apm_api'; @@ -36,11 +37,13 @@ const stories: Meta<{}> = { createCallApmApi(coreMock); return ( - -
- -
-
+ + +
+ +
+
+
); }, ], diff --git a/x-pack/plugins/apm/public/components/app/service_map/index.test.tsx b/x-pack/plugins/apm/public/components/app/service_map/index.test.tsx index b844ff2cff098..2fe42bd7692bd 100644 --- a/x-pack/plugins/apm/public/components/app/service_map/index.test.tsx +++ b/x-pack/plugins/apm/public/components/app/service_map/index.test.tsx @@ -6,7 +6,7 @@ */ import { render } from '@testing-library/react'; -import { createMemoryHistory } from 'history'; +import { createMemoryHistory, MemoryHistory } from 'history'; import { CoreStart } from '@kbn/core/public'; import React, { ReactNode } from 'react'; import { createKibanaReactContext } from '@kbn/kibana-react-plugin/public'; @@ -18,7 +18,7 @@ import * as useFetcherModule from '../../../hooks/use_fetcher'; import { ServiceMap } from '.'; import { ENVIRONMENT_ALL } from '../../../../common/environment_filter_values'; -const history = createMemoryHistory(); +let history: MemoryHistory; const KibanaReactContext = createKibanaReactContext({ usageCollection: { reportUiCounter: () => {} }, @@ -47,6 +47,7 @@ const expiredLicense = new License({ }); function createWrapper(license: License | null) { + history = createMemoryHistory(); history.replace('/service-map?rangeFrom=now-15m&rangeTo=now'); return ({ children }: { children?: ReactNode }) => { diff --git a/x-pack/plugins/apm/public/components/app/transaction_overview/transaction_overview.test.tsx b/x-pack/plugins/apm/public/components/app/transaction_overview/transaction_overview.test.tsx index bf144507ce867..79db66bcb5d43 100644 --- a/x-pack/plugins/apm/public/components/app/transaction_overview/transaction_overview.test.tsx +++ b/x-pack/plugins/apm/public/components/app/transaction_overview/transaction_overview.test.tsx @@ -6,7 +6,7 @@ */ import { queryByLabelText } from '@testing-library/react'; -import { createMemoryHistory } from 'history'; +import { createMemoryHistory, MemoryHistory } from 'history'; import { CoreStart } from '@kbn/core/public'; import React from 'react'; import { createKibanaReactContext } from '@kbn/kibana-react-plugin/public'; @@ -32,9 +32,7 @@ const KibanaReactContext = createKibanaReactContext({ usageCollection: { reportUiCounter: () => {} }, } as unknown as Partial); -const history = createMemoryHistory(); -jest.spyOn(history, 'push'); -jest.spyOn(history, 'replace'); +let history: MemoryHistory; function setup({ urlParams, @@ -43,6 +41,10 @@ function setup({ urlParams: ApmUrlParams; serviceTransactionTypes: string[]; }) { + history = createMemoryHistory(); + jest.spyOn(history, 'push'); + jest.spyOn(history, 'replace'); + history.replace({ pathname: '/services/foo/transactions', search: fromQuery(urlParams), From 130e9deea59a326e1e0d40827ad7a0bc401a3d27 Mon Sep 17 00:00:00 2001 From: Wafaa Nasr Date: Wed, 12 Jul 2023 16:50:02 +0100 Subject: [PATCH 02/50] [Security Solution] Fixing exceptions flyout is not auto filled with all highlighted fields listed on Alert details page (#161673) ## Summary - Addresses https://github.com/elastic/kibana/issues/161460 - Exclude `agent.id` in case the Alert's `agent.type` is not `endpoint` - Handle Alert `event.category` array field ex. `[process]` - For the `Threshold Rule` there are two additional fields the Alert Summary populates the `Event Count` and the `Event Cardinality` which can be ignored as they are not relevant to the Rule exception ![image](https://github.com/elastic/kibana/assets/12671903/8972a647-6490-4d54-8af8-54f90d4ac438) ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../rule_exceptions/utils/helpers.test.tsx | 43 +++++++++++++++++-- .../rule_exceptions/utils/helpers.tsx | 33 ++++++++++++-- .../utils/highlighted_fields_config.ts | 4 ++ 3 files changed, 73 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/helpers.test.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/helpers.test.tsx index 26534402400ea..509133110554f 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/helpers.test.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/helpers.test.tsx @@ -51,6 +51,7 @@ import { ALERT_ORIGINAL_EVENT_KIND, ALERT_ORIGINAL_EVENT_MODULE, } from '../../../../common/field_maps/field_names'; +import { AGENT_ID } from './highlighted_fields_config'; jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('123'), })); @@ -1528,6 +1529,7 @@ describe('Exception helpers', () => { 'event.category': 'malware', 'event.type': 'creation', 'event.dataset': 'endpoint', + 'kibana.alert.rule.uuid': '123', 'kibana.alert.rule.exceptions_list': [ { id: 'endpoint_list', @@ -1714,17 +1716,18 @@ describe('Exception helpers', () => { describe('filterHighlightedFields', () => { const prefixesToExclude = ['agent', 'cloud']; it('should not filter any field if no prefixes passed ', () => { - const filteredFields = filterHighlightedFields(expectedHighlightedFields, []); + const filteredFields = filterHighlightedFields(expectedHighlightedFields, [], alertData); expect(filteredFields).toEqual(expectedHighlightedFields); }); it('should not filter any field if no fields passed ', () => { - const filteredFields = filterHighlightedFields([], prefixesToExclude); + const filteredFields = filterHighlightedFields([], prefixesToExclude, alertData); expect(filteredFields).toEqual([]); }); it('should filter out the passed prefixes successfully', () => { const filteredFields = filterHighlightedFields( expectedHighlightedFields, - prefixesToExclude + prefixesToExclude, + alertData ); expect(filteredFields).not.toEqual( expect.arrayContaining([ @@ -1845,6 +1848,24 @@ describe('Exception helpers', () => { }, ]); }); + it('should return the process highlighted fields correctly when eventCategory is an array', () => { + const alertDataEventCategoryProcessArray = { ...alertData, 'event.category': ['process'] }; + const res = getAlertHighlightedFields(alertDataEventCategoryProcessArray); + expect(res).not.toEqual( + expect.arrayContaining([ + { id: 'file.name' }, + { id: 'file.hash.sha256' }, + { id: 'file.directory' }, + ]) + ); + expect(res).toEqual( + expect.arrayContaining([ + { id: 'process.name' }, + { id: 'process.parent.name' }, + { id: 'process.args' }, + ]) + ); + }); it('should return all highlighted fields even when the "kibana.alert.rule.type" is not in the alertData', () => { const alertDataWithoutEventCategory = { ...alertData, 'kibana.alert.rule.type': null }; const res = getAlertHighlightedFields(alertDataWithoutEventCategory); @@ -1856,6 +1877,22 @@ describe('Exception helpers', () => { const res = getAlertHighlightedFields(alertData); expect(res).toEqual(allHighlightFields); }); + it('should exclude the "agent.id" from highlighted fields when agent.type is not "endpoint"', () => { + jest.mock('./highlighted_fields_config', () => ({ highlightedFieldsPrefixToExclude: [] })); + + const alertDataWithoutAgentType = { ...alertData, agent: { ...alertData.agent, type: '' } }; + const res = getAlertHighlightedFields(alertDataWithoutAgentType); + + expect(res).toEqual(allHighlightFields.filter((field) => field.id !== AGENT_ID)); + }); + it('should exclude the "agent.id" from highlighted fields when "kibana.alert.rule.uuid" is not part of the alertData', () => { + jest.mock('./highlighted_fields_config', () => ({ highlightedFieldsPrefixToExclude: [] })); + + const alertDataWithoutRuleUUID = { ...alertData, 'kibana.alert.rule.uuid': '' }; + const res = getAlertHighlightedFields(alertDataWithoutRuleUUID); + + expect(res).toEqual(allHighlightFields.filter((field) => field.id !== AGENT_ID)); + }); }); describe('getPrepopulatedRuleExceptionWithHighlightFields', () => { it('should not create any exception and return null if there are no highlighted fields', () => { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/helpers.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/helpers.tsx index 396714258cd33..6104379845e2f 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/helpers.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/helpers.tsx @@ -59,6 +59,10 @@ import { getKibanaAlertIdField, highlightedFieldsPrefixToExclude, KIBANA_ALERT_RULE_TYPE, + AGENT_ID, + AGENT_TYPE, + KIBANA_ALERT_RULE_UUID, + ENDPOINT_ALERT, } from './highlighted_fields_config'; export const filterIndexPatterns = ( @@ -958,13 +962,19 @@ export const getPrepopulatedRuleExceptionWithHighlightFields = ({ /** Filters out the irrelevant highlighted fields for Rule exceptions using - the "highlightedFieldsPrefixToExclude" array. + 1. The "highlightedFieldsPrefixToExclude" array + 2. Agent.id field in case the alert was not generated from Endpoint + 3. Threshold Rule */ export const filterHighlightedFields = ( fields: EventSummaryField[], - prefixesToExclude: string[] + prefixesToExclude: string[], + alertData: AlertData ): EventSummaryField[] => { return fields.filter(({ id }) => { + // Exclude agent.id field only if the agent type was not Endpoint + if (id === AGENT_ID) return isAlertFromEndpointEvent(alertData); + return !prefixesToExclude.some((field: string) => id.startsWith(field)); }); }; @@ -974,6 +984,7 @@ export const filterHighlightedFields = ( * * event.category * * event.code * * kibana.alert.rule.type + * * Alert field ids filters * @param alertData The Alert data object */ export const getAlertHighlightedFields = (alertData: AlertData): EventSummaryField[] => { @@ -982,7 +993,7 @@ export const getAlertHighlightedFields = (alertData: AlertData): EventSummaryFie const eventRuleType = get(alertData, KIBANA_ALERT_RULE_TYPE); const eventCategories = { - primaryEventCategory: eventCategory, + primaryEventCategory: Array.isArray(eventCategory) ? eventCategory[0] : eventCategory, allEventCategories: [eventCategory], }; @@ -991,5 +1002,19 @@ export const getAlertHighlightedFields = (alertData: AlertData): EventSummaryFie eventCode, eventRuleType, }); - return filterHighlightedFields(fieldsToDisplay, highlightedFieldsPrefixToExclude); + return filterHighlightedFields(fieldsToDisplay, highlightedFieldsPrefixToExclude, alertData); +}; + +/** + * Checks to see if the given set of Timeline event detail items includes data that indicates its + * an endpoint Alert + */ +export const isAlertFromEndpointEvent = (alertData: AlertData) => { + // Check to see if a timeline event item is an Alert + const isTimelineEventItemAnAlert = get(alertData, KIBANA_ALERT_RULE_UUID); + if (!isTimelineEventItemAnAlert) return false; + + const agentTypes = get(alertData, AGENT_TYPE); + const agentType = Array.isArray(agentTypes) ? agentTypes[0] : agentTypes; + return agentType === ENDPOINT_ALERT; }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/highlighted_fields_config.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/highlighted_fields_config.ts index 58c6c14b355ed..d4456c534050c 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/highlighted_fields_config.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/highlighted_fields_config.ts @@ -18,3 +18,7 @@ export const getKibanaAlertIdField = (id: string) => `kibana.alert.${id}`; export const EVENT_CATEGORY = 'event.category'; export const EVENT_CODE = 'event.code'; export const KIBANA_ALERT_RULE_TYPE = 'kibana.alert.rule.type'; +export const AGENT_ID = 'agent.id'; +export const AGENT_TYPE = 'agent.type'; +export const KIBANA_ALERT_RULE_UUID = 'kibana.alert.rule.uuid'; +export const ENDPOINT_ALERT = 'endpoint'; From 7af4c38620cff7be57a4473f600d67a353835802 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 12 Jul 2023 12:04:22 -0400 Subject: [PATCH 03/50] skip failing test suite (#161557) --- x-pack/test/fleet_api_integration/apis/agents/upgrade.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/fleet_api_integration/apis/agents/upgrade.ts b/x-pack/test/fleet_api_integration/apis/agents/upgrade.ts index 0c31fd5d710cc..0e2ebf5c9c9cc 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/upgrade.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/upgrade.ts @@ -21,7 +21,8 @@ export default function (providerContext: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const supertestWithoutAuth = getService('supertestWithoutAuth'); - describe('fleet_upgrade_agent', () => { + // Failing: See https://github.com/elastic/kibana/issues/161557 + describe.skip('fleet_upgrade_agent', () => { skipIfNoDockerRegistry(providerContext); before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/agents'); From 78700f369186fe3298f56026d4be2e3f06d00f41 Mon Sep 17 00:00:00 2001 From: christineweng <18648970+christineweng@users.noreply.github.com> Date: Wed, 12 Jul 2023 11:37:14 -0500 Subject: [PATCH 04/50] [Security Solution] expandable flyout - open rule in new tab (#161708) ## Summary This PR updates the `View rule` button to open rule detail page in a new tab. This is option 1 of improving the UX experience on rules in expandable flyout ![image](https://github.com/elastic/kibana/assets/18648970/f7e94101-1524-475d-8aa7-7a7fec432457) --- ...ert_details_right_panel_overview_tab.cy.ts | 2 +- .../flyout/right/components/description.tsx | 13 +++---------- .../renderers/formatted_field_helpers.tsx | 19 ++++++++++++++----- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts index f570fb35e1e29..2f29461f5228f 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts @@ -100,7 +100,7 @@ describe( .within(() => { cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_NAVIGATE_TO_RULE_DETAILS_BUTTON) .should('be.visible') - .and('have.text', 'View rule'); + .and('contain.text', 'View rule'); }); cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_DETAILS) .should('be.visible') diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/description.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/description.tsx index 450f62d32079d..f8886f7d2f1f2 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/description.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/description.tsx @@ -5,12 +5,11 @@ * 2.0. */ -import { EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, EuiTitle, EuiIcon } from '@elastic/eui'; +import { EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui'; import type { VFC } from 'react'; import React, { useState, useMemo } from 'react'; import { css } from '@emotion/react'; import { isEmpty } from 'lodash'; -import styled from 'styled-components'; import { useRightPanelContext } from '../context'; import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; import { @@ -28,10 +27,6 @@ import { import { RenderRuleName } from '../../../timelines/components/timeline/body/renderers/formatted_field_helpers'; import { SIGNAL_RULE_NAME_FIELD_NAME } from '../../../timelines/components/timeline/body/renderers/constants'; -const StyledEuiIcon = styled(EuiIcon)` - margin-left: ${({ theme }) => theme.eui.euiSizeXS}; -`; - export interface DescriptionProps { /** * Boolean to allow the component to be expanded or collapsed on first render @@ -66,10 +61,8 @@ export const Description: VFC = ({ expanded = false }) => { isDraggable={false} linkValue={ruleId} value={VIEW_RULE_TEXT} - > - {VIEW_RULE_TEXT} - - + openInNewTab + /> ), [ruleName, ruleId, scopeId, eventId] diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field_helpers.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field_helpers.tsx index e6ef10ea72fe1..536a57fa5159a 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field_helpers.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field_helpers.tsx @@ -44,6 +44,7 @@ interface RenderRuleNameProps { isButton?: boolean; onClick?: () => void; linkValue: string | null | undefined; + openInNewTab?: boolean; truncate?: boolean; title?: string; value: string | number | null | undefined; @@ -61,6 +62,7 @@ export const RenderRuleName: React.FC = ({ isButton, onClick, linkValue, + openInNewTab = false, truncate, title, value, @@ -76,9 +78,10 @@ export const RenderRuleName: React.FC = ({ navigateToApp(APP_UI_ID, { deepLinkId: SecurityPageName.rules, path: getRuleDetailsUrl(ruleId ?? '', search), + openInNewTab, }); }, - [navigateToApp, ruleId, search] + [navigateToApp, ruleId, search, openInNewTab] ); const href = useMemo( @@ -121,16 +124,21 @@ export const RenderRuleName: React.FC = ({ {title ?? value} ); - } else if (children) { + } else if (openInNewTab) { return ( - - {children} + + {children ?? content} ); } else { return ( - {content} + {children ?? content} ); } @@ -146,6 +154,7 @@ export const RenderRuleName: React.FC = ({ title, truncate, value, + openInNewTab, ]); if (isString(value) && ruleName.length > 0 && ruleId != null) { From 7f3c9e8c811c0eff75a3d8d27ce337eeaddeded1 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 12 Jul 2023 09:56:57 -0700 Subject: [PATCH 05/50] [DOCS] Add rule.params to rule action variables (#161714) --- docs/user/alerting/action-variables.asciidoc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/user/alerting/action-variables.asciidoc b/docs/user/alerting/action-variables.asciidoc index 5e26dd874f67e..6fe275547004c 100644 --- a/docs/user/alerting/action-variables.asciidoc +++ b/docs/user/alerting/action-variables.asciidoc @@ -1,5 +1,9 @@ [[rule-action-variables]] == Rule action variables +:frontmatter-description: A summary of common variables for use in {kib} alerting rule actions. +:frontmatter-tags-products: [alerting] +:frontmatter-tags-content-type: [reference] +:frontmatter-tags-user-goals: [configure] Alerting rules can use the https://mustache.github.io/mustache.5.html[Mustache] template syntax (`{{variable name}}`) to pass values when the actions run. @@ -30,9 +34,10 @@ All rule types pass the following variables: `date`:: The date the rule scheduled the action, in ISO format. `kibanaBaseUrl`:: The configured <>. If not configured, this will be empty. -`rule.id`:: The ID of the rule. -`rule.name`:: The name of the rule. -`rule.spaceId`:: The ID of the space for the rule. +`rule.id`:: The rule identifier. +`rule.name`:: The rule name. +`rule.params`:: The rule parameters, which vary by rule type. +`rule.spaceId`:: The space identifier for the rule. `rule.tags`:: The list of tags applied to the rule. [float] From 8b72a32c138e9e6005fd5f70f632593d5369b136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loix?= Date: Wed, 12 Jul 2023 18:15:18 +0100 Subject: [PATCH 06/50] [Chrome left nav] Fix infinite loop (#161773) --- .../src/chrome_service.tsx | 9 +------- .../chrome/navigation/src/services.tsx | 6 +----- .../src/ui/components/navigation_group.tsx | 18 +++++++++++----- .../src/ui/components/navigation_item.tsx | 11 ++++++++-- .../ui/components/navigation_section_ui.tsx | 18 +++++++++------- .../src/ui/components/recently_accessed.tsx | 21 +++++++++++++------ 6 files changed, 49 insertions(+), 34 deletions(-) diff --git a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx index d8a855804d47d..1141438304ca9 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx @@ -267,9 +267,6 @@ export class ChromeService { const getHeaderComponent = () => { if (chromeStyle$.getValue() === 'project') { const projectNavigationComponent$ = projectNavigation.getProjectSideNavComponent$(); - const projectNavigation$ = projectNavigation - .getProjectNavigation$() - .pipe(takeUntil(this.stop$)); const projectBreadcrumbs$ = projectNavigation .getProjectBreadcrumbs$() .pipe(takeUntil(this.stop$)); @@ -279,11 +276,7 @@ export class ChromeService { const CustomSideNavComponent = useObservable(projectNavigationComponent$, undefined); const activeNodes = useObservable(activeNodes$, []); - const currentProjectNavigation = useObservable(projectNavigation$, undefined); - // TODO: remove this switch once security sets project navigation tree - const currentProjectBreadcrumbs$ = currentProjectNavigation - ? projectBreadcrumbs$ - : breadcrumbs$; + const currentProjectBreadcrumbs$ = projectBreadcrumbs$; let SideNavComponent: ISideNavComponent = () => null; diff --git a/packages/shared-ux/chrome/navigation/src/services.tsx b/packages/shared-ux/chrome/navigation/src/services.tsx index d9b7f3804db1b..f59365b21ead3 100644 --- a/packages/shared-ux/chrome/navigation/src/services.tsx +++ b/packages/shared-ux/chrome/navigation/src/services.tsx @@ -40,11 +40,7 @@ export const NavigationKibanaProvider: FC = ({ activeNodes$: serverless.getActiveNavigationNodes$(), }; - return ( - - {children} - - ); + return {children}; }; /** diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_group.tsx b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_group.tsx index dcfa47d92d641..eda309b3635b2 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_group.tsx +++ b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_group.tsx @@ -46,11 +46,19 @@ function NavigationGroupInternalComp< ChildrenId extends string = Id >(props: Props) { const navigationContext = useNavigation(); - const { children, defaultIsCollapsed, ...node } = props; - const { navNode, registerChildNode, path, childrenNodes } = useInitNavNode({ - ...node, - isActive: defaultIsCollapsed !== undefined ? defaultIsCollapsed === false : undefined, - }); + + const { children, node } = useMemo(() => { + const { children: _children, defaultIsCollapsed, ...rest } = props; + return { + children: _children, + node: { + ...rest, + isActive: defaultIsCollapsed !== undefined ? defaultIsCollapsed === false : undefined, + }, + }; + }, [props]); + + const { navNode, registerChildNode, path, childrenNodes } = useInitNavNode(node); const unstyled = props.unstyled ?? navigationContext.unstyled; 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 a0564b7180970..4333db7c9844c 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 @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import React, { Fragment, ReactElement, ReactNode, useEffect } from 'react'; +import React, { Fragment, ReactElement, ReactNode, useEffect, useMemo } from 'react'; import type { AppDeepLinkId } from '@kbn/core-chrome-browser'; import type { ChromeProjectNavigationNodeEnhanced, NodeProps } from '../types'; @@ -34,7 +34,14 @@ function NavigationItemComp< const navigationContext = useNavigation(); const navNodeRef = React.useRef(null); - const { element, children, ...node } = props; + const { element, children, node } = useMemo(() => { + const { element: _element, children: _children, ...rest } = props; + return { + element: _element, + children: _children, + node: rest, + }; + }, [props]); const unstyled = props.unstyled ?? navigationContext.unstyled; let renderItem: (() => ReactElement) | undefined; diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx index 9e3e8ec812b5c..12a4605d4837a 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx +++ b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import React, { FC, useEffect, useRef, useState } from 'react'; +import React, { FC, useEffect, useState } from 'react'; import { EuiCollapsibleNavGroup, EuiIcon, @@ -80,7 +80,9 @@ export const NavigationSectionUI: FC = ({ navNode, items = [] }) => { const { id, title, icon, isActive } = navNode; const { navigateToUrl, basePath } = useServices(); const [isCollapsed, setIsCollapsed] = useState(!isActive); - const initialTime = useRef(Date.now()); + // We want to auto expand the group automatically if the node is active (URL match) + // but once the user manually expand a group we don't want to close it afterward automatically. + const [doCollapseFromActiveState, setDoCollapseFromActiveState] = useState(true); // If the item has no link and no cildren, we don't want to render it const itemHasLinkOrChildren = (item: ChromeProjectNavigationNodeEnhanced) => { @@ -108,13 +110,10 @@ export const NavigationSectionUI: FC = ({ navNode, items = [] }) => { const groupHasLink = Boolean(navNode.deepLink) || Boolean(navNode.href); useEffect(() => { - // We only want to set the collapsed state during the "mounting" phase (500ms). - // After that, even if the URL does not match the group and the group is open we don't - // want to collapse it automatically. - if (Date.now() - initialTime.current < 500) { + if (doCollapseFromActiveState) { setIsCollapsed(!isActive); } - }, [isActive]); + }, [isActive, doCollapseFromActiveState]); if (!groupHasLink && !filteredItems.some(itemHasLinkOrChildren)) { return null; @@ -127,7 +126,10 @@ export const NavigationSectionUI: FC = ({ navNode, items = [] }) => { iconType={icon} isCollapsible={true} initialIsOpen={isActive} - onToggle={(isOpen) => setIsCollapsed(!isOpen)} + onToggle={(isOpen) => { + setIsCollapsed(!isOpen); + setDoCollapseFromActiveState(false); + }} forceState={isCollapsed ? 'closed' : 'open'} data-test-subj={`nav-bucket-${id}`} > 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 b6bbff8904ed4..57e7b3dcfd058 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 @@ -31,7 +31,7 @@ export const RecentlyAccessed: FC = ({ defaultIsCollapsed = false, }) => { const strings = getI18nStrings(); - const { recentlyAccessed$ } = useServices(); + const { recentlyAccessed$, basePath, navigateToUrl } = useServices(); const recentlyAccessed = useObservable(recentlyAccessedProp$ ?? recentlyAccessed$, []); if (recentlyAccessed.length === 0) { @@ -42,11 +42,20 @@ export const RecentlyAccessed: FC = ({ { name: '', // no list header title id: 'recents_root', - items: recentlyAccessed.map(({ id, label, link }) => ({ - id, - name: label, - href: link, - })), + items: recentlyAccessed.map((recent) => { + const { id, label, link } = recent; + const href = basePath.prepend(link); + + return { + id, + name: label, + href, + onClick: (e: React.MouseEvent) => { + e.preventDefault(); + navigateToUrl(href); + }, + }; + }), }, ]; From c8bec1d07d09a714491711d3f0f0699b85394cbc Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Wed, 12 Jul 2023 13:17:19 -0400 Subject: [PATCH 07/50] [Fleet] Support local routing rules (#161573) --- .../plugins/fleet/common/types/models/epm.ts | 11 +++ .../server/services/epm/archive/parse.test.ts | 62 ++++++++++++- .../server/services/epm/archive/parse.ts | 56 ++++++++--- .../server/services/epm/archive/storage.ts | 12 ++- .../ingest_pipeline/helpers.test.ts | 93 ++++++++++++++++++- .../elasticsearch/ingest_pipeline/helpers.ts | 23 ++++- .../elasticsearch/ingest_pipeline/install.ts | 15 ++- .../elasticsearch/ingest_pipeline/types.ts | 3 + .../apis/epm/custom_ingest_pipeline.ts | 2 +- .../fleet_api_integration/apis/epm/index.js | 1 + .../apis/epm/routing_rules.ts | 87 +++++++++++++++++ .../1.0.0/data_stream/test/fields/fields.yml | 18 ++++ .../1.0.0/data_stream/test/manifest.yml | 6 ++ .../1.0.0/data_stream/test/routing_rules.yml | 9 ++ .../routing_rules/1.0.0/docs/README.md | 3 + .../routing_rules/1.0.0/img/logo.svg | 7 ++ .../routing_rules/1.0.0/manifest.yml | 25 +++++ 17 files changed, 396 insertions(+), 37 deletions(-) create mode 100644 x-pack/test/fleet_api_integration/apis/epm/routing_rules.ts create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/data_stream/test/fields/fields.yml create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/data_stream/test/manifest.yml create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/data_stream/test/routing_rules.yml create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/docs/README.md create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/img/logo.svg create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/manifest.yml diff --git a/x-pack/plugins/fleet/common/types/models/epm.ts b/x-pack/plugins/fleet/common/types/models/epm.ts index ec9f7f3d2fd42..dcff8ae3071e7 100644 --- a/x-pack/plugins/fleet/common/types/models/epm.ts +++ b/x-pack/plugins/fleet/common/types/models/epm.ts @@ -335,6 +335,7 @@ export enum RegistryDataStreamKeys { ingest_pipeline = 'ingest_pipeline', elasticsearch = 'elasticsearch', dataset_is_prefix = 'dataset_is_prefix', + routing_rules = 'routing_rules', } export interface RegistryDataStream { @@ -351,6 +352,7 @@ export interface RegistryDataStream { [RegistryDataStreamKeys.ingest_pipeline]?: string; [RegistryDataStreamKeys.elasticsearch]?: RegistryElasticsearch; [RegistryDataStreamKeys.dataset_is_prefix]?: boolean; + [RegistryDataStreamKeys.routing_rules]?: RegistryDataStreamRoutingRules[]; } export interface RegistryElasticsearch { @@ -374,6 +376,15 @@ export interface RegistryDataStreamPrivileges { indices?: string[]; } +export interface RegistryDataStreamRoutingRules { + source_dataset: string; + rules: Array<{ + target_dataset: string; + if: string; + namespace: string; + }>; +} + export type RegistryVarType = | 'integer' | 'bool' diff --git a/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts b/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts index 504ec6f658a57..5848252a2972d 100644 --- a/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts @@ -459,7 +459,7 @@ describe('parseAndVerifyDataStreams', () => { paths: ['input-only-0.1.0/data_stream/stream1/README.md'], pkgName: 'input-only', pkgVersion: '0.1.0', - manifests: {}, + manifestsAndRoutingRules: {}, }) ).toThrowError("No manifest.yml file found for data stream 'stream1'"); }); @@ -470,7 +470,7 @@ describe('parseAndVerifyDataStreams', () => { paths: ['input-only-0.1.0/data_stream/stream1/manifest.yml'], pkgName: 'input-only', pkgVersion: '0.1.0', - manifests: { + manifestsAndRoutingRules: { 'input-only-0.1.0/data_stream/stream1/manifest.yml': Buffer.alloc(1), }, }) @@ -483,7 +483,7 @@ describe('parseAndVerifyDataStreams', () => { paths: ['input-only-0.1.0/data_stream/stream1/manifest.yml'], pkgName: 'input-only', pkgVersion: '0.1.0', - manifests: { + manifestsAndRoutingRules: { 'input-only-0.1.0/data_stream/stream1/manifest.yml': Buffer.from( ` title: Custom Logs`, @@ -502,7 +502,7 @@ describe('parseAndVerifyDataStreams', () => { paths: ['input-only-0.1.0/data_stream/stream1/manifest.yml'], pkgName: 'input-only', pkgVersion: '0.1.0', - manifests: { + manifestsAndRoutingRules: { 'input-only-0.1.0/data_stream/stream1/manifest.yml': Buffer.from( ` title: Custom Logs @@ -532,7 +532,7 @@ describe('parseAndVerifyDataStreams', () => { paths: ['input-only-0.1.0/data_stream/stream1/manifest.yml'], pkgName: 'input-only', pkgVersion: '0.1.0', - manifests: { + manifestsAndRoutingRules: { 'input-only-0.1.0/data_stream/stream1/manifest.yml': Buffer.from( ` title: Custom Logs @@ -558,6 +558,58 @@ describe('parseAndVerifyDataStreams', () => { }, ]); }); + + it('should parse routing rules', async () => { + expect( + parseAndVerifyDataStreams({ + paths: ['input-only-0.1.0/data_stream/stream1/manifest.yml'], + pkgName: 'input-only', + pkgVersion: '0.1.0', + manifestsAndRoutingRules: { + 'input-only-0.1.0/data_stream/stream1/manifest.yml': Buffer.from( + ` + title: Custom Logs + type: logs + dataset: ds + version: 0.1.0`, + 'utf8' + ), + 'input-only-0.1.0/data_stream/stream1/routing_rules.yml': Buffer.from( + ` + - source_dataset: ds + rules: + - target_dataset: ds.test + if: true == true + namespace: "default" + `, + 'utf8' + ), + }, + }) + ).toEqual([ + { + dataset: 'ds', + package: 'input-only', + path: 'stream1', + release: 'ga', + title: 'Custom Logs', + type: 'logs', + elasticsearch: {}, + routing_rules: [ + { + source_dataset: 'ds', + rules: [ + { + target_dataset: 'ds.test', + if: 'true == true', + namespace: 'default', + }, + ], + }, + ], + }, + ]); + }); }); describe('parseAndVerifyStreams', () => { diff --git a/x-pack/plugins/fleet/server/services/epm/archive/parse.ts b/x-pack/plugins/fleet/server/services/epm/archive/parse.ts index 705f1f93ac78b..eb5895a4f769d 100644 --- a/x-pack/plugins/fleet/server/services/epm/archive/parse.ts +++ b/x-pack/plugins/fleet/server/services/epm/archive/parse.ts @@ -39,6 +39,8 @@ import { unpackBufferEntries } from '.'; const readFileAsync = promisify(readFile); export const MANIFEST_NAME = 'manifest.yml'; +export const DATASTREAM_MANIFEST_NAME = 'manifest.yml'; +export const DATASTREAM_ROUTING_RULES_NAME = 'routing_rules.yml'; const DEFAULT_RELEASE_VALUE = 'ga'; @@ -79,7 +81,7 @@ export const expandDottedEntries = (obj: object) => { }, {} as Record); }; -type ManifestMap = Record; +type AssetsBufferMap = Record; // not sure these are 100% correct but they do the job here // keeping them local until others need them @@ -142,16 +144,21 @@ export async function generatePackageInfoFromArchiveBuffer( archiveBuffer: Buffer, contentType: string ): Promise<{ paths: string[]; packageInfo: ArchivePackage }> { - const manifests: ManifestMap = {}; + const manifestsAndRoutingRules: AssetsBufferMap = {}; const entries = await unpackBufferEntries(archiveBuffer, contentType); const paths: string[] = []; entries.forEach(({ path: bufferPath, buffer }) => { paths.push(bufferPath); - if (bufferPath.endsWith(MANIFEST_NAME) && buffer) manifests[bufferPath] = buffer; + if ( + buffer && + (bufferPath.endsWith(MANIFEST_NAME) || bufferPath.endsWith(DATASTREAM_ROUTING_RULES_NAME)) + ) { + manifestsAndRoutingRules[bufferPath] = buffer; + } }); return { - packageInfo: parseAndVerifyArchive(paths, manifests), + packageInfo: parseAndVerifyArchive(paths, manifestsAndRoutingRules), paths, }; } @@ -164,18 +171,21 @@ export async function _generatePackageInfoFromPaths( paths: string[], topLevelDir: string ): Promise { - const manifests: ManifestMap = {}; + const manifestsAndRoutingRules: AssetsBufferMap = {}; await Promise.all( paths.map(async (filePath) => { - if (filePath.endsWith(MANIFEST_NAME)) manifests[filePath] = await readFileAsync(filePath); + if (filePath.endsWith(MANIFEST_NAME) || filePath.endsWith(DATASTREAM_ROUTING_RULES_NAME)) { + manifestsAndRoutingRules[filePath] = await readFileAsync(filePath); + } }) ); - return parseAndVerifyArchive(paths, manifests, topLevelDir); + + return parseAndVerifyArchive(paths, manifestsAndRoutingRules, topLevelDir); } export function parseAndVerifyArchive( paths: string[], - manifests: ManifestMap, + manifestsAndRoutingRules: AssetsBufferMap, topLevelDirOverride?: string ): ArchivePackage { // The top-level directory must match pkgName-pkgVersion, and no other top-level files or directories may be present @@ -190,7 +200,7 @@ export function parseAndVerifyArchive( // The package must contain a manifest file ... const manifestFile = path.posix.join(toplevelDir, MANIFEST_NAME); - const manifestBuffer = manifests[manifestFile]; + const manifestBuffer = manifestsAndRoutingRules[manifestFile]; if (!paths.includes(manifestFile) || !manifestBuffer) { throw new PackageInvalidArchiveError( `Package at top-level directory ${toplevelDir} must contain a top-level ${MANIFEST_NAME} file.` @@ -239,7 +249,7 @@ export function parseAndVerifyArchive( pkgName: parsed.name, pkgVersion: parsed.version, pkgBasePathOverride: topLevelDirOverride, - manifests, + manifestsAndRoutingRules, }); if (parsedDataStreams.length) { @@ -284,10 +294,10 @@ export function parseAndVerifyDataStreams(opts: { paths: string[]; pkgName: string; pkgVersion: string; - manifests: ManifestMap; + manifestsAndRoutingRules: AssetsBufferMap; pkgBasePathOverride?: string; }): RegistryDataStream[] { - const { paths, pkgName, pkgVersion, manifests, pkgBasePathOverride } = opts; + const { paths, pkgName, pkgVersion, manifestsAndRoutingRules, pkgBasePathOverride } = opts; // A data stream is made up of a subdirectory of name-version/data_stream/, containing a manifest.yml const dataStreamPaths = new Set(); const dataStreams: RegistryDataStream[] = []; @@ -305,8 +315,8 @@ export function parseAndVerifyDataStreams(opts: { dataStreamPaths.forEach((dataStreamPath) => { const fullDataStreamPath = path.posix.join(dataStreamsBasePath, dataStreamPath); - const manifestFile = path.posix.join(fullDataStreamPath, MANIFEST_NAME); - const manifestBuffer = manifests[manifestFile]; + const manifestFile = path.posix.join(fullDataStreamPath, DATASTREAM_MANIFEST_NAME); + const manifestBuffer = manifestsAndRoutingRules[manifestFile]; if (!paths.includes(manifestFile) || !manifestBuffer) { throw new PackageInvalidArchiveError( `No manifest.yml file found for data stream '${dataStreamPath}'` @@ -322,6 +332,20 @@ export function parseAndVerifyDataStreams(opts: { ); } + // Routing rules + const routingRulesFiles = path.posix.join(fullDataStreamPath, DATASTREAM_ROUTING_RULES_NAME); + const routingRulesBuffer = manifestsAndRoutingRules[routingRulesFiles]; + let dataStreamRoutingRules: any; + if (routingRulesBuffer) { + try { + dataStreamRoutingRules = yaml.safeLoad(routingRulesBuffer.toString()); + } catch (error) { + throw new PackageInvalidArchiveError( + `Could not parse package manifest for data stream '${dataStreamPath}': ${error}.` + ); + } + } + const { title: dataStreamTitle, release = DEFAULT_RELEASE_VALUE, @@ -357,6 +381,10 @@ export function parseAndVerifyDataStreams(opts: { elasticsearch: parsedElasticsearchEntry, }; + if (dataStreamRoutingRules) { + dataStreamObject.routing_rules = dataStreamRoutingRules; + } + if (ingestPipeline) { dataStreamObject.ingest_pipeline = ingestPipeline; } diff --git a/x-pack/plugins/fleet/server/services/epm/archive/storage.ts b/x-pack/plugins/fleet/server/services/epm/archive/storage.ts index cbea18b8b8338..6608294c10077 100644 --- a/x-pack/plugins/fleet/server/services/epm/archive/storage.ts +++ b/x-pack/plugins/fleet/server/services/epm/archive/storage.ts @@ -24,7 +24,7 @@ import { appContextService } from '../../app_context'; import { getArchiveEntry, setArchiveEntry, setArchiveFilelist, setPackageInfo } from '.'; import type { ArchiveEntry } from '.'; -import { MANIFEST_NAME, parseAndVerifyArchive } from './parse'; +import { DATASTREAM_ROUTING_RULES_NAME, MANIFEST_NAME, parseAndVerifyArchive } from './parse'; const ONE_BYTE = 1024 * 1024; // could be anything, picked this from https://github.com/elastic/elastic-agent-client/issues/17 @@ -207,7 +207,7 @@ export const getEsPackage = async ( return undefined; } - const manifests: Record = {}; + const manifestsAndRoutingRules: Record = {}; const entries: ArchiveEntry[] = assets.map(packageAssetToArchiveEntry); const paths: string[] = []; entries.forEach(({ path, buffer }) => { @@ -216,12 +216,16 @@ export const getEsPackage = async ( paths.push(path); } paths.push(path); - if (path.endsWith(MANIFEST_NAME) && buffer) manifests[path] = buffer; + if (path.endsWith(MANIFEST_NAME) && buffer) { + manifestsAndRoutingRules[path] = buffer; + } else if (path.endsWith(DATASTREAM_ROUTING_RULES_NAME) && buffer) { + manifestsAndRoutingRules[path] = buffer; + } }); // // Add asset references to cache setArchiveFilelist({ name: pkgName, version: pkgVersion }, paths); - const packageInfo = parseAndVerifyArchive(paths, manifests); + const packageInfo = parseAndVerifyArchive(paths, manifestsAndRoutingRules); setPackageInfo({ name: pkgName, version: pkgVersion, packageInfo }); return { diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/helpers.test.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/helpers.test.ts index fcd60ec51e69e..d43849d216810 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/helpers.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/helpers.test.ts @@ -11,7 +11,7 @@ import path from 'path'; import type { RegistryDataStream } from '../../../../types'; import { - addCustomPipelineProcessor, + addCustomPipelineAndLocalRoutingRulesProcessor, getPipelineNameForInstallation, rewriteIngestPipeline, } from './helpers'; @@ -142,9 +142,9 @@ test('getPipelineNameForInstallation gets correct name', () => { ); }); -describe('addCustomPipelineProcessor', () => { +describe('addCustomPipelineAndLocalRoutingRulesProcessor', () => { it('add custom pipeline processor at the end of the pipeline for yaml pipeline', () => { - const pipelineInstall = addCustomPipelineProcessor({ + const pipelineInstall = addCustomPipelineAndLocalRoutingRulesProcessor({ contentForInstallation: ` processors: - set: @@ -170,7 +170,7 @@ processors: }); it('add custom pipeline processor at the end of the pipeline for json pipeline', () => { - const pipelineInstall = addCustomPipelineProcessor({ + const pipelineInstall = addCustomPipelineAndLocalRoutingRulesProcessor({ contentForInstallation: `{ "processors": [ { @@ -190,4 +190,89 @@ processors: `"{\\"processors\\":[{\\"set\\":{\\"field\\":\\"test\\",\\"value\\":\\"toto\\"}},{\\"pipeline\\":{\\"name\\":\\"logs-test@custom\\",\\"ignore_missing_pipeline\\":true}}]}"` ); }); + + describe('with local routing rules', () => { + it('add reroute processor after custom pipeline processor for yaml pipeline', () => { + const pipelineInstall = addCustomPipelineAndLocalRoutingRulesProcessor({ + contentForInstallation: ` +processors: + - set: + field: test + value: toto + `, + extension: 'yml', + nameForInstallation: 'logs-test-1.0.0', + customIngestPipelineNameForInstallation: 'logs-test@custom', + dataStream: { + dataset: 'test', + routing_rules: [ + { + source_dataset: 'test', + rules: [ + { + target_dataset: 'test.reroute', + if: 'true == true', + namespace: 'default', + }, + ], + }, + ], + } as any, + }); + + expect(pipelineInstall.contentForInstallation).toMatchInlineSnapshot(` + "--- + processors: + - set: + field: test + value: toto + - pipeline: + name: logs-test@custom + ignore_missing_pipeline: true + - reroute: + tag: test + dataset: test.reroute + namespace: default + if: true == true + " + `); + }); + + it('add reroute processor after custom pipeline processor for json pipeline', () => { + const pipelineInstall = addCustomPipelineAndLocalRoutingRulesProcessor({ + contentForInstallation: `{ + "processors": [ + { + "set": { + "field": "test", + "value": "toto" + } + } + ] + }`, + extension: 'json', + nameForInstallation: 'logs-test-1.0.0', + customIngestPipelineNameForInstallation: 'logs-test@custom', + dataStream: { + dataset: 'test', + routing_rules: [ + { + source_dataset: 'test', + rules: [ + { + target_dataset: 'test.reroute', + if: 'true == true', + namespace: 'default', + }, + ], + }, + ], + } as any, + }); + + expect(pipelineInstall.contentForInstallation).toMatchInlineSnapshot( + `"{\\"processors\\":[{\\"set\\":{\\"field\\":\\"test\\",\\"value\\":\\"toto\\"}},{\\"pipeline\\":{\\"name\\":\\"logs-test@custom\\",\\"ignore_missing_pipeline\\":true}},{\\"reroute\\":{\\"tag\\":\\"test\\",\\"dataset\\":\\"test.reroute\\",\\"namespace\\":\\"default\\",\\"if\\":\\"true == true\\"}}]}"` + ); + }); + }); }); diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/helpers.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/helpers.ts index 0ce78b5730ac0..1be2b2b895896 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/helpers.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/helpers.ts @@ -69,21 +69,39 @@ function mutatePipelineContentWithNewProcessor(jsonPipelineContent: any, process jsonPipelineContent.processors.push(processor); } -export function addCustomPipelineProcessor(pipeline: PipelineInstall): PipelineInstall { +export function addCustomPipelineAndLocalRoutingRulesProcessor( + pipeline: PipelineInstall +): PipelineInstall { if (!pipeline.customIngestPipelineNameForInstallation) { return pipeline; } + const localRoutingRules = + pipeline.dataStream?.routing_rules?.find( + (rule) => rule.source_dataset === pipeline.dataStream?.dataset + )?.rules ?? []; + const customPipelineProcessor = { pipeline: { name: pipeline.customIngestPipelineNameForInstallation, ignore_missing_pipeline: true, }, }; + const rerouteProcessors = localRoutingRules.map((routingRule) => ({ + reroute: { + tag: pipeline.dataStream?.dataset, + dataset: routingRule.target_dataset, + namespace: routingRule.namespace, + if: routingRule.if, + }, + })); if (pipeline.extension === 'yml') { const parsedPipelineContent = safeLoad(pipeline.contentForInstallation); mutatePipelineContentWithNewProcessor(parsedPipelineContent, customPipelineProcessor); + rerouteProcessors.forEach((processor) => + mutatePipelineContentWithNewProcessor(parsedPipelineContent, processor) + ); return { ...pipeline, contentForInstallation: `---\n${safeDump(parsedPipelineContent)}`, @@ -92,6 +110,9 @@ export function addCustomPipelineProcessor(pipeline: PipelineInstall): PipelineI const parsedPipelineContent = JSON.parse(pipeline.contentForInstallation); mutatePipelineContentWithNewProcessor(parsedPipelineContent, customPipelineProcessor); + rerouteProcessors.forEach((processor) => + mutatePipelineContentWithNewProcessor(parsedPipelineContent, processor) + ); return { ...pipeline, diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.ts index 5e063e26c6a63..1ae0d8a9d67fa 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.ts @@ -34,7 +34,7 @@ import { getPipelineNameForInstallation, rewriteIngestPipeline, isTopLevelPipeline, - addCustomPipelineProcessor, + addCustomPipelineAndLocalRoutingRulesProcessor, } from './helpers'; import type { PipelineInstall, RewriteSubstitution } from './types'; @@ -152,12 +152,9 @@ export async function installAllPipelines({ const pipelinePaths = dataStream ? paths.filter((path) => isDataStreamPipeline(path, dataStream.path)) : paths; - const pipelinesInfos: Array<{ - nameForInstallation: string; - customIngestPipelineNameForInstallation?: string; - content: string; - extension: string; - }> = []; + const pipelinesInfos: Array< + Omit & { content: string } + > = []; const substitutions: RewriteSubstitution[] = []; let datastreamPipelineCreated = false; @@ -177,6 +174,7 @@ export async function installAllPipelines({ nameForInstallation, customIngestPipelineNameForInstallation: dataStream && isMainPipeline ? getCustomPipelineNameForDatastream(dataStream) : undefined, + dataStream, content, extension, }); @@ -203,6 +201,7 @@ export async function installAllPipelines({ pipelinesToInstall.push({ nameForInstallation, customIngestPipelineNameForInstallation: getCustomPipelineNameForDatastream(dataStream), + dataStream, contentForInstallation: 'processors: []', extension: 'yml', }); @@ -234,7 +233,7 @@ async function installPipeline({ }); if (shouldAddCustomPipelineProcessor) { - pipelineToInstall = addCustomPipelineProcessor(pipelineToInstall); + pipelineToInstall = addCustomPipelineAndLocalRoutingRulesProcessor(pipelineToInstall); } const esClientParams = { diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/types.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/types.ts index c9b7a68e3d892..329fc744320e1 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/types.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/types.ts @@ -5,11 +5,14 @@ * 2.0. */ +import type { RegistryDataStream } from '../../../../types'; + export interface PipelineInstall { nameForInstallation: string; contentForInstallation: string; customIngestPipelineNameForInstallation?: string; extension: string; + dataStream?: RegistryDataStream; } export interface RewriteSubstitution { diff --git a/x-pack/test/fleet_api_integration/apis/epm/custom_ingest_pipeline.ts b/x-pack/test/fleet_api_integration/apis/epm/custom_ingest_pipeline.ts index 06b5a245cd78c..22490b4bbe31d 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/custom_ingest_pipeline.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/custom_ingest_pipeline.ts @@ -78,7 +78,7 @@ export default function (providerContext: FtrProviderContext) { }); }); - describe('Without custom pipeline', () => { + describe('With custom pipeline', () => { before(() => es.ingest.putPipeline({ id: CUSTOM_PIPELINE, diff --git a/x-pack/test/fleet_api_integration/apis/epm/index.js b/x-pack/test/fleet_api_integration/apis/epm/index.js index 70b655a59424b..2fa0c0c881a59 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/index.js +++ b/x-pack/test/fleet_api_integration/apis/epm/index.js @@ -43,6 +43,7 @@ export default function loadTests({ loadTestFile, getService }) { loadTestFile(require.resolve('./install_hidden_datastreams')); loadTestFile(require.resolve('./bulk_get_assets')); loadTestFile(require.resolve('./install_dynamic_template_metric')); + loadTestFile(require.resolve('./routing_rules')); loadTestFile(require.resolve('./install_runtime_field')); }); } diff --git a/x-pack/test/fleet_api_integration/apis/epm/routing_rules.ts b/x-pack/test/fleet_api_integration/apis/epm/routing_rules.ts new file mode 100644 index 0000000000000..c030913bfbcb6 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/epm/routing_rules.ts @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; +import { setupFleetAndAgents } from '../agents/services'; +import { skipIfNoDockerRegistry } from '../../helpers'; + +const TEST_WRITE_INDEX = 'logs-routing_rules.test-test'; +const TEST_REROUTE_INDEX = 'logs-routing_rules.reroute-test'; + +const ROUTING_RULES_PKG_NAME = 'routing_rules'; +const ROUTING_RULES_PKG_VERSION = '1.0.0'; + +export default function (providerContext: FtrProviderContext) { + const { getService } = providerContext; + const supertest = getService('supertest'); + const es = getService('es'); + const esArchiver = getService('esArchiver'); + + describe('routing rules for fleet managed datastreams', () => { + skipIfNoDockerRegistry(providerContext); + before(async () => { + await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + }); + setupFleetAndAgents(providerContext); + + before(async () => { + await supertest + .post(`/api/fleet/epm/packages/${ROUTING_RULES_PKG_NAME}/${ROUTING_RULES_PKG_VERSION}`) + .set('kbn-xsrf', 'xxxx') + .send({ force: true }) + .expect(200); + }); + after(async () => { + await supertest + .delete(`/api/fleet/epm/packages/${ROUTING_RULES_PKG_NAME}/${ROUTING_RULES_PKG_VERSION}`) + .set('kbn-xsrf', 'xxxx') + .send({ force: true }) + .expect(200); + }); + + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + }); + + after(async () => { + const res = await es.search({ + index: TEST_REROUTE_INDEX, + ignore_unavailable: true, + }); + + for (const hit of res.hits.hits) { + await es.delete({ + id: hit._id, + index: hit._index, + }); + } + }); + + it('Should write doc correctly and apply the routing rule', async () => { + const res = await es.index({ + index: TEST_WRITE_INDEX, + body: { + '@timestamp': '2020-01-01T09:09:00', + message: 'hello', + data_stream: { + dataset: 'routing_rules.test', + namespace: 'test', + type: 'logs', + }, + }, + }); + + const resWrite = await es.get({ + id: res._id, + index: res._index, + }); + + expect(resWrite._index.match(/logs-routing_rules.reroute-test/)); + }); + }); +} diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/data_stream/test/fields/fields.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/data_stream/test/fields/fields.yml new file mode 100644 index 0000000000000..86913eaec22a7 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/data_stream/test/fields/fields.yml @@ -0,0 +1,18 @@ +- name: data_stream.type + type: constant_keyword + description: > + Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: > + Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: > + Data stream namespace. +- name: '@timestamp' + type: date + description: > + Event timestamp. +- name: 'message' + type: text diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/data_stream/test/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/data_stream/test/manifest.yml new file mode 100644 index 0000000000000..0ba1541287a2e --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/data_stream/test/manifest.yml @@ -0,0 +1,6 @@ +title: Test Dataset +dataset: routing_rules.test +type: logs +elasticsearch: + dynamic_dataset: true + dynamic_namespace: true diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/data_stream/test/routing_rules.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/data_stream/test/routing_rules.yml new file mode 100644 index 0000000000000..6a90d41bddf73 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/data_stream/test/routing_rules.yml @@ -0,0 +1,9 @@ +# "Local" routing rules are included under this current dataset, not a special case +- source_dataset: routing_rules.test + rules: + # Route error logs to `nginx.error` when they're sourced from an error logfile + - target_dataset: routing_rules.reroute + if: 'true == true' + namespace: + - '{{ data_stream.namespace }}' + - default diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/docs/README.md b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/docs/README.md new file mode 100644 index 0000000000000..131f0fdfde9bb --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/docs/README.md @@ -0,0 +1,3 @@ +# routing rules + +This package has routing rules diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/img/logo.svg b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/img/logo.svg new file mode 100644 index 0000000000000..15b49bcf28aec --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/img/logo.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/manifest.yml new file mode 100644 index 0000000000000..efc9c8d1820c9 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/routing_rules/1.0.0/manifest.yml @@ -0,0 +1,25 @@ +format_version: 2.9.0 +name: routing_rules +title: Package with routing rules +description: This integration package has routing rules. +version: 1.0.0 +categories: [] +# Options are experimental, beta, ga +release: beta +# The package type. The options for now are [integration, solution], more type might be added in the future. +# The default type is integration and will be set if empty. +type: integration +license: basic +owner: + github: elastic/fleet + +requirement: + elasticsearch: + versions: '>7.7.0' + kibana: + versions: '>7.7.0' + +icons: + - src: '/img/logo.svg' + size: '16x16' + type: 'image/svg+xml' From f022456ad89fd5545586b03240ccfb4c4da5aa05 Mon Sep 17 00:00:00 2001 From: "Christiane (Tina) Heiligers" Date: Wed, 12 Jul 2023 10:19:20 -0700 Subject: [PATCH 08/50] [http] Default route access to `internal` (#161672) --- .../src/request.ts | 5 ++--- .../src/router.mock.ts | 2 +- .../src/http_server.test.ts | 16 ++++++++-------- .../core-http-server-internal/src/http_server.ts | 2 +- .../src/lifecycle_handlers.test.ts | 2 +- .../http/core-http-server/src/router/route.ts | 4 +--- 6 files changed, 14 insertions(+), 17 deletions(-) diff --git a/packages/core/http/core-http-router-server-internal/src/request.ts b/packages/core/http/core-http-router-server-internal/src/request.ts index aa134c21ae95a..8c31635feb8c2 100644 --- a/packages/core/http/core-http-router-server-internal/src/request.ts +++ b/packages/core/http/core-http-router-server-internal/src/request.ts @@ -223,11 +223,10 @@ export class CoreKibanaRequest< options, }; } - /** infer route access from path if not declared */ + /** set route access to internal if not declared */ private getAccess(request: RawRequest): 'internal' | 'public' { return ( - ((request.route?.settings as RouteOptions)?.app as KibanaRouteOptions)?.access ?? - (request.path.startsWith('/internal') ? 'internal' : 'public') + ((request.route?.settings as RouteOptions)?.app as KibanaRouteOptions)?.access ?? 'internal' ); } diff --git a/packages/core/http/core-http-router-server-mocks/src/router.mock.ts b/packages/core/http/core-http-router-server-mocks/src/router.mock.ts index e82a51a14a332..4272cf130b38e 100644 --- a/packages/core/http/core-http-router-server-mocks/src/router.mock.ts +++ b/packages/core/http/core-http-router-server-mocks/src/router.mock.ts @@ -73,7 +73,7 @@ function createKibanaRequestMock

({ routeTags, routeAuthRequired, validation = {}, - kibanaRouteOptions = { xsrfRequired: true, access: 'public' }, + kibanaRouteOptions = { xsrfRequired: true, access: 'internal' }, kibanaRequestState = { requestId: '123', requestUuid: '123e4567-e89b-12d3-a456-426614174000', diff --git a/packages/core/http/core-http-server-internal/src/http_server.test.ts b/packages/core/http/core-http-server-internal/src/http_server.test.ts index 886349e0ea940..675d7e4fffcef 100644 --- a/packages/core/http/core-http-server-internal/src/http_server.test.ts +++ b/packages/core/http/core-http-server-internal/src/http_server.test.ts @@ -836,12 +836,12 @@ test('allows declaring route access to flag a route as public or internal', asyn registerRouter(router); await server.start(); - await supertest(innerServer.listener).get('/with-access').expect(200, { access }); + await supertest(innerServer.listener).get('/with-access').expect(200, { access: 'internal' }); - await supertest(innerServer.listener).get('/without-access').expect(200, { access: 'public' }); + await supertest(innerServer.listener).get('/without-access').expect(200, { access: 'internal' }); }); -test('infers access flag from path if not defined', async () => { +test(`sets access flag to 'internal' if not defined`, async () => { const { registerRouter, server: innerServer } = await server.setup(config); const router = new Router('', logger, enhanceWithContext, routerOptions); @@ -863,13 +863,13 @@ test('infers access flag from path if not defined', async () => { await server.start(); await supertest(innerServer.listener).get('/internal/foo').expect(200, { access: 'internal' }); - await supertest(innerServer.listener).get('/random/foo').expect(200, { access: 'public' }); + await supertest(innerServer.listener).get('/random/foo').expect(200, { access: 'internal' }); await supertest(innerServer.listener) .get('/random/internal/foo') - .expect(200, { access: 'public' }); + .expect(200, { access: 'internal' }); await supertest(innerServer.listener) .get('/api/foo/internal/my-foo') - .expect(200, { access: 'public' }); + .expect(200, { access: 'internal' }); }); test('exposes route details of incoming request to a route handler', async () => { @@ -888,7 +888,7 @@ test('exposes route details of incoming request to a route handler', async () => options: { authRequired: true, xsrfRequired: false, - access: 'public', + access: 'internal', tags: [], timeout: {}, }, @@ -1066,7 +1066,7 @@ test('exposes route details of incoming request to a route handler (POST + paylo options: { authRequired: true, xsrfRequired: true, - access: 'public', + access: 'internal', tags: [], timeout: { payload: 10000, diff --git a/packages/core/http/core-http-server-internal/src/http_server.ts b/packages/core/http/core-http-server-internal/src/http_server.ts index 747c477d1b41d..3ed8a73a38641 100644 --- a/packages/core/http/core-http-server-internal/src/http_server.ts +++ b/packages/core/http/core-http-server-internal/src/http_server.ts @@ -606,7 +606,7 @@ export class HttpServer { const kibanaRouteOptions: KibanaRouteOptions = { xsrfRequired: route.options.xsrfRequired ?? !isSafeMethod(route.method), - access: route.options.access ?? (route.path.startsWith('/internal') ? 'internal' : 'public'), + access: route.options.access ?? 'internal', }; // Log HTTP API target consumer. optionsLogger.debug( diff --git a/packages/core/http/core-http-server-internal/src/lifecycle_handlers.test.ts b/packages/core/http/core-http-server-internal/src/lifecycle_handlers.test.ts index b58fd1b299b06..9e1d0191d0f5e 100644 --- a/packages/core/http/core-http-server-internal/src/lifecycle_handlers.test.ts +++ b/packages/core/http/core-http-server-internal/src/lifecycle_handlers.test.ts @@ -174,7 +174,7 @@ describe('xsrf post-auth handler', () => { path: '/some-path', kibanaRouteOptions: { xsrfRequired: false, - access: 'public', + access: 'internal', }, }); diff --git a/packages/core/http/core-http-server/src/router/route.ts b/packages/core/http/core-http-server/src/router/route.ts index e2b11aec08e1a..349ad2e392453 100644 --- a/packages/core/http/core-http-server/src/router/route.ts +++ b/packages/core/http/core-http-server/src/router/route.ts @@ -126,9 +126,7 @@ export interface RouteConfigOptions { * In the future, may require an incomming request to contain a specified header. * - internal. The route is internal and intended for internal access only. * - * If not declared, infers access from route path: - * - access =`internal` for '/internal' route path prefix - * - access = `public` for everything else + * Defaults to 'internal' If not declared, */ access?: 'public' | 'internal'; From 3ba51e4a31f21c1618edcb45a9daa2737568db10 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Wed, 12 Jul 2023 15:23:50 -0400 Subject: [PATCH 09/50] [Security Solution][Endpoint] Remove use of Redux from the Endpoint Policy Settings form (#161511) ## Summary - Re-creates all policy settings form components so that the Policy settings are provided as a prop - Adds `mode = view` to the policy form. When in this mode (user has no authz to edit), form will be displayed in view only mode (no more `disabled` form elements) --- .../policy/get_policy_data_for_update.ts | 7 +- .../e2e/mocked_data/policy_details.cy.ts | 88 ++-- .../cypress/screens/policy_details.ts | 11 +- .../hooks/policy/use_fetch_endpoint_policy.ts | 92 ++++ ...use_fetch_endpoint_policy_agent_summary.ts | 37 ++ .../policy/use_update_endpoint_policy.ts | 45 ++ .../policy/models/policy_details_config.ts | 23 - .../selectors/policy_settings_selectors.ts | 8 - .../view/{ => components}/agents_summary.tsx | 0 .../antivirus_registration_form/index.tsx | 82 --- .../attack_surface_reduction_form/index.tsx | 61 --- .../components/config_form/index.stories.tsx | 67 --- .../view/components/events_form/index.tsx | 197 -------- .../management/pages/policy/view/index.ts | 1 - .../endpoint_policy_edit_extension.test.tsx | 10 +- .../endpoint_policy_edit_extension.tsx | 166 ++----- .../pages/policy/view/policy_advanced.tsx | 213 -------- .../pages/policy/view/policy_details.test.tsx | 3 - .../pages/policy/view/policy_details.tsx | 2 +- .../pages/policy/view/policy_details_form.tsx | 131 ----- .../components/policy_form_layout.test.tsx | 470 ------------------ .../components/protection_radio.tsx | 98 ---- .../components/protection_switch.tsx | 134 ----- .../policy_forms/components/radio_buttons.tsx | 86 ---- .../components/supported_version.tsx | 30 -- .../components/user_notification.tsx | 210 -------- .../policy/view/policy_forms/locked_card.tsx | 93 ---- .../policy_forms/protections/behavior.tsx | 74 --- .../view/policy_forms/protections/malware.tsx | 162 ------ .../view/policy_forms/protections/memory.tsx | 74 --- .../protections/popup_options_to_versions.ts | 15 - .../policy_forms/protections/ransomware.tsx | 71 --- .../pages/policy/view/policy_hooks.ts | 30 +- .../components/advanced_section.tsx | 239 +++++++++ .../cards/antivirus_registration_card.tsx | 92 ++++ .../cards/attack_surface_reduction_card.tsx | 95 ++++ .../cards/behaviour_protection_card.tsx | 114 +++++ .../cards/event_collection_card.tsx | 283 +++++++++++ .../cards/linux_event_collection_card.tsx} | 79 +-- .../cards/mac_event_collection_card.tsx} | 30 +- .../cards/malware_protections_card.tsx | 205 ++++++++ .../cards/memory_protection_card.tsx | 116 +++++ .../cards/ransomware_protection_card.tsx | 114 +++++ .../cards/windows_event_collection_card.tsx} | 30 +- .../detect_prevent_protection_level.tsx | 185 +++++++ .../components/notify_user_option.tsx | 291 +++++++++++ .../protection_setting_card_switch.tsx | 140 ++++++ .../components/setting_card.tsx} | 34 +- .../components/setting_locked_card.tsx | 98 ++++ .../index.ts} | 2 +- .../policy/view/policy_settings_form/mocks.ts | 116 +++++ .../policy_settings_form.tsx | 87 ++++ ...ction_notice_supported_endpoint_version.ts | 13 + .../policy/view/policy_settings_form/types.ts | 15 + .../components/policy_form_confirm_update.tsx | 0 .../index.ts} | 4 +- .../policy_settings_layout.tsx} | 192 ++++--- .../pages/policy/view/tabs/policy_tabs.tsx | 11 +- .../management/services/policies/hooks.ts | 1 + .../management/services/policies/ingest.ts | 34 -- .../translations/translations/fr-FR.json | 7 - .../translations/translations/ja-JP.json | 7 - .../translations/translations/zh-CN.json | 7 - .../apps/integrations/policy_details.ts | 149 +++--- .../page_objects/policy_page.ts | 50 +- 65 files changed, 2795 insertions(+), 2836 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/management/hooks/policy/use_fetch_endpoint_policy.ts create mode 100644 x-pack/plugins/security_solution/public/management/hooks/policy/use_fetch_endpoint_policy_agent_summary.ts create mode 100644 x-pack/plugins/security_solution/public/management/hooks/policy/use_update_endpoint_policy.ts delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/models/policy_details_config.ts rename x-pack/plugins/security_solution/public/management/pages/policy/view/{ => components}/agents_summary.tsx (100%) delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/components/antivirus_registration_form/index.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/components/attack_surface_reduction_form/index.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/components/config_form/index.stories.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/components/events_form/index.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_advanced.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details_form.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/policy_form_layout.test.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/protection_radio.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/protection_switch.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/radio_buttons.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/supported_version.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/user_notification.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/locked_card.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/behavior.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/malware.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/memory.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/popup_options_to_versions.ts delete mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/ransomware.tsx create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/advanced_section.tsx create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/antivirus_registration_card.tsx create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/attack_surface_reduction_card.tsx create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/behaviour_protection_card.tsx create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/event_collection_card.tsx rename x-pack/plugins/security_solution/public/management/pages/policy/view/{policy_forms/events/linux.tsx => policy_settings_form/components/cards/linux_event_collection_card.tsx} (65%) rename x-pack/plugins/security_solution/public/management/pages/policy/view/{policy_forms/events/mac.tsx => policy_settings_form/components/cards/mac_event_collection_card.tsx} (55%) create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/malware_protections_card.tsx create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/memory_protection_card.tsx create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/ransomware_protection_card.tsx rename x-pack/plugins/security_solution/public/management/pages/policy/view/{policy_forms/events/windows.tsx => policy_settings_form/components/cards/windows_event_collection_card.tsx} (71%) create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/detect_prevent_protection_level.tsx create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/notify_user_option.tsx create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/protection_setting_card_switch.tsx rename x-pack/plugins/security_solution/public/management/pages/policy/view/{components/config_form/index.tsx => policy_settings_form/components/setting_card.tsx} (77%) create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/setting_locked_card.tsx rename x-pack/plugins/security_solution/public/management/pages/policy/view/{policy_forms/components/index.tsx => policy_settings_form/index.ts} (80%) create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/mocks.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/policy_settings_form.tsx create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/protection_notice_supported_endpoint_version.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/types.ts rename x-pack/plugins/security_solution/public/management/pages/policy/view/{policy_forms => policy_settings_layout}/components/policy_form_confirm_update.tsx (100%) rename x-pack/plugins/security_solution/public/management/pages/policy/view/{policy_forms/events/index.tsx => policy_settings_layout/index.ts} (68%) rename x-pack/plugins/security_solution/public/management/pages/policy/view/{policy_forms/components/policy_form_layout.tsx => policy_settings_layout/policy_settings_layout.tsx} (51%) diff --git a/x-pack/plugins/security_solution/common/endpoint/service/policy/get_policy_data_for_update.ts b/x-pack/plugins/security_solution/common/endpoint/service/policy/get_policy_data_for_update.ts index 3abf10c9c7147..ef45df503cdc3 100644 --- a/x-pack/plugins/security_solution/common/endpoint/service/policy/get_policy_data_for_update.ts +++ b/x-pack/plugins/security_solution/common/endpoint/service/policy/get_policy_data_for_update.ts @@ -15,9 +15,10 @@ import type { MaybeImmutable, NewPolicyData, PolicyData } from '../../types'; */ export const getPolicyDataForUpdate = (policy: MaybeImmutable): NewPolicyData => { // eslint-disable-next-line @typescript-eslint/naming-convention - const { id, revision, created_by, created_at, updated_by, updated_at, ...newPolicy } = policy; - // cast to `NewPolicyData` (mutable) since we cloned the entire object - const policyDataForUpdate = cloneDeep(newPolicy) as NewPolicyData; + const { id, revision, created_by, created_at, updated_by, updated_at, ...rest } = + policy as PolicyData; + + const policyDataForUpdate: NewPolicyData = cloneDeep(rest); const endpointPolicy = policyDataForUpdate.inputs[0].config.policy.value; // trim custom malware notification string diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/policy_details.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/policy_details.cy.ts index bcc68b642de84..543ce48ffb79d 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/policy_details.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/policy_details.cy.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { getPolicySettingsFormTestSubjects } from '../../../pages/policy/view/policy_settings_form/mocks'; import { ProtectionModes } from '../../../../../common/endpoint/types'; import { PackagePolicyBackupHelper, @@ -30,7 +31,7 @@ describe('Policy Details', () => { beforeEach(() => { login(); - visitPolicyDetailsPage(); + visitPolicyDetailsPage(indexedHostsData.data.integrationPolicies[0].id); }); afterEach(() => { @@ -42,33 +43,43 @@ describe('Policy Details', () => { }); describe('Malware Protection card', () => { + const malwareTestSubj = getPolicySettingsFormTestSubjects().malware; + it('user should be able to see related rules', () => { - cy.getByTestSubj('malwareProtectionsForm').contains('related detection rules').click(); + cy.getByTestSubj(malwareTestSubj.card).contains('related detection rules').click(); cy.url().should('contain', 'app/security/rules/management'); }); it('changing protection level should enable or disable user notification', () => { - cy.getByTestSubj('malwareProtectionSwitch').click(); - cy.getByTestSubj('malwareProtectionSwitch').should('have.attr', 'aria-checked', 'true'); + cy.getByTestSubj(malwareTestSubj.enableDisableSwitch).click(); + cy.getByTestSubj(malwareTestSubj.enableDisableSwitch).should( + 'have.attr', + 'aria-checked', + 'true' + ); // Default: Prevent + Notify user enabled - cy.getByTestSubj('malwareProtectionMode_prevent').find('input').should('be.checked'); - cy.getByTestSubj('malwareUserNotificationCheckbox').should('be.checked'); + cy.getByTestSubj(malwareTestSubj.protectionPreventRadio).find('input').should('be.checked'); + cy.getByTestSubj(malwareTestSubj.notifyUserCheckbox).should('be.checked'); // Changing to Detect -> Notify user disabled - cy.getByTestSubj('malwareProtectionMode_detect').find('label').click(); - cy.getByTestSubj('malwareUserNotificationCheckbox').should('not.be.checked'); + cy.getByTestSubj(malwareTestSubj.protectionDetectRadio).find('label').click(); + cy.getByTestSubj(malwareTestSubj.notifyUserCheckbox).should('not.be.checked'); // Changing back to Prevent -> Notify user enabled - cy.getByTestSubj('malwareProtectionMode_prevent').find('label').click(); - cy.getByTestSubj('malwareUserNotificationCheckbox').should('be.checked'); + cy.getByTestSubj(malwareTestSubj.protectionPreventRadio).find('label').click(); + cy.getByTestSubj(malwareTestSubj.notifyUserCheckbox).should('be.checked'); }); it('disabling protection should disable notification in yaml for every OS', () => { // Enable malware protection and user notification - cy.getByTestSubj('malwareProtectionSwitch').click(); - cy.getByTestSubj('malwareProtectionSwitch').should('have.attr', 'aria-checked', 'true'); + cy.getByTestSubj(malwareTestSubj.enableDisableSwitch).click(); + cy.getByTestSubj(malwareTestSubj.enableDisableSwitch).should( + 'have.attr', + 'aria-checked', + 'true' + ); savePolicyForm(); yieldPolicyConfig().then((policyConfig) => { @@ -78,8 +89,12 @@ describe('Policy Details', () => { }); // disable malware protection - cy.getByTestSubj('malwareProtectionSwitch').click(); - cy.getByTestSubj('malwareProtectionSwitch').should('have.attr', 'aria-checked', 'false'); + cy.getByTestSubj(malwareTestSubj.enableDisableSwitch).click(); + cy.getByTestSubj(malwareTestSubj.enableDisableSwitch).should( + 'have.attr', + 'aria-checked', + 'false' + ); savePolicyForm(); yieldPolicyConfig().then((policyConfig) => { @@ -96,11 +111,12 @@ describe('Policy Details', () => { expect(policyConfig.windows.malware.mode).to.equal(ProtectionModes.off); }); - cy.getByTestSubj('malwareProtectionsForm').should('contain.text', 'Linux'); - cy.getByTestSubj('malwareProtectionsForm').should('contain.text', 'Windows'); - cy.getByTestSubj('malwareProtectionsForm').should('contain.text', 'Mac'); + cy.getByTestSubj(malwareTestSubj.osValuesContainer).should( + 'contain.text', + 'Windows, Mac, Linux' + ); - cy.getByTestSubj('malwareProtectionSwitch').click(); + cy.getByTestSubj(malwareTestSubj.enableDisableSwitch).click(); savePolicyForm(); yieldPolicyConfig().then((policyConfig) => { @@ -112,40 +128,50 @@ describe('Policy Details', () => { }); describe('Ransomware Protection card', () => { + const ransomwareTestSubj = getPolicySettingsFormTestSubjects().ransomware; + it('user should be able to see related rules', () => { - cy.getByTestSubj('ransomwareProtectionsForm').contains('related detection rules').click(); + cy.getByTestSubj(ransomwareTestSubj.card).contains('related detection rules').click(); cy.url().should('contain', 'app/security/rules/management'); }); it('changing protection level should enable or disable user notification', () => { - cy.getByTestSubj('ransomwareProtectionSwitch').click(); - cy.getByTestSubj('ransomwareProtectionSwitch').should('have.attr', 'aria-checked', 'true'); + cy.getByTestSubj(ransomwareTestSubj.enableDisableSwitch).click(); + cy.getByTestSubj(ransomwareTestSubj.enableDisableSwitch).should( + 'have.attr', + 'aria-checked', + 'true' + ); // Default: Prevent + Notify user enabled - cy.getByTestSubj('ransomwareProtectionMode_prevent').find('input').should('be.checked'); - cy.getByTestSubj('ransomwareUserNotificationCheckbox').should('be.checked'); + cy.getByTestSubj(ransomwareTestSubj.protectionPreventRadio) + .find('input') + .should('be.checked'); + cy.getByTestSubj(ransomwareTestSubj.notifyUserCheckbox).should('be.checked'); // Changing to Detect -> Notify user disabled - cy.getByTestSubj('ransomwareProtectionMode_detect').find('label').click(); - cy.getByTestSubj('ransomwareUserNotificationCheckbox').should('not.be.checked'); + cy.getByTestSubj(ransomwareTestSubj.protectionDetectRadio).find('label').click(); + cy.getByTestSubj(ransomwareTestSubj.notifyUserCheckbox).should('not.be.checked'); // Changing back to Prevent -> Notify user enabled - cy.getByTestSubj('ransomwareProtectionMode_prevent').find('label').click(); - cy.getByTestSubj('ransomwareUserNotificationCheckbox').should('be.checked'); + cy.getByTestSubj(ransomwareTestSubj.protectionPreventRadio).find('label').click(); + cy.getByTestSubj(ransomwareTestSubj.notifyUserCheckbox).should('be.checked'); }); }); describe('Advanced settings', () => { + const testSubjects = getPolicySettingsFormTestSubjects().advancedSection; + it('should show empty text inputs except for some settings', () => { const settingsWithDefaultValues = [ 'mac.advanced.capture_env_vars', 'linux.advanced.capture_env_vars', ]; - cy.getByTestSubj('advancedPolicyButton').click(); + cy.getByTestSubj(testSubjects.showHideButton).click(); - cy.getByTestSubj('advancedPolicyPanel') + cy.getByTestSubj(testSubjects.settingsContainer) .children() .each(($child) => { const settingName = $child.find('label').text(); @@ -167,8 +193,8 @@ describe('Policy Details', () => { }); // Set agent.connection_delay entry for every OS - cy.getByTestSubj('advancedPolicyButton').click(); - cy.getByTestSubj('advancedPolicyPanel') + cy.getByTestSubj(testSubjects.showHideButton).click(); + cy.getByTestSubj(testSubjects.settingsContainer) .children() .each(($child) => { const settingName = $child.find('label').text(); diff --git a/x-pack/plugins/security_solution/public/management/cypress/screens/policy_details.ts b/x-pack/plugins/security_solution/public/management/cypress/screens/policy_details.ts index de4649d3bab4c..30b0b392ff456 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/screens/policy_details.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/screens/policy_details.ts @@ -18,10 +18,13 @@ import type { PolicyConfig } from '../../../../common/endpoint/types'; import { request, loadPage } from '../tasks/common'; import { expectAndCloseSuccessToast } from '../tasks/toasts'; -export const visitPolicyDetailsPage = () => { - loadPage(APP_POLICIES_PATH); - - cy.getByTestSubj('policyNameCellLink').eq(0).click({ force: true }); +export const visitPolicyDetailsPage = (policyId?: string) => { + if (policyId) { + loadPage(`${APP_POLICIES_PATH}/${policyId}`); + } else { + cy.visit(APP_POLICIES_PATH); + cy.getByTestSubj('policyNameCellLink').eq(0).click({ force: true }); + } cy.getByTestSubj('policyDetailsPage').should('exist'); cy.get('#settings').should('exist'); // waiting for Policy Settings tab }; diff --git a/x-pack/plugins/security_solution/public/management/hooks/policy/use_fetch_endpoint_policy.ts b/x-pack/plugins/security_solution/public/management/hooks/policy/use_fetch_endpoint_policy.ts new file mode 100644 index 0000000000000..78cf98c6b48bd --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/hooks/policy/use_fetch_endpoint_policy.ts @@ -0,0 +1,92 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { UseQueryOptions, UseQueryResult } from '@tanstack/react-query'; +import type { IHttpFetchError } from '@kbn/core-http-browser'; +import { useQuery } from '@tanstack/react-query'; +import { packagePolicyRouteService } from '@kbn/fleet-plugin/common'; +import { + DefaultPolicyNotificationMessage, + DefaultPolicyRuleNotificationMessage, +} from '../../../../common/endpoint/models/policy_config'; +import type { GetPolicyResponse } from '../../pages/policy/types'; +import { useHttp } from '../../../common/lib/kibana'; +import type { PolicyData, PolicyConfig } from '../../../../common/endpoint/types'; +import type { ManifestSchema } from '../../../../common/endpoint/schema/manifest'; + +interface ApiDataResponse { + /** Data return from the Fleet API. Its the full integration policy (package policy) */ + item: PolicyData; + /** Endpoint policy settings from the data retrieved from fleet */ + settings: PolicyConfig; + /** Endpoint policy manifest info from the data retrieved from fleet */ + artifactManifest: ManifestSchema; +} + +type UseFetchEndpointPolicyResponse = UseQueryResult; + +/** + * Retrieve a single endpoint integration policy (details) + * @param policyId + * @param options + */ +export const useFetchEndpointPolicy = ( + policyId: string, + options: UseQueryOptions = {} +): UseFetchEndpointPolicyResponse => { + const http = useHttp(); + + return useQuery({ + queryKey: ['get-policy-details', policyId], + ...options, + queryFn: async () => { + const apiResponse = await http.get( + packagePolicyRouteService.getInfoPath(policyId) + ); + + applyDefaultsToPolicyIfNeeded(apiResponse.item); + + return { + item: apiResponse.item, + settings: apiResponse.item.inputs[0].config.policy.value, + artifactManifest: apiResponse.item.inputs[0].config.artifact_manifest.value, + }; + }, + }); +}; + +const applyDefaultsToPolicyIfNeeded = (policyItem: PolicyData): void => { + const settings = policyItem.inputs[0].config.policy.value; + + // sets default user notification message if policy config message is empty + if (settings.windows.popup.malware.message === '') { + settings.windows.popup.malware.message = DefaultPolicyNotificationMessage; + settings.mac.popup.malware.message = DefaultPolicyNotificationMessage; + settings.linux.popup.malware.message = DefaultPolicyNotificationMessage; + } + if (settings.windows.popup.ransomware.message === '') { + settings.windows.popup.ransomware.message = DefaultPolicyNotificationMessage; + } + if (settings.windows.popup.memory_protection.message === '') { + settings.windows.popup.memory_protection.message = DefaultPolicyRuleNotificationMessage; + } + if (settings.mac.popup.memory_protection.message === '') { + settings.mac.popup.memory_protection.message = DefaultPolicyRuleNotificationMessage; + } + if (settings.linux.popup.memory_protection.message === '') { + settings.linux.popup.memory_protection.message = DefaultPolicyRuleNotificationMessage; + } + if (settings.windows.popup.behavior_protection.message === '') { + settings.windows.popup.behavior_protection.message = DefaultPolicyRuleNotificationMessage; + } + if (settings.mac.popup.behavior_protection.message === '') { + settings.mac.popup.behavior_protection.message = DefaultPolicyRuleNotificationMessage; + } + if (settings.linux.popup.behavior_protection.message === '') { + settings.linux.popup.behavior_protection.message = DefaultPolicyRuleNotificationMessage; + } +}; diff --git a/x-pack/plugins/security_solution/public/management/hooks/policy/use_fetch_endpoint_policy_agent_summary.ts b/x-pack/plugins/security_solution/public/management/hooks/policy/use_fetch_endpoint_policy_agent_summary.ts new file mode 100644 index 0000000000000..929665ee1a290 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/hooks/policy/use_fetch_endpoint_policy_agent_summary.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { UseQueryOptions, UseQueryResult } from '@tanstack/react-query'; +import type { IHttpFetchError } from '@kbn/core-http-browser'; +import type { GetAgentStatusResponse } from '@kbn/fleet-plugin/common'; +import { useQuery } from '@tanstack/react-query'; +import { agentRouteService } from '@kbn/fleet-plugin/common'; +import { useHttp } from '../../../common/lib/kibana'; + +type EndpointPolicyAgentSummary = GetAgentStatusResponse['results']; + +export const useFetchAgentByAgentPolicySummary = ( + /** + * The Fleet Agent Policy ID (NOT the endpoint policy id) + */ + agentPolicyId: string, + options: UseQueryOptions = {} +): UseQueryResult => { + const http = useHttp(); + + return useQuery({ + queryKey: ['get-policy-agent-summary', agentPolicyId], + ...options, + queryFn: async () => { + return ( + await http.get(agentRouteService.getStatusPath(), { + query: { policyId: agentPolicyId }, + }) + ).results; + }, + }); +}; diff --git a/x-pack/plugins/security_solution/public/management/hooks/policy/use_update_endpoint_policy.ts b/x-pack/plugins/security_solution/public/management/hooks/policy/use_update_endpoint_policy.ts new file mode 100644 index 0000000000000..a81ca3cb4f30d --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/hooks/policy/use_update_endpoint_policy.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query'; +import type { IHttpFetchError } from '@kbn/core-http-browser'; +import { useMutation } from '@tanstack/react-query'; +import { packagePolicyRouteService } from '@kbn/fleet-plugin/common'; +import { getPolicyDataForUpdate } from '../../../../common/endpoint/service/policy'; +import { useHttp } from '../../../common/lib/kibana'; +import type { PolicyData } from '../../../../common/endpoint/types'; +import type { UpdatePolicyResponse } from '../../pages/policy/types'; + +interface UpdateParams { + policy: PolicyData; +} + +type UseUpdateEndpointPolicyOptions = UseMutationOptions< + UpdatePolicyResponse, + IHttpFetchError, + UpdateParams +>; + +type UseUpdateEndpointPolicyResult = UseMutationResult< + UpdatePolicyResponse, + IHttpFetchError, + UpdateParams +>; + +export const useUpdateEndpointPolicy = ( + options?: UseUpdateEndpointPolicyOptions +): UseUpdateEndpointPolicyResult => { + const http = useHttp(); + + return useMutation(({ policy }) => { + const update = getPolicyDataForUpdate(policy); + + return http.put(packagePolicyRouteService.getUpdatePath(policy.id), { + body: JSON.stringify(update), + }); + }, options); +}; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/models/policy_details_config.ts b/x-pack/plugins/security_solution/public/management/pages/policy/models/policy_details_config.ts deleted file mode 100644 index e4bf68d337bbf..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/models/policy_details_config.ts +++ /dev/null @@ -1,23 +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 { cloneDeep } from 'lodash'; -import type { UIPolicyConfig } from '../../../../../common/endpoint/types'; - -/** - * Returns cloned `configuration` with `value` set by the `keyPath`. - */ -export const setIn = - (a: UIPolicyConfig) => - (key: Key) => - (subKey: SubKey) => - (leafKey: LeafKey) => - (v: V): UIPolicyConfig => { - const c = cloneDeep(a); - c[key][subKey][leafKey] = v; - return c; - }; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/selectors/policy_settings_selectors.ts b/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/selectors/policy_settings_selectors.ts index 97d6886a49d37..5eac0615cc090 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/selectors/policy_settings_selectors.ts +++ b/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/selectors/policy_settings_selectors.ts @@ -186,14 +186,6 @@ export const policyConfig: (s: PolicyDetailsState) => UIPolicyConfig = createSel } ); -export const isAntivirusRegistrationEnabled = createSelector(policyConfig, (uiPolicyConfig) => { - return uiPolicyConfig.windows.antivirus_registration.enabled; -}); - -export const isCredentialHardeningEnabled = createSelector(policyConfig, (uiPolicyConfig) => { - return uiPolicyConfig.windows.attack_surface_reduction.credential_hardening.enabled; -}); - /** is there an api call in flight */ export const isLoading = (state: PolicyDetailsState) => state.isLoading; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/agents_summary.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/components/agents_summary.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/management/pages/policy/view/agents_summary.tsx rename to x-pack/plugins/security_solution/public/management/pages/policy/view/components/agents_summary.tsx diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/components/antivirus_registration_form/index.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/components/antivirus_registration_form/index.tsx deleted file mode 100644 index 7d28619e17e6e..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/components/antivirus_registration_form/index.tsx +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { memo, useCallback } from 'react'; -import { useDispatch } from 'react-redux'; -import { i18n } from '@kbn/i18n'; -import { EuiSpacer, EuiSwitch, EuiText } from '@elastic/eui'; - -import { OperatingSystem } from '@kbn/securitysolution-utils'; -import { isAntivirusRegistrationEnabled } from '../../../store/policy_details/selectors'; -import { useShowEditableFormFields, usePolicyDetailsSelector } from '../../policy_hooks'; -import { ConfigForm } from '../config_form'; - -const TRANSLATIONS: Readonly<{ [K in 'title' | 'description' | 'label']: string }> = { - title: i18n.translate( - 'xpack.securitySolution.endpoint.policy.details.antivirusRegistration.type', - { - defaultMessage: 'Register as antivirus', - } - ), - description: i18n.translate( - 'xpack.securitySolution.endpoint.policy.details.antivirusRegistration.explanation', - { - defaultMessage: - 'Toggle on to register Elastic as an official Antivirus solution for Windows OS. ' + - 'This will also disable Windows Defender.', - } - ), - label: i18n.translate( - 'xpack.securitySolution.endpoint.policy.details.antivirusRegistration.toggle', - { - defaultMessage: 'Register as antivirus', - } - ), -}; - -export const AntivirusRegistrationForm = memo(() => { - const antivirusRegistrationEnabled = usePolicyDetailsSelector(isAntivirusRegistrationEnabled); - const dispatch = useDispatch(); - const showEditableFormFields = useShowEditableFormFields(); - - const handleSwitchChange = useCallback( - (event) => - dispatch({ - type: 'userChangedAntivirusRegistration', - payload: { - enabled: event.target.checked, - }, - }), - [dispatch] - ); - - return ( - - {TRANSLATIONS.description} - - - - ); -}); - -AntivirusRegistrationForm.displayName = 'AntivirusRegistrationForm'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/components/attack_surface_reduction_form/index.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/components/attack_surface_reduction_form/index.tsx deleted file mode 100644 index 235fef2aeee8d..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/components/attack_surface_reduction_form/index.tsx +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { memo, useCallback } from 'react'; -import { useDispatch } from 'react-redux'; -import { i18n } from '@kbn/i18n'; -import { EuiSwitch } from '@elastic/eui'; - -import { OperatingSystem } from '@kbn/securitysolution-utils'; -import { isCredentialHardeningEnabled } from '../../../store/policy_details/selectors'; -import { useShowEditableFormFields, usePolicyDetailsSelector } from '../../policy_hooks'; -import { ConfigForm } from '../config_form'; - -const TRANSLATIONS: Readonly<{ [K in 'title' | 'label']: string }> = { - title: i18n.translate( - 'xpack.securitySolution.endpoint.policy.details.attackSurfaceReduction.type', - { - defaultMessage: 'Attack surface reduction', - } - ), - label: i18n.translate( - 'xpack.securitySolution.endpoint.policy.details.credentialHardening.toggle', - { - defaultMessage: 'Credential hardening', - } - ), -}; - -export const AttackSurfaceReductionForm = memo(() => { - const credentialHardeningEnabled = usePolicyDetailsSelector(isCredentialHardeningEnabled); - const dispatch = useDispatch(); - const showEditableFormFields = useShowEditableFormFields(); - - const handleSwitchChange = useCallback( - (event) => - dispatch({ - type: 'userChangedCredentialHardening', - payload: { - enabled: event.target.checked, - }, - }), - [dispatch] - ); - - return ( - - - - ); -}); - -AttackSurfaceReductionForm.displayName = 'AttackSurfaceReductionForm'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/components/config_form/index.stories.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/components/config_form/index.stories.tsx deleted file mode 100644 index 79e32cf2e3672..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/components/config_form/index.stories.tsx +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { ThemeProvider } from 'styled-components'; -import { addDecorator, storiesOf } from '@storybook/react'; -import { euiLightVars } from '@kbn/ui-theme'; -import { EuiCheckbox, EuiSpacer, EuiSwitch, EuiText } from '@elastic/eui'; - -import { OperatingSystem } from '@kbn/securitysolution-utils'; - -import { ConfigForm } from '.'; - -addDecorator((storyFn) => ( - ({ eui: euiLightVars, darkMode: false })}>{storyFn()} -)); - -storiesOf('PolicyDetails/ConfigForm', module) - .add('One OS', () => { - return ( - - {'Some content'} - - ); - }) - .add('Multiple OSs', () => { - return ( - - {'Some content'} - - ); - }) - .add('Complex content', () => { - return ( - - - {'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ' + - 'et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut ' + - 'aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum ' + - 'dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia ' + - 'deserunt mollit anim id est laborum.'} - - - {}} /> - - {}} /> - {}} /> - {}} /> - - ); - }) - .add('Right corner content', () => { - const toggle = {}} />; - - return ( - - {'Some content'} - - ); - }); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/components/events_form/index.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/components/events_form/index.tsx deleted file mode 100644 index a3a0f8c325b0e..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/components/events_form/index.tsx +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useContext, useCallback } from 'react'; -import { i18n } from '@kbn/i18n'; -import { - EuiCheckbox, - EuiSpacer, - EuiText, - htmlIdGenerator, - EuiIconTip, - EuiBetaBadge, - EuiFlexItem, - EuiFlexGroup, -} from '@elastic/eui'; -import { OperatingSystem } from '@kbn/securitysolution-utils'; -import { ThemeContext } from 'styled-components'; -import type { - PolicyOperatingSystem, - UIPolicyConfig, -} from '../../../../../../../common/endpoint/types'; -import { useShowEditableFormFields, usePolicyDetailsSelector } from '../../policy_hooks'; -import { policyConfig } from '../../../store/policy_details/selectors'; -import { ConfigForm, ConfigFormHeading } from '../config_form'; - -const OPERATING_SYSTEM_TO_TEST_SUBJ: { [K in OperatingSystem]: string } = { - [OperatingSystem.WINDOWS]: 'Windows', - [OperatingSystem.LINUX]: 'Linux', - [OperatingSystem.MAC]: 'Mac', -}; - -interface OperatingSystemToOsMap { - [OperatingSystem.WINDOWS]: PolicyOperatingSystem.windows; - [OperatingSystem.LINUX]: PolicyOperatingSystem.linux; - [OperatingSystem.MAC]: PolicyOperatingSystem.mac; -} - -export type ProtectionField = - keyof UIPolicyConfig[OperatingSystemToOsMap[T]]['events']; - -export type EventFormSelection = { [K in ProtectionField]: boolean }; - -export interface EventFormOption { - name: string; - protectionField: ProtectionField; -} - -export interface SupplementalEventFormOption { - title?: string; - description?: string; - name: string; - protectionField: ProtectionField; - tooltipText?: string; - beta?: boolean; - indented?: boolean; - isDisabled?(policyConfig: UIPolicyConfig): boolean; -} - -export interface EventsFormProps { - os: T; - options: ReadonlyArray>; - selection: EventFormSelection; - onValueSelection: (value: ProtectionField, selected: boolean) => void; - supplementalOptions?: ReadonlyArray>; -} - -const InnerEventsForm = ({ - os, - options, - selection, - onValueSelection, - supplementalOptions, -}: EventsFormProps) => { - const showEditableFormFields = useShowEditableFormFields(); - const policyDetailsConfig = usePolicyDetailsSelector(policyConfig); - const theme = useContext(ThemeContext); - const countSelected = useCallback(() => { - const supplementalSelectionFields: string[] = supplementalOptions - ? supplementalOptions.map((value) => value.protectionField as string) - : []; - return Object.entries(selection).filter(([key, value]) => - !supplementalSelectionFields.includes(key) ? value : false - ).length; - }, [selection, supplementalOptions]); - - return ( - - {i18n.translate( - 'xpack.securitySolution.endpoint.policy.details.eventCollectionsEnabled', - { - defaultMessage: '{selected} / {total} event collections enabled', - values: { - selected: countSelected(), - total: options.length, - }, - } - )} - - } - > - - {i18n.translate('xpack.securitySolution.endpoint.policyDetailsConfig.eventingEvents', { - defaultMessage: 'Events', - })} - - - {options.map(({ name, protectionField }) => { - return ( - onValueSelection(protectionField, event.target.checked)} - disabled={!showEditableFormFields} - /> - ); - })} - {supplementalOptions && - supplementalOptions.map( - ({ - title, - description, - name, - protectionField, - tooltipText, - beta, - indented, - isDisabled, - }) => { - return ( -

- {title && ( - <> - - {title} - - )} - {description && ( - <> - - - {description} - - - )} - - - - onValueSelection(protectionField, event.target.checked)} - disabled={ - !showEditableFormFields || - (isDisabled ? isDisabled(policyDetailsConfig) : false) - } - /> - - {tooltipText && ( - - - - )} - {beta && ( - - - - )} - -
- ); - } - )} - - ); -}; - -InnerEventsForm.displayName = 'EventsForm'; - -export const EventsForm = React.memo(InnerEventsForm) as typeof InnerEventsForm; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/index.ts b/x-pack/plugins/security_solution/public/management/pages/policy/view/index.ts index 540484a710913..d8beeec8b9d60 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/index.ts +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/index.ts @@ -7,4 +7,3 @@ export * from './policy_list'; export * from './policy_details'; -export * from './policy_advanced'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_edit_extension/endpoint_policy_edit_extension.test.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_edit_extension/endpoint_policy_edit_extension.test.tsx index 71bad39304740..ab6c61fef54a2 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_edit_extension/endpoint_policy_edit_extension.test.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_edit_extension/endpoint_policy_edit_extension.test.tsx @@ -14,6 +14,8 @@ import type { AppContextTestRender } from '../../../../../../common/mock/endpoin import { EndpointPolicyEditExtension } from './endpoint_policy_edit_extension'; import { createFleetContextRendererMock } from '../mocks'; import { getUserPrivilegesMockDefaultValue } from '../../../../../../common/components/user_privileges/__mocks__'; +import { FleetPackagePolicyGenerator } from '../../../../../../../common/endpoint/data_generators/fleet_package_policy_generator'; +import { getPolicyDataForUpdate } from '../../../../../../../common/endpoint/service/policy'; jest.mock('../../../../../../common/components/user_privileges'); const useUserPrivilegesMock = useUserPrivileges as jest.Mock; @@ -29,12 +31,16 @@ describe('When displaying the EndpointPolicyEditExtension fleet UI extension', ( beforeEach(() => { const mockedTestContext = createFleetContextRendererMock(); + const policy = new FleetPackagePolicyGenerator('seed').generateEndpointPackagePolicy({ + id: 'someid', + }); + const newPolicy = getPolicyDataForUpdate(policy); render = () => mockedTestContext.render( ); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_edit_extension/endpoint_policy_edit_extension.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_edit_extension/endpoint_policy_edit_extension.tsx index a9037ef6c3bb2..fab55babae419 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_edit_extension/endpoint_policy_edit_extension.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_edit_extension/endpoint_policy_edit_extension.tsx @@ -5,136 +5,68 @@ * 2.0. */ -import React, { memo, useEffect, useState } from 'react'; -import { EuiCallOut, EuiLoadingSpinner, EuiSpacer, EuiText } from '@elastic/eui'; +import React, { memo, useCallback } from 'react'; +import { EuiSpacer, EuiText } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { useDispatch } from 'react-redux'; -import type { - PackagePolicyEditExtensionComponentProps, - NewPackagePolicy, -} from '@kbn/fleet-plugin/public'; +import type { PackagePolicyEditExtensionComponentProps } from '@kbn/fleet-plugin/public'; +import { cloneDeep } from 'lodash'; +import { useUserPrivileges } from '../../../../../../common/components/user_privileges'; +import type { PolicySettingsFormProps } from '../../policy_settings_form/policy_settings_form'; +import type { NewPolicyData } from '../../../../../../../common/endpoint/types'; import { EndpointPolicyArtifactCards } from './components/endpoint_policy_artifact_cards'; -import { getPolicyDetailPath } from '../../../../../common/routing'; -import { PolicyDetailsForm } from '../../policy_details_form'; -import type { AppAction } from '../../../../../../common/store/actions'; -import { usePolicyDetailsSelector } from '../../policy_hooks'; -import { - apiError, - policyDetails, - policyDetailsForUpdate, -} from '../../../store/policy_details/selectors'; +import { PolicySettingsForm } from '../../policy_settings_form'; /** * Exports Endpoint-specific package policy instructions * for use in the Ingest app create / edit package policy */ export const EndpointPolicyEditExtension = memo( - ({ policy, onChange }) => { - return ( - <> - - - - ); - } -); -EndpointPolicyEditExtension.displayName = 'EndpointPolicyEditExtension'; + ({ policy, onChange, newPolicy: _newPolicy }) => { + const policyUpdates = _newPolicy as NewPolicyData; + const endpointPolicySettings = policyUpdates.inputs[0].config.policy.value; + const { canAccessFleet } = useUserPrivileges().endpointPrivileges; -const WrappedPolicyDetailsForm = memo<{ - policyId: string; - onChange: PackagePolicyEditExtensionComponentProps['onChange']; -}>(({ policyId, onChange }) => { - const dispatch = useDispatch<(a: AppAction) => void>(); - const updatedPolicy = usePolicyDetailsSelector(policyDetailsForUpdate); - const endpointPolicyDetails = usePolicyDetailsSelector(policyDetails); - const endpointDetailsLoadingError = usePolicyDetailsSelector(apiError); - const [, setLastUpdatedPolicy] = useState(updatedPolicy); + const endpointPolicySettingsOnChangeHandler: PolicySettingsFormProps['onChange'] = useCallback( + ({ isValid, updatedPolicy }) => { + const newPolicyInputs = cloneDeep(policyUpdates.inputs); + newPolicyInputs[0].config.policy.value = updatedPolicy; - // When the form is initially displayed, trigger the Redux middleware which is based on - // the location information stored via the `userChangedUrl` action. - useEffect(() => { - dispatch({ - type: 'userChangedUrl', - payload: { - hash: '', - pathname: getPolicyDetailPath(policyId, ''), - search: '', + onChange({ + isValid, + updatedPolicy: { inputs: newPolicyInputs }, + }); }, - }); - - // When form is unloaded, reset the redux store - return () => { - dispatch({ - type: 'userChangedUrl', - payload: { - hash: '', - pathname: '/', - search: '', - }, - }); - }; - }, [dispatch, policyId]); + [onChange, policyUpdates.inputs] + ); - useEffect(() => { - // Currently, the `onChange` callback provided by the fleet UI extension is regenerated every - // time the policy data is updated, which means this will go into a continuous loop if we don't - // actually check to see if an update should be reported back to fleet - setLastUpdatedPolicy((prevState) => { - if (prevState === updatedPolicy) { - return prevState; - } + return ( + <> + +
+ - if (updatedPolicy) { - onChange({ - isValid: true, - // send up only the updated policy data which is stored in the `inputs` section. - // All other attributes (like name, id) are updated from the Fleet form, so we want to - // ensure we don't override it. - updatedPolicy: { - // Casting is needed due to the use of `Immutable<>` in our store data - inputs: updatedPolicy.inputs as unknown as NewPackagePolicy['inputs'], - }, - }); - } +
+ +
+ +
+
- return updatedPolicy; - }); - }, [onChange, updatedPolicy]); + - return ( -
- -
- -
- -
-
- - {endpointDetailsLoadingError ? ( - - } - iconType="warning" - color="warning" - data-test-subj="endpiontPolicySettingsLoadingError" - > - {endpointDetailsLoadingError.message} - - ) : !endpointPolicyDetails ? ( - - ) : ( - - )} -
-
- ); -}); -WrappedPolicyDetailsForm.displayName = 'WrappedPolicyDetailsForm'; +
+
+ + ); + } +); +EndpointPolicyEditExtension.displayName = 'EndpointPolicyEditExtension'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_advanced.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_advanced.tsx deleted file mode 100644 index 35141c4cf6d8b..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_advanced.tsx +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useCallback } from 'react'; -import { useDispatch } from 'react-redux'; -import { - EuiCallOut, - EuiFieldText, - EuiFlexGroup, - EuiFlexItem, - EuiFormRow, - EuiIconTip, - EuiPanel, - EuiSpacer, - EuiText, -} from '@elastic/eui'; -import { cloneDeep } from 'lodash'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { i18n } from '@kbn/i18n'; -import { policyConfig } from '../store/policy_details/selectors'; -import { useShowEditableFormFields, usePolicyDetailsSelector } from './policy_hooks'; -import { AdvancedPolicySchema } from '../models/advanced_policy_schema'; - -function setValue(obj: Record, value: string, path: string[]) { - let newPolicyConfig = obj; - - // First set the value. - for (let i = 0; i < path.length - 1; i++) { - if (!newPolicyConfig[path[i]]) { - newPolicyConfig[path[i]] = {} as Record; - } - newPolicyConfig = newPolicyConfig[path[i]] as Record; - } - newPolicyConfig[path[path.length - 1]] = value; - - // Then, if the user is deleting the value, we need to ensure we clean up the config. - // We delete any sections that are empty, whether that be an empty string, empty object, or undefined. - if (value === '' || value === undefined) { - newPolicyConfig = obj; - for (let k = path.length; k >= 0; k--) { - const nextPath = path.slice(0, k); - for (let i = 0; i < nextPath.length - 1; i++) { - // Traverse and find the next section - newPolicyConfig = newPolicyConfig[nextPath[i]] as Record; - } - if ( - newPolicyConfig[nextPath[nextPath.length - 1]] === undefined || - newPolicyConfig[nextPath[nextPath.length - 1]] === '' || - Object.keys(newPolicyConfig[nextPath[nextPath.length - 1]] as object).length === 0 - ) { - // If we're looking at the `advanced` field, we leave it undefined as opposed to deleting it. - // This is because the UI looks for this field to begin rendering. - if (nextPath[nextPath.length - 1] === 'advanced') { - newPolicyConfig[nextPath[nextPath.length - 1]] = undefined; - // In all other cases, if field is empty, we'll delete it to clean up. - } else { - delete newPolicyConfig[nextPath[nextPath.length - 1]]; - } - newPolicyConfig = obj; - } else { - break; // We are looking at a non-empty section, so we can terminate. - } - } - } -} - -function getValue(obj: Record, path: string[]) { - let currentPolicyConfig = obj; - - for (let i = 0; i < path.length - 1; i++) { - if (currentPolicyConfig[path[i]]) { - currentPolicyConfig = currentPolicyConfig[path[i]] as Record; - } else { - return undefined; - } - } - return currentPolicyConfig[path[path.length - 1]]; -} -const calloutTitle = i18n.translate( - 'xpack.securitySolution.endpoint.policy.advanced.calloutTitle', - { - defaultMessage: 'Proceed with caution!', - } -); -const warningMessage = i18n.translate( - 'xpack.securitySolution.endpoint.policy.advanced.warningMessage', - { - defaultMessage: `This section contains policy values that support advanced use cases. If not configured - properly, these values can cause unpredictable behavior. Please consult documentation - carefully or contact support before editing these values.`, - } -); - -export const AdvancedPolicyForms = React.memo(({ isPlatinumPlus }: { isPlatinumPlus: boolean }) => { - return ( - <> - -

{warningMessage}

-
- - -

- -

-
- - {AdvancedPolicySchema.map((advancedField, index) => { - const configPath = advancedField.key.split('.'); - const failsPlatinumLicenseCheck = !isPlatinumPlus && advancedField.license === 'platinum'; - return ( - !failsPlatinumLicenseCheck && ( - - ) - ); - })} - - - ); -}); - -AdvancedPolicyForms.displayName = 'AdvancedPolicyForms'; - -const PolicyAdvanced = React.memo( - ({ - configPath, - firstSupportedVersion, - lastSupportedVersion, - documentation, - }: { - configPath: string[]; - firstSupportedVersion: string; - lastSupportedVersion?: string; - documentation: string; - }) => { - const showEditableFormFields = useShowEditableFormFields(); - const dispatch = useDispatch(); - const policyDetailsConfig = usePolicyDetailsSelector(policyConfig); - const onChange = useCallback( - (event) => { - if (policyDetailsConfig) { - const newPayload = cloneDeep(policyDetailsConfig); - setValue( - newPayload as unknown as Record, - event.target.value, - configPath - ); - dispatch({ - type: 'userChangedPolicyConfig', - payload: { policyConfig: newPayload }, - }); - } - }, - [dispatch, policyDetailsConfig, configPath] - ); - - const value = - policyDetailsConfig && - getValue(policyDetailsConfig as unknown as Record, configPath); - - return ( - <> - - {configPath.join('.')} - {documentation && ( - - - - )} - - } - labelAppend={ - - {lastSupportedVersion - ? `${firstSupportedVersion}-${lastSupportedVersion}` - : `${firstSupportedVersion}+`} - - } - > - - - - ); - } -); - -PolicyAdvanced.displayName = 'PolicyAdvanced'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details.test.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details.test.tsx index 020ef18ed0d8b..58bb5189332fe 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details.test.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details.test.tsx @@ -28,9 +28,6 @@ import { policyListApiPathHandlers } from '../store/test_mock_utils'; import { PolicyDetails } from './policy_details'; import { APP_UI_ID } from '../../../../../common/constants'; -jest.mock('./policy_forms/components/policy_form_layout', () => ({ - PolicyFormLayout: () => <>, -})); jest.mock('../../../../common/components/user_privileges'); const useUserPrivilegesMock = useUserPrivileges as jest.Mock; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details.tsx index 04d9e14efa5b9..5adf40105255c 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details.tsx @@ -15,7 +15,7 @@ import { } from '@elastic/eui'; import { usePolicyDetailsSelector } from './policy_hooks'; import { policyDetails, agentStatusSummary, apiError } from '../store/policy_details/selectors'; -import { AgentsSummary } from './agents_summary'; +import { AgentsSummary } from './components/agents_summary'; import { PolicyTabs } from './tabs'; import { AdministrationListPage } from '../../../components/administration_list_page'; import type { BackToExternalAppButtonProps } from '../../../components/back_to_external_app_button/back_to_external_app_button'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details_form.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details_form.tsx deleted file mode 100644 index 61947bc5982f4..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details_form.tsx +++ /dev/null @@ -1,131 +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 { EuiButtonEmpty, EuiSkeletonText, EuiSpacer, EuiText } from '@elastic/eui'; -import React, { memo, useCallback, useState } from 'react'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { i18n } from '@kbn/i18n'; -import { useUserPrivileges } from '../../../../common/components/user_privileges'; -import { MalwareProtections } from './policy_forms/protections/malware'; -import { MemoryProtection } from './policy_forms/protections/memory'; -import { BehaviorProtection } from './policy_forms/protections/behavior'; -import { LinuxEvents, MacEvents, WindowsEvents } from './policy_forms/events'; -import { AdvancedPolicyForms } from './policy_advanced'; -import { AntivirusRegistrationForm } from './components/antivirus_registration_form'; -import { AttackSurfaceReductionForm } from './components/attack_surface_reduction_form'; -import { Ransomware } from './policy_forms/protections/ransomware'; -import { LockedPolicyCard } from './policy_forms/locked_card'; -import { useLicense } from '../../../../common/hooks/use_license'; - -const LOCKED_CARD_RAMSOMWARE_TITLE = i18n.translate( - 'xpack.securitySolution.endpoint.policy.details.ransomware', - { - defaultMessage: 'Ransomware', - } -); - -const LOCKED_CARD_MEMORY_TITLE = i18n.translate( - 'xpack.securitySolution.endpoint.policy.details.memory', - { - defaultMessage: 'Memory Threat', - } -); - -const LOCKED_CARD_BEHAVIOR_TITLE = i18n.translate( - 'xpack.securitySolution.endpoint.policy.details.behavior', - { - defaultMessage: 'Malicious Behavior', - } -); - -const LOCKED_CARD_ATTACK_SURFACE_REDUCTION = i18n.translate( - 'xpack.securitySolution.endpoint.policy.details.attack_surface_reduction', - { - defaultMessage: 'Attack Surface Reduction', - } -); - -export const PolicyDetailsForm = memo(() => { - const [showAdvancedPolicy, setShowAdvancedPolicy] = useState(false); - const handleAdvancedPolicyClick = useCallback(() => { - setShowAdvancedPolicy(!showAdvancedPolicy); - }, [showAdvancedPolicy]); - const isPlatinumPlus = useLicense().isPlatinumPlus(); - const { loading: authzLoading } = useUserPrivileges().endpointPrivileges; - - if (authzLoading) { - return ; - } - - return ( - <> - -

- -

-
- - - - - {isPlatinumPlus ? : } - - {isPlatinumPlus ? ( - - ) : ( - - )} - - {isPlatinumPlus ? ( - - ) : ( - - )} - - {isPlatinumPlus ? ( - - ) : ( - - )} - - - -

- -

-
- - - - - - - - - - - - - - - - - {showAdvancedPolicy && } - - ); -}); -PolicyDetailsForm.displayName = 'PolicyDetailsForm'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/policy_form_layout.test.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/policy_form_layout.test.tsx deleted file mode 100644 index 6d07b3784c6c2..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/policy_form_layout.test.tsx +++ /dev/null @@ -1,470 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import type { ReactWrapper } from 'enzyme'; -import { mount } from 'enzyme'; - -import { PolicyFormLayout } from './policy_form_layout'; -import '../../../../../../common/mock/match_media'; -import { EndpointDocGenerator } from '../../../../../../../common/endpoint/generate_data'; -import type { AppContextTestRender } from '../../../../../../common/mock/endpoint'; -import { - createAppRootMockRenderer, - resetReactDomCreatePortalMock, -} from '../../../../../../common/mock/endpoint'; -import { getPolicyDetailPath, getPoliciesPath } from '../../../../../common/routing'; -import { policyListApiPathHandlers } from '../../../store/test_mock_utils'; -import { licenseService } from '../../../../../../common/hooks/use_license'; -import { PACKAGE_POLICY_API_ROOT, AGENT_API_ROUTES } from '@kbn/fleet-plugin/common'; -import { useUserPrivileges as _useUserPrivileges } from '../../../../../../common/components/user_privileges'; -import { getUserPrivilegesMockDefaultValue } from '../../../../../../common/components/user_privileges/__mocks__'; - -jest.mock('../../../../../../common/hooks/use_license'); -jest.mock('../../../../../../common/components/user_privileges'); - -const useUserPrivilegesMock = _useUserPrivileges as jest.Mock; - -describe('Policy Form Layout', () => { - type FindReactWrapperResponse = ReturnType['find']>; - - const policyDetailsPathUrl = getPolicyDetailPath('1'); - const policyListPath = getPoliciesPath(); - const sleep = (ms = 100) => new Promise((wakeup) => setTimeout(wakeup, ms)); - const generator = new EndpointDocGenerator(); - let history: AppContextTestRender['history']; - let coreStart: AppContextTestRender['coreStart']; - let http: typeof coreStart.http; - let render: (ui: Parameters[0]) => ReturnType; - let policyPackagePolicy: ReturnType; - let policyFormLayoutView: ReturnType; - - beforeAll(() => resetReactDomCreatePortalMock()); - - beforeEach(() => { - const appContextMockRenderer = createAppRootMockRenderer(); - const AppWrapper = appContextMockRenderer.AppWrapper; - - ({ history, coreStart } = appContextMockRenderer); - render = (ui) => mount(ui, { wrappingComponent: AppWrapper }); - http = coreStart.http; - }); - - afterEach(() => { - if (policyFormLayoutView) { - policyFormLayoutView.unmount(); - } - jest.clearAllMocks(); - }); - - describe('when displayed with valid id', () => { - let asyncActions: Promise = Promise.resolve(); - - beforeEach(async () => { - policyPackagePolicy = generator.generatePolicyPackagePolicy(); - policyPackagePolicy.id = '1'; - - const policyListApiHandlers = policyListApiPathHandlers(); - - http.get.mockImplementation((...args) => { - const [path] = args; - if (typeof path === 'string') { - // GET datasouce - if (path === `${PACKAGE_POLICY_API_ROOT}/1`) { - asyncActions = asyncActions.then(async (): Promise => sleep()); - return Promise.resolve({ - item: policyPackagePolicy, - success: true, - }); - } - - // GET Agent status for agent policy - if (path === `${AGENT_API_ROUTES.STATUS_PATTERN}`) { - asyncActions = asyncActions.then(async () => sleep()); - return Promise.resolve({ - results: { events: 0, total: 5, online: 3, error: 1, offline: 1 }, - success: true, - }); - } - - // Get package data - // Used in tests that route back to the list - if (policyListApiHandlers[path]) { - asyncActions = asyncActions.then(async () => sleep()); - return Promise.resolve(policyListApiHandlers[path]()); - } - } - - return Promise.reject(new Error(`unknown API call (not MOCKED): ${path}`)); - }); - history.push(policyDetailsPathUrl); - policyFormLayoutView = render(); - - await asyncActions; - policyFormLayoutView.update(); - }); - - it('should NOT display timeline', async () => { - expect(policyFormLayoutView.find('flyoutOverlay')).toHaveLength(0); - }); - - it('should display cancel button', async () => { - const cancelbutton = policyFormLayoutView.find( - 'EuiButtonEmpty[data-test-subj="policyDetailsCancelButton"]' - ); - expect(cancelbutton).toHaveLength(1); - expect(cancelbutton.text()).toEqual('Cancel'); - }); - it('should redirect to policy list when cancel button is clicked', async () => { - const cancelbutton = policyFormLayoutView.find( - 'EuiButtonEmpty[data-test-subj="policyDetailsCancelButton"]' - ); - expect(history.location.pathname).toEqual(policyDetailsPathUrl); - cancelbutton.simulate('click', { button: 0 }); - const navigateToAppMockedCalls = coreStart.application.navigateToApp.mock.calls; - expect(navigateToAppMockedCalls[navigateToAppMockedCalls.length - 1]).toEqual([ - 'securitySolutionUI', - { path: policyListPath }, - ]); - }); - it('should display save button', async () => { - const saveButton = policyFormLayoutView.find( - 'EuiButton[data-test-subj="policyDetailsSaveButton"]' - ); - expect(saveButton).toHaveLength(1); - expect(saveButton.text()).toEqual('Save'); - }); - it('should display beta badge', async () => { - const saveButton = policyFormLayoutView.find('EuiBetaBadge'); - expect(saveButton).toHaveLength(1); - expect(saveButton.text()).toEqual('beta'); - }); - - it('should display minimum Agent version number for User Notification', async () => { - const minVersionsMap = [ - ['malware', '7.11'], - ['ransomware', '7.12'], - ['behavior', '7.15'], - ['memory', '7.15'], - ]; - - for (const [protection, minVersion] of minVersionsMap) { - expect( - policyFormLayoutView - .find(`EuiPanel[data-test-subj="${protection}ProtectionsForm"]`) - .find('EuiText[data-test-subj="policySupportedVersions"]') - .text() - ).toEqual(`Agent version ${minVersion}+`); - } - }); - - it('"Register as antivirus" should be only available for Windows', () => { - const antivirusRegistrationFormTextContent = policyFormLayoutView - .find('EuiPanel[data-test-subj="antivirusRegistrationForm"]') - .text(); - - expect(antivirusRegistrationFormTextContent).toContain('Windows'); - expect(antivirusRegistrationFormTextContent).not.toContain('Linux'); - expect(antivirusRegistrationFormTextContent).not.toContain('Mac'); - - expect(antivirusRegistrationFormTextContent).toContain( - 'Toggle on to register Elastic as an official Antivirus solution for Windows OS. This will also disable Windows Defender.' - ); - }); - - describe('Advanced settings', () => { - let showHideAdvancedSettingsButton: ReactWrapper; - - beforeEach(() => { - showHideAdvancedSettingsButton = policyFormLayoutView.find( - 'EuiButtonEmpty[data-test-subj="advancedPolicyButton"]' - ); - }); - - it('should display "Show advanced settings" button, and hide advanced options on default', () => { - expect(showHideAdvancedSettingsButton.text()).toEqual('Show advanced settings'); - expect( - policyFormLayoutView.find('EuiPanel[data-test-subj="advancedPolicyPanel"]').length - ).toEqual(0); - }); - - it('clicking on "Show/Hide advanced settings" should show/hide advanced settings', () => { - showHideAdvancedSettingsButton.simulate('click'); - - expect(showHideAdvancedSettingsButton.text()).toEqual('Hide advanced settings'); - expect( - policyFormLayoutView.find('EuiPanel[data-test-subj="advancedPolicyPanel"]').length - ).toEqual(1); - - showHideAdvancedSettingsButton.simulate('click'); - - expect( - policyFormLayoutView.find('EuiPanel[data-test-subj="advancedPolicyPanel"]').length - ).toEqual(0); - }); - - it('should display a warning message', () => { - showHideAdvancedSettingsButton.simulate('click'); - - expect( - policyFormLayoutView.find('div[data-test-subj="policyAdvancedSettingsWarning"]').text() - ).toContain( - `This section contains policy values that support advanced use cases. If not configured - properly, these values can cause unpredictable behavior. Please consult documentation - carefully or contact support before editing these values.` - ); - }); - - it('every row should contain a tooltip', () => { - showHideAdvancedSettingsButton.simulate('click'); - - policyFormLayoutView - .find('EuiPanel[data-test-subj="advancedPolicyPanel"]') - .find('EuiFormRow') - .forEach((row) => { - expect(row.find('EuiIconTip').length).toEqual(1); - }); - }); - }); - - describe('when the save button is clicked', () => { - let saveButton: FindReactWrapperResponse; - let confirmModal: FindReactWrapperResponse; - let modalCancelButton: FindReactWrapperResponse; - let modalConfirmButton: FindReactWrapperResponse; - - beforeEach(async () => { - await asyncActions; - policyFormLayoutView.update(); - saveButton = policyFormLayoutView.find('button[data-test-subj="policyDetailsSaveButton"]'); - saveButton.simulate('click'); - policyFormLayoutView.update(); - confirmModal = policyFormLayoutView.find( - 'EuiConfirmModal[data-test-subj="policyDetailsConfirmModal"]' - ); - modalCancelButton = confirmModal.find('button[data-test-subj="confirmModalCancelButton"]'); - modalConfirmButton = confirmModal.find( - 'button[data-test-subj="confirmModalConfirmButton"]' - ); - http.put.mockImplementation((...args) => { - asyncActions = asyncActions.then(async () => sleep()); - const [path] = args; - if (typeof path === 'string') { - if (path === `${PACKAGE_POLICY_API_ROOT}/1`) { - return Promise.resolve({ - item: policyPackagePolicy, - success: true, - }); - } - } - - return Promise.reject(new Error('unknown PUT path!')); - }); - }); - - it('should show a modal confirmation', () => { - expect(confirmModal).toHaveLength(1); - expect( - confirmModal.find('[data-test-subj="confirmModalTitleText"]').first().text() - ).toEqual('Save and deploy changes'); - expect(modalCancelButton.text()).toEqual('Cancel'); - expect(modalConfirmButton.text()).toEqual('Save and deploy changes'); - }); - it('should show info callout if policy is in use', () => { - const warningCallout = confirmModal.find( - 'EuiCallOut[data-test-subj="policyDetailsWarningCallout"]' - ); - expect(warningCallout).toHaveLength(1); - expect(warningCallout.text()).toEqual( - 'This action will update 5 endpointsSaving these changes will apply updates to all endpoints assigned to this agent policy.' - ); - }); - it('should close dialog if cancel button is clicked', () => { - modalCancelButton.simulate('click'); - expect( - policyFormLayoutView.find('EuiConfirmModal[data-test-subj="policyDetailsConfirmModal"]') - ).toHaveLength(0); - }); - it('should update policy and show success notification when confirm button is clicked', async () => { - modalConfirmButton.simulate('click'); - policyFormLayoutView.update(); - // Modal should be closed - expect( - policyFormLayoutView.find('EuiConfirmModal[data-test-subj="policyDetailsConfirmModal"]') - ).toHaveLength(0); - - // API should be called - await asyncActions; - expect(http.put.mock.calls[0][0]).toEqual(`${PACKAGE_POLICY_API_ROOT}/1`); - policyFormLayoutView.update(); - - // Toast notification should be shown - const toastAddMock = coreStart.notifications.toasts.addSuccess.mock; - expect(toastAddMock.calls).toHaveLength(1); - expect(toastAddMock.calls[0][0]).toMatchObject({ - title: 'Success!', - text: expect.any(Function), - }); - }); - it('should show an error notification toast if update fails', async () => { - policyPackagePolicy.id = 'invalid'; - modalConfirmButton.simulate('click'); - - await asyncActions; - policyFormLayoutView.update(); - - // Toast notification should be shown - const toastAddMock = coreStart.notifications.toasts.addDanger.mock; - expect(toastAddMock.calls).toHaveLength(1); - expect(toastAddMock.calls[0][0]).toMatchObject({ - title: 'Failed!', - text: expect.any(String), - }); - }); - }); - - describe('when the subscription tier is platinum or higher', () => { - beforeEach(() => { - (licenseService.isPlatinumPlus as jest.Mock).mockReturnValue(true); - policyFormLayoutView = render(); - }); - - it('malware popup, message customization options and tooltip are shown', () => { - // use query for finding stuff, if it doesn't find it, just returns null - const userNotificationCheckbox = policyFormLayoutView.find( - 'EuiCheckbox[data-test-subj="malwareUserNotificationCheckbox"]' - ); - const userNotificationCustomMessageTextArea = policyFormLayoutView.find( - 'EuiTextArea[data-test-subj="malwareUserNotificationCustomMessage"]' - ); - const tooltip = policyFormLayoutView.find('EuiIconTip[data-test-subj="malwareTooltip"]'); - expect(userNotificationCheckbox).toHaveLength(1); - expect(userNotificationCustomMessageTextArea).toHaveLength(1); - expect(tooltip).toHaveLength(1); - }); - - it('memory protection card and user notification checkbox are shown', () => { - const memory = policyFormLayoutView.find( - 'EuiPanel[data-test-subj="memoryProtectionsForm"]' - ); - const userNotificationCheckbox = policyFormLayoutView.find( - 'EuiCheckbox[data-test-subj="memory_protectionUserNotificationCheckbox"]' - ); - - expect(memory).toHaveLength(1); - expect(userNotificationCheckbox).toHaveLength(1); - }); - - it('behavior protection card and user notification checkbox are shown', () => { - const behavior = policyFormLayoutView.find( - 'EuiPanel[data-test-subj="behaviorProtectionsForm"]' - ); - const userNotificationCheckbox = policyFormLayoutView.find( - 'EuiCheckbox[data-test-subj="behavior_protectionUserNotificationCheckbox"]' - ); - - expect(behavior).toHaveLength(1); - expect(userNotificationCheckbox).toHaveLength(1); - }); - - it('ransomware card is shown', () => { - const ransomware = policyFormLayoutView.find( - 'EuiPanel[data-test-subj="ransomwareProtectionsForm"]' - ); - expect(ransomware).toHaveLength(1); - }); - }); - - describe('when the subscription tier is gold or lower', () => { - beforeEach(() => { - (licenseService.isPlatinumPlus as jest.Mock).mockReturnValue(false); - policyFormLayoutView = render(); - }); - - it('malware popup, message customization options, and tooltip are hidden', () => { - const userNotificationCheckbox = policyFormLayoutView.find( - 'EuiCheckbox[data-test-subj="malwareUserNotificationCheckbox"]' - ); - const userNotificationCustomMessageTextArea = policyFormLayoutView.find( - 'EuiTextArea[data-test-subj="malwareUserNotificationCustomMessage"]' - ); - const tooltip = policyFormLayoutView.find('EuiIconTip[data-test-subj="malwareTooltip"]'); - expect(userNotificationCheckbox).toHaveLength(0); - expect(userNotificationCustomMessageTextArea).toHaveLength(0); - expect(tooltip).toHaveLength(0); - }); - - it('memory protection card, and user notification checkbox are hidden', () => { - const memory = policyFormLayoutView.find( - 'EuiPanel[data-test-subj="memoryProtectionsForm"]' - ); - expect(memory).toHaveLength(0); - const userNotificationCheckbox = policyFormLayoutView.find( - 'EuiCheckbox[data-test-subj="memoryUserNotificationCheckbox"]' - ); - expect(userNotificationCheckbox).toHaveLength(0); - }); - - it('ransomware card is hidden', () => { - const ransomware = policyFormLayoutView.find( - 'EuiPanel[data-test-subj="ransomwareProtectionsForm"]' - ); - expect(ransomware).toHaveLength(0); - }); - - it('shows the locked card in place of paid features', () => { - const lockedCard = policyFormLayoutView.find('EuiCard[data-test-subj="lockedPolicyCard"]'); - expect(lockedCard).toHaveLength(4); - }); - - it('locked card has "Upgrade now" link to cloud server', () => { - const upgradeLinks = policyFormLayoutView.find( - 'EuiLink[data-test-subj="upgradeNowCloudDeploymentLink"]' - ); - upgradeLinks.forEach((link) => { - expect(link.prop('href')).toEqual('https://www.elastic.co/cloud/'); - }); - }); - }); - - describe('and user has only READ privilege', () => { - beforeEach(() => { - const mockedPrivileges = getUserPrivilegesMockDefaultValue(); - mockedPrivileges.endpointPrivileges.canWritePolicyManagement = false; - mockedPrivileges.endpointPrivileges.canAccessFleet = false; - - useUserPrivilegesMock.mockReturnValue(mockedPrivileges); - - policyFormLayoutView = render(); - }); - - afterEach(() => { - useUserPrivilegesMock.mockImplementation(getUserPrivilegesMockDefaultValue); - }); - - it('should not display the Save button', () => { - expect( - policyFormLayoutView.find('EuiButton[data-test-subj="policyDetailsSaveButton"]') - ).toHaveLength(0); - }); - - it('should display all form controls as disabled', () => { - policyFormLayoutView - .find('button[data-test-subj="advancedPolicyButton"]') - .simulate('click'); - - const inputElements = policyFormLayoutView.find('input'); - - expect(inputElements.length).toBeGreaterThan(0); - - inputElements.forEach((element) => { - expect(element.prop('disabled')).toBe(true); - }); - }); - }); - }); -}); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/protection_radio.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/protection_radio.tsx deleted file mode 100644 index ec69dc8115b02..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/protection_radio.tsx +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useCallback, useMemo } from 'react'; -import { useDispatch } from 'react-redux'; -import { cloneDeep } from 'lodash'; -import { htmlIdGenerator, EuiRadio } from '@elastic/eui'; -import type { ImmutableArray, UIPolicyConfig } from '../../../../../../../common/endpoint/types'; -import { ProtectionModes } from '../../../../../../../common/endpoint/types'; -import type { MacPolicyProtection, LinuxPolicyProtection, PolicyProtection } from '../../../types'; -import { useShowEditableFormFields, usePolicyDetailsSelector } from '../../policy_hooks'; -import { policyConfig } from '../../../store/policy_details/selectors'; -import type { AppAction } from '../../../../../../common/store/actions'; -import { useLicense } from '../../../../../../common/hooks/use_license'; - -export const ProtectionRadio = React.memo( - ({ - protection, - protectionMode, - osList, - label, - }: { - protection: PolicyProtection; - protectionMode: ProtectionModes; - osList: ImmutableArray>; - label: string; - }) => { - const policyDetailsConfig = usePolicyDetailsSelector(policyConfig); - const dispatch = useDispatch<(action: AppAction) => void>(); - const radioButtonId = useMemo(() => htmlIdGenerator()(), []); - const selected = policyDetailsConfig && policyDetailsConfig.windows[protection].mode; - const isPlatinumPlus = useLicense().isPlatinumPlus(); - const showEditableFormFields = useShowEditableFormFields(); - - const handleRadioChange = useCallback(() => { - if (policyDetailsConfig) { - const newPayload = cloneDeep(policyDetailsConfig); - for (const os of osList) { - if (os === 'windows') { - newPayload[os][protection].mode = protectionMode; - } else if (os === 'mac') { - newPayload[os][protection as MacPolicyProtection].mode = protectionMode; - } else if (os === 'linux') { - newPayload[os][protection as LinuxPolicyProtection].mode = protectionMode; - } - if (isPlatinumPlus) { - if (os === 'windows') { - if (protectionMode === ProtectionModes.prevent) { - newPayload[os].popup[protection].enabled = true; - } else { - newPayload[os].popup[protection].enabled = false; - } - } else if (os === 'mac') { - if (protectionMode === ProtectionModes.prevent) { - newPayload[os].popup[protection as MacPolicyProtection].enabled = true; - } else { - newPayload[os].popup[protection as MacPolicyProtection].enabled = false; - } - } else if (os === 'linux') { - if (protectionMode === ProtectionModes.prevent) { - newPayload[os].popup[protection as LinuxPolicyProtection].enabled = true; - } else { - newPayload[os].popup[protection as LinuxPolicyProtection].enabled = false; - } - } - } - } - dispatch({ - type: 'userChangedPolicyConfig', - payload: { policyConfig: newPayload }, - }); - } - }, [dispatch, protectionMode, policyDetailsConfig, isPlatinumPlus, osList, protection]); - - /** - * Passing an arbitrary id because EuiRadio - * requires an id if label is passed - */ - - return ( - - ); - } -); - -ProtectionRadio.displayName = 'ProtectionRadio'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/protection_switch.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/protection_switch.tsx deleted file mode 100644 index 20536a1905382..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/protection_switch.tsx +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useCallback } from 'react'; -import { useDispatch } from 'react-redux'; -import { i18n } from '@kbn/i18n'; -import { EuiSwitch } from '@elastic/eui'; -import { cloneDeep } from 'lodash'; -import { useLicense } from '../../../../../../common/hooks/use_license'; -import { policyConfig } from '../../../store/policy_details/selectors'; -import { useShowEditableFormFields, usePolicyDetailsSelector } from '../../policy_hooks'; -import type { AppAction } from '../../../../../../common/store/actions'; -import type { - ImmutableArray, - UIPolicyConfig, - AdditionalOnSwitchChangeParams, -} from '../../../../../../../common/endpoint/types'; -import { ProtectionModes } from '../../../../../../../common/endpoint/types'; -import type { PolicyProtection, MacPolicyProtection, LinuxPolicyProtection } from '../../../types'; - -export const ProtectionSwitch = React.memo( - ({ - protection, - protectionLabel, - osList, - additionalOnSwitchChange, - }: { - protection: PolicyProtection; - protectionLabel?: string; - osList: ImmutableArray>; - additionalOnSwitchChange?: ({ - value, - policyConfigData, - protectionOsList, - }: AdditionalOnSwitchChangeParams) => UIPolicyConfig; - }) => { - const policyDetailsConfig = usePolicyDetailsSelector(policyConfig); - const isPlatinumPlus = useLicense().isPlatinumPlus(); - const showEditableFormFields = useShowEditableFormFields(); - const dispatch = useDispatch<(action: AppAction) => void>(); - const selected = policyDetailsConfig && policyDetailsConfig.windows[protection].mode; - - const handleSwitchChange = useCallback( - (event) => { - if (policyDetailsConfig) { - const newPayload = cloneDeep(policyDetailsConfig); - if (event.target.checked === false) { - for (const os of osList) { - if (os === 'windows') { - newPayload[os][protection].mode = ProtectionModes.off; - } else if (os === 'mac') { - newPayload[os][protection as MacPolicyProtection].mode = ProtectionModes.off; - } else if (os === 'linux') { - newPayload[os][protection as LinuxPolicyProtection].mode = ProtectionModes.off; - } - if (isPlatinumPlus) { - if (os === 'windows') { - newPayload[os].popup[protection].enabled = event.target.checked; - } else if (os === 'mac') { - newPayload[os].popup[protection as MacPolicyProtection].enabled = - event.target.checked; - } else if (os === 'linux') { - newPayload[os].popup[protection as LinuxPolicyProtection].enabled = - event.target.checked; - } - } - } - } else { - for (const os of osList) { - if (os === 'windows') { - newPayload[os][protection].mode = ProtectionModes.prevent; - } else if (os === 'mac') { - newPayload[os][protection as MacPolicyProtection].mode = ProtectionModes.prevent; - } else if (os === 'linux') { - newPayload[os][protection as LinuxPolicyProtection].mode = ProtectionModes.prevent; - } - if (isPlatinumPlus) { - if (os === 'windows') { - newPayload[os].popup[protection].enabled = event.target.checked; - } else if (os === 'mac') { - newPayload[os].popup[protection as MacPolicyProtection].enabled = - event.target.checked; - } else if (os === 'linux') { - newPayload[os].popup[protection as LinuxPolicyProtection].enabled = - event.target.checked; - } - } - } - } - if (additionalOnSwitchChange) { - dispatch({ - type: 'userChangedPolicyConfig', - payload: { - policyConfig: additionalOnSwitchChange({ - value: event.target.checked, - policyConfigData: newPayload, - protectionOsList: osList, - }), - }, - }); - } else { - dispatch({ - type: 'userChangedPolicyConfig', - payload: { policyConfig: newPayload }, - }); - } - } - }, - [dispatch, policyDetailsConfig, isPlatinumPlus, protection, osList, additionalOnSwitchChange] - ); - - return ( - - ); - } -); - -ProtectionSwitch.displayName = 'ProtectionSwitch'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/radio_buttons.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/radio_buttons.tsx deleted file mode 100644 index ce4d86e037899..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/radio_buttons.tsx +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useMemo } from 'react'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiSpacer, EuiFlexItem, EuiFlexGroup } from '@elastic/eui'; -import type { - Immutable, - ImmutableArray, - UIPolicyConfig, -} from '../../../../../../../common/endpoint/types'; -import { ProtectionModes } from '../../../../../../../common/endpoint/types'; -import type { PolicyProtection } from '../../../types'; -import { ConfigFormHeading } from '../../components/config_form'; -import { ProtectionRadio } from './protection_radio'; - -export const RadioButtons = React.memo( - ({ - protection, - osList, - }: { - protection: PolicyProtection; - osList: ImmutableArray>; - }) => { - const radios: Immutable< - Array<{ - id: ProtectionModes; - label: string; - }> - > = useMemo(() => { - return [ - { - id: ProtectionModes.detect, - label: i18n.translate('xpack.securitySolution.endpoint.policy.details.detect', { - defaultMessage: 'Detect', - }), - }, - { - id: ProtectionModes.prevent, - label: i18n.translate('xpack.securitySolution.endpoint.policy.details.prevent', { - defaultMessage: 'Prevent', - }), - }, - ]; - }, []); - - return ( - <> - - - - - - - - - - - - - - ); - } -); - -RadioButtons.displayName = 'RadioButtons'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/supported_version.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/supported_version.tsx deleted file mode 100644 index b3cf322f70fac..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/supported_version.tsx +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiText } from '@elastic/eui'; -import { popupVersionsMap } from '../protections/popup_options_to_versions'; - -export const SupportedVersionNotice = ({ optionName }: { optionName: string }) => { - const version = popupVersionsMap.get(optionName); - if (!version) { - return null; - } - - return ( - - - - - - ); -}; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/user_notification.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/user_notification.tsx deleted file mode 100644 index baecfef415a02..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/user_notification.tsx +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useCallback } from 'react'; -import { useDispatch } from 'react-redux'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { cloneDeep } from 'lodash'; -import { - EuiSpacer, - EuiFlexItem, - EuiFlexGroup, - EuiCheckbox, - EuiIconTip, - EuiText, - EuiTextArea, -} from '@elastic/eui'; -import type { ImmutableArray, UIPolicyConfig } from '../../../../../../../common/endpoint/types'; -import { ProtectionModes } from '../../../../../../../common/endpoint/types'; -import type { PolicyProtection, MacPolicyProtection, LinuxPolicyProtection } from '../../../types'; -import { ConfigFormHeading } from '../../components/config_form'; -import { useShowEditableFormFields, usePolicyDetailsSelector } from '../../policy_hooks'; -import { policyConfig } from '../../../store/policy_details/selectors'; -import type { AppAction } from '../../../../../../common/store/actions'; -import { SupportedVersionNotice } from './supported_version'; - -export const UserNotification = React.memo( - ({ - protection, - osList, - }: { - protection: PolicyProtection; - osList: ImmutableArray>; - }) => { - const showEditableFormFields = useShowEditableFormFields(); - const policyDetailsConfig = usePolicyDetailsSelector(policyConfig); - const dispatch = useDispatch<(action: AppAction) => void>(); - const selected = policyDetailsConfig && policyDetailsConfig.windows[protection].mode; - const userNotificationSelected = - policyDetailsConfig && policyDetailsConfig.windows.popup[protection].enabled; - const userNotificationMessage = - policyDetailsConfig && policyDetailsConfig.windows.popup[protection].message; - - const handleUserNotificationCheckbox = useCallback( - (event) => { - if (policyDetailsConfig) { - const newPayload = cloneDeep(policyDetailsConfig); - for (const os of osList) { - if (os === 'windows') { - newPayload[os].popup[protection].enabled = event.target.checked; - } else if (os === 'mac') { - newPayload[os].popup[protection as MacPolicyProtection].enabled = - event.target.checked; - } else if (os === 'linux') { - newPayload[os].popup[protection as LinuxPolicyProtection].enabled = - event.target.checked; - } - } - dispatch({ - type: 'userChangedPolicyConfig', - payload: { policyConfig: newPayload }, - }); - } - }, - [policyDetailsConfig, dispatch, protection, osList] - ); - - const handleCustomUserNotification = useCallback( - (event) => { - if (policyDetailsConfig) { - const newPayload = cloneDeep(policyDetailsConfig); - for (const os of osList) { - if (os === 'windows') { - newPayload[os].popup[protection].message = event.target.value; - } else if (os === 'mac') { - newPayload[os].popup[protection as MacPolicyProtection].message = event.target.value; - } else if (os === 'linux') { - newPayload[os].popup[protection as LinuxPolicyProtection].message = - event.target.value; - } - } - dispatch({ - type: 'userChangedPolicyConfig', - payload: { policyConfig: newPayload }, - }); - } - }, - [policyDetailsConfig, dispatch, protection, osList] - ); - - const tooltipProtectionText = (protectionType: PolicyProtection) => { - if (protectionType === 'memory_protection') { - return i18n.translate( - 'xpack.securitySolution.endpoint.policyDetail.memoryProtectionTooltip', - { - defaultMessage: 'memory threat', - } - ); - } else if (protectionType === 'behavior_protection') { - return i18n.translate( - 'xpack.securitySolution.endpoint.policyDetail.behaviorProtectionTooltip', - { - defaultMessage: 'malicious behavior', - } - ); - } else { - return protectionType; - } - }; - - const tooltipBracketText = (protectionType: PolicyProtection) => { - if (protectionType === 'memory_protection' || protection === 'behavior_protection') { - return i18n.translate('xpack.securitySolution.endpoint.policyDetail.rule', { - defaultMessage: 'rule', - }); - } else { - return i18n.translate('xpack.securitySolution.endpoint.policyDetail.filename', { - defaultMessage: 'filename', - }); - } - }; - - return ( - <> - - - - - - - - {userNotificationSelected && ( - <> - - - - -

- -

-
-
- - - - - - - } - /> - -
- - - - )} - - ); - } -); - -UserNotification.displayName = 'UserNotification'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/locked_card.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/locked_card.tsx deleted file mode 100644 index 5d503a9667d39..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/locked_card.tsx +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { memo } from 'react'; -import { - EuiCard, - EuiIcon, - EuiTextColor, - EuiLink, - EuiFlexGroup, - EuiFlexItem, - EuiText, -} from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; -import styled from 'styled-components'; -import { i18n } from '@kbn/i18n'; - -const LockedPolicyDiv = styled.div` - .euiCard__betaBadgeWrapper { - .euiCard__betaBadge { - width: auto; - } - } - .lockedCardDescription { - padding: 0 33.3%; - } -`; - -export const LockedPolicyCard = memo(({ title }: { title: string }) => { - return ( - - } - title={ -

- {title} -

- } - description={false} - > - - - -

- - - -

-
- -

- - - - ), - }} - /> -

-
-
-
-
-
- ); -}); -LockedPolicyCard.displayName = 'LockedPolicyCard'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/behavior.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/behavior.tsx deleted file mode 100644 index 1e9efefe4ac60..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/behavior.tsx +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { i18n } from '@kbn/i18n'; -import { EuiCallOut, EuiSpacer } from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { OperatingSystem } from '@kbn/securitysolution-utils'; -import type { Immutable } from '../../../../../../../common/endpoint/types'; -import { PolicyOperatingSystem } from '../../../../../../../common/endpoint/types'; -import type { BehaviorProtectionOSes } from '../../../types'; -import { ConfigForm } from '../../components/config_form'; -import { RadioButtons } from '../components/radio_buttons'; -import { UserNotification } from '../components/user_notification'; -import { ProtectionSwitch } from '../components/protection_switch'; -import { APP_UI_ID } from '../../../../../../../common/constants'; -import { LinkToApp } from '../../../../../../common/components/endpoint/link_to_app'; -import { SecurityPageName } from '../../../../../../app/types'; - -/** The Behavior Protections form for policy details - * which will configure for all relevant OSes. - */ -export const BehaviorProtection = React.memo(() => { - const OSes: Immutable = [ - PolicyOperatingSystem.windows, - PolicyOperatingSystem.mac, - PolicyOperatingSystem.linux, - ]; - const protection = 'behavior_protection'; - const protectionLabel = i18n.translate( - 'xpack.securitySolution.endpoint.policy.protections.behavior', - { - defaultMessage: 'Malicious behavior protections', - } - ); - return ( - - } - > - - - - - - - - ), - }} - /> - - - ); -}); - -BehaviorProtection.displayName = 'BehaviorProtection'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/malware.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/malware.tsx deleted file mode 100644 index a9782c8a56a02..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/malware.tsx +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useCallback, useMemo } from 'react'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { - EuiCallOut, - EuiSpacer, - EuiSwitch, - EuiFlexGroup, - EuiFlexItem, - EuiIconTip, -} from '@elastic/eui'; -import { OperatingSystem } from '@kbn/securitysolution-utils'; -import { useDispatch } from 'react-redux'; -import { cloneDeep } from 'lodash'; -import { APP_UI_ID } from '../../../../../../../common/constants'; -import { SecurityPageName } from '../../../../../../app/types'; -import type { - Immutable, - AdditionalOnSwitchChangeParams, - UIPolicyConfig, -} from '../../../../../../../common/endpoint/types'; -import { PolicyOperatingSystem } from '../../../../../../../common/endpoint/types'; -import type { MalwareProtectionOSes } from '../../../types'; -import { ConfigForm } from '../../components/config_form'; -import { LinkToApp } from '../../../../../../common/components/endpoint/link_to_app'; -import { useLicense } from '../../../../../../common/hooks/use_license'; -import { RadioButtons } from '../components/radio_buttons'; -import { UserNotification } from '../components/user_notification'; -import { ProtectionSwitch } from '../components/protection_switch'; -import { policyConfig } from '../../../store/policy_details/selectors'; -import { useShowEditableFormFields, usePolicyDetailsSelector } from '../../policy_hooks'; -import type { AppAction } from '../../../../../../common/store/actions'; - -/** The Malware Protections form for policy details - * which will configure for all relevant OSes. - */ -export const MalwareProtections = React.memo(() => { - const OSes: Immutable = useMemo( - () => [PolicyOperatingSystem.windows, PolicyOperatingSystem.mac, PolicyOperatingSystem.linux], - [] - ); - const protection = 'malware'; - const protectionLabel = i18n.translate( - 'xpack.securitySolution.endpoint.policy.protections.malware', - { - defaultMessage: 'Malware protections', - } - ); - const blocklistLabel = i18n.translate( - 'xpack.securitySolution.endpoint.policy.protections.blocklist', - { - defaultMessage: 'Blocklist enabled', - } - ); - const showEditableFormFields = useShowEditableFormFields(); - const isPlatinumPlus = useLicense().isPlatinumPlus(); - const dispatch = useDispatch<(action: AppAction) => void>(); - const policyDetailsConfig = usePolicyDetailsSelector(policyConfig); - - const blocklistUpdate = ({ - value, - policyConfigData, - protectionOsList, - }: AdditionalOnSwitchChangeParams): UIPolicyConfig => { - const newPayload: UIPolicyConfig = cloneDeep(policyConfigData); - for (const os of protectionOsList) { - newPayload[os][protection].blocklist = value; - } - - return newPayload; - }; - - const handleBlocklistSwitchChange = useCallback( - (event) => { - if (policyDetailsConfig) { - const newPayload = blocklistUpdate({ - value: event.target.checked, - policyConfigData: cloneDeep(policyDetailsConfig), - protectionOsList: OSes, - }); - dispatch({ - type: 'userChangedPolicyConfig', - payload: { policyConfig: newPayload }, - }); - } - }, - [dispatch, OSes, policyDetailsConfig] - ); - - return ( - - } - > - - - - - - - - - - - } - /> - - - {isPlatinumPlus && } - - - - - - ), - }} - /> - - - ); -}); - -MalwareProtections.displayName = 'MalwareProtections'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/memory.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/memory.tsx deleted file mode 100644 index 5f9fec17d1749..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/memory.tsx +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiCallOut, EuiSpacer } from '@elastic/eui'; -import { OperatingSystem } from '@kbn/securitysolution-utils'; -import { APP_UI_ID } from '../../../../../../../common/constants'; -import { SecurityPageName } from '../../../../../../app/types'; -import type { Immutable } from '../../../../../../../common/endpoint/types'; -import { PolicyOperatingSystem } from '../../../../../../../common/endpoint/types'; -import type { MemoryProtectionOSes } from '../../../types'; -import { ConfigForm } from '../../components/config_form'; -import { LinkToApp } from '../../../../../../common/components/endpoint/link_to_app'; -import { RadioButtons } from '../components/radio_buttons'; -import { UserNotification } from '../components/user_notification'; -import { ProtectionSwitch } from '../components/protection_switch'; - -/** The Memory Protections form for policy details - * which will configure for all relevant OSes. - */ -export const MemoryProtection = React.memo(() => { - const OSes: Immutable = [ - PolicyOperatingSystem.windows, - PolicyOperatingSystem.mac, - PolicyOperatingSystem.linux, - ]; - const protection = 'memory_protection'; - const protectionLabel = i18n.translate( - 'xpack.securitySolution.endpoint.policy.protections.memory', - { - defaultMessage: 'Memory threat protections', - } - ); - return ( - - } - > - - - - - - - - ), - }} - /> - - - ); -}); - -MemoryProtection.displayName = 'MemoryProtection'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/popup_options_to_versions.ts b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/popup_options_to_versions.ts deleted file mode 100644 index 6458ee0eaf4d4..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/popup_options_to_versions.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -const popupVersions: Array<[string, string]> = [ - ['malware', '7.11+'], - ['ransomware', '7.12+'], - ['memory_protection', '7.15+'], - ['behavior_protection', '7.15+'], -]; - -export const popupVersionsMap: ReadonlyMap = new Map(popupVersions); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/ransomware.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/ransomware.tsx deleted file mode 100644 index 8b4cf8d4d4877..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/protections/ransomware.tsx +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiCallOut, EuiSpacer } from '@elastic/eui'; -import { OperatingSystem } from '@kbn/securitysolution-utils'; -import { APP_UI_ID } from '../../../../../../../common/constants'; -import { SecurityPageName } from '../../../../../../app/types'; -import type { Immutable } from '../../../../../../../common/endpoint/types'; -import { PolicyOperatingSystem } from '../../../../../../../common/endpoint/types'; -import type { RansomwareProtectionOSes } from '../../../types'; -import { ConfigForm } from '../../components/config_form'; -import { LinkToApp } from '../../../../../../common/components/endpoint/link_to_app'; -import { RadioButtons } from '../components/radio_buttons'; -import { UserNotification } from '../components/user_notification'; -import { ProtectionSwitch } from '../components/protection_switch'; - -/** The Ransomware Protections form for policy details - * which will configure for all relevant OSes. - */ -export const Ransomware = React.memo(() => { - const OSes: Immutable = [PolicyOperatingSystem.windows]; - const protection = 'ransomware'; - const protectionLabel = i18n.translate( - 'xpack.securitySolution.endpoint.policy.protections.ransomware', - { - defaultMessage: 'Ransomware protections', - } - ); - - return ( - - } - > - - - - - - - - ), - }} - /> - - - ); -}); - -Ransomware.displayName = 'RansomwareProtections'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts index 26424205db010..19c3d9d6f3ea6 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { useCallback, useMemo } from 'react'; +import { useCallback } from 'react'; import { useHistory, useLocation } from 'react-router-dom'; import { useSelector } from 'react-redux'; import { @@ -13,8 +13,6 @@ import { ENDPOINT_EVENT_FILTERS_LIST_ID, ENDPOINT_TRUSTED_APPS_LIST_ID, } from '@kbn/securitysolution-list-constants'; -import { useKibana } from '../../../../common/lib/kibana'; -import { useUserPrivileges } from '../../../../common/components/user_privileges'; import type { PolicyDetailsArtifactsPageLocation, PolicyDetailsState } from '../types'; import type { State } from '../../../../common/store'; import { @@ -28,7 +26,7 @@ import { getPolicyHostIsolationExceptionsPath, } from '../../../common/routing'; import { getCurrentArtifactsLocation, policyIdFromParams } from '../store/policy_details/selectors'; -import { APP_UI_ID, POLICIES_PATH } from '../../../../../common/constants'; +import { POLICIES_PATH } from '../../../../../common/constants'; /** * Narrows global state down to the PolicyDetailsState before calling the provided Policy Details Selector @@ -90,27 +88,3 @@ export const useIsPolicySettingsBarVisible = () => { window.location.pathname.includes('/settings') ); }; - -/** - * Indicates if user is granted Write access to Policy Management. This method differs from what - * `useUserPrivileges().endpointPrivileges.canWritePolicyManagement` in that it also checks if - * user has `canAccessFleet` if form is being displayed outside of Security Solution. - * This is to ensure that the Policy Form remains accessible when displayed inside of Fleet - * pages if the user does not have privileges to security solution policy management. - */ -export const useShowEditableFormFields = (): boolean => { - const { canWritePolicyManagement, canAccessFleet } = useUserPrivileges().endpointPrivileges; - const { getUrlForApp } = useKibana().services.application; - - const securitySolutionUrl = useMemo(() => { - return getUrlForApp(APP_UI_ID); - }, [getUrlForApp]); - - return useMemo(() => { - if (window.location.pathname.startsWith(securitySolutionUrl)) { - return canWritePolicyManagement; - } else { - return canAccessFleet; - } - }, [canAccessFleet, canWritePolicyManagement, securitySolutionUrl]); -}; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/advanced_section.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/advanced_section.tsx new file mode 100644 index 0000000000000..5e6a167b2ecac --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/advanced_section.tsx @@ -0,0 +1,239 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo, useCallback, useState } from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { + EuiCallOut, + EuiFieldText, + EuiFlexGroup, + EuiFlexItem, + EuiFormRow, + EuiIconTip, + EuiPanel, + EuiSpacer, + EuiText, + EuiButtonEmpty, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { cloneDeep } from 'lodash'; +import { getEmptyValue } from '../../../../../../common/components/empty_value'; +import { useLicense } from '../../../../../../common/hooks/use_license'; +import { useTestIdGenerator } from '../../../../../hooks/use_test_id_generator'; +import type { PolicyFormComponentCommonProps } from '../types'; +import { AdvancedPolicySchema } from '../../../models/advanced_policy_schema'; + +function setValue(obj: Record, value: string, path: string[]) { + let newPolicyConfig = obj; + + // First set the value. + for (let i = 0; i < path.length - 1; i++) { + if (!newPolicyConfig[path[i]]) { + newPolicyConfig[path[i]] = {} as Record; + } + newPolicyConfig = newPolicyConfig[path[i]] as Record; + } + newPolicyConfig[path[path.length - 1]] = value; + + // Then, if the user is deleting the value, we need to ensure we clean up the config. + // We delete any sections that are empty, whether that be an empty string, empty object, or undefined. + if (value === '' || value === undefined) { + newPolicyConfig = obj; + for (let k = path.length; k >= 0; k--) { + const nextPath = path.slice(0, k); + for (let i = 0; i < nextPath.length - 1; i++) { + // Traverse and find the next section + newPolicyConfig = newPolicyConfig[nextPath[i]] as Record; + } + if ( + newPolicyConfig[nextPath[nextPath.length - 1]] === undefined || + newPolicyConfig[nextPath[nextPath.length - 1]] === '' || + Object.keys(newPolicyConfig[nextPath[nextPath.length - 1]] as object).length === 0 + ) { + // If we're looking at the `advanced` field, we leave it undefined as opposed to deleting it. + // This is because the UI looks for this field to begin rendering. + if (nextPath[nextPath.length - 1] === 'advanced') { + newPolicyConfig[nextPath[nextPath.length - 1]] = undefined; + // In all other cases, if field is empty, we'll delete it to clean up. + } else { + delete newPolicyConfig[nextPath[nextPath.length - 1]]; + } + newPolicyConfig = obj; + } else { + break; // We are looking at a non-empty section, so we can terminate. + } + } + } +} + +function getValue(obj: Record, path: string[]): string { + let currentPolicyConfig = obj; + + for (let i = 0; i < path.length - 1; i++) { + if (currentPolicyConfig[path[i]]) { + currentPolicyConfig = currentPolicyConfig[path[i]] as Record; + } else { + return ''; + } + } + return currentPolicyConfig[path[path.length - 1]] as string; +} + +const calloutTitle = i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.calloutTitle', + { + defaultMessage: 'Proceed with caution!', + } +); + +const warningMessage = i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.warningMessage', + { + defaultMessage: `This section contains policy values that support advanced use cases. If not configured + properly, these values can cause unpredictable behavior. Please consult documentation + carefully or contact support before editing these values.`, + } +); + +const HIDE = i18n.translate('xpack.securitySolution.endpoint.policy.advanced.hide', { + defaultMessage: 'Hide', +}); +const SHOW = i18n.translate('xpack.securitySolution.endpoint.policy.advanced.show', { + defaultMessage: 'Show', +}); + +export type AdvancedSectionProps = PolicyFormComponentCommonProps; + +export const AdvancedSection = memo( + ({ policy, mode, onChange, 'data-test-subj': dataTestSubj }) => { + const getTestId = useTestIdGenerator(dataTestSubj); + const [showAdvancedPolicy, setShowAdvancedPolicy] = useState(false); + const isPlatinumPlus = useLicense().isPlatinumPlus(); + + const isEditMode = mode === 'edit'; + + const handleAdvancedSettingsButtonClick = useCallback(() => { + setShowAdvancedPolicy((prevState) => !prevState); + }, []); + + const handleAdvancedSettingUpdate = useCallback( + (event) => { + const updatedPolicy = cloneDeep(policy); + + setValue( + updatedPolicy as unknown as Record, + event.target.value, + event.target.name.split('.') + ); + + onChange({ isValid: true, updatedPolicy }); + }, + [onChange, policy] + ); + + return ( +
+ + + + + + {showAdvancedPolicy && ( +
+ {isEditMode && ( + <> + +

{warningMessage}

+
+ + + )} + + +

+ +

+
+ + + {AdvancedPolicySchema.map( + ( + { + key, + documentation, + first_supported_version: firstVersion, + last_supported_version: lastVersion, + license, + }, + index + ) => { + if (!isPlatinumPlus && license === 'platinum') { + return ; + } + + const configPath = key.split('.'); + const value = getValue(policy as unknown as Record, configPath); + + return ( + + {key} + {documentation && ( + + + + )} + + } + labelAppend={ + + {lastVersion ? `${firstVersion}-${lastVersion}` : `${firstVersion}+`} + + } + > + {isEditMode ? ( + + ) : ( + {value || getEmptyValue()} + )} + + ); + } + )} + +
+ )} +
+ ); + } +); +AdvancedSection.displayName = 'AdvancedSection'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/antivirus_registration_card.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/antivirus_registration_card.tsx new file mode 100644 index 0000000000000..cc1ce6915ff50 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/antivirus_registration_card.tsx @@ -0,0 +1,92 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo, useCallback } from 'react'; +import { OperatingSystem } from '@kbn/securitysolution-utils'; +import { i18n } from '@kbn/i18n'; +import { EuiSpacer, EuiSwitch, EuiText } from '@elastic/eui'; +import { cloneDeep } from 'lodash'; +import { useTestIdGenerator } from '../../../../../../hooks/use_test_id_generator'; +import { SettingCard } from '../setting_card'; +import type { PolicyFormComponentCommonProps } from '../../types'; + +const CARD_TITLE = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.antivirusRegistration.type', + { + defaultMessage: 'Register as antivirus', + } +); + +const DESCRIPTON = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.antivirusRegistration.explanation', + { + defaultMessage: + 'Toggle on to register Elastic as an official Antivirus solution for Windows OS. ' + + 'This will also disable Windows Defender.', + } +); + +const REGISTERED_LABEL = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.antivirusRegistration.type', + { + defaultMessage: 'Register as antivirus', + } +); + +const NOT_REGISTERED_LABEL = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.antivirusRegistration.notRegisteredLabel', + { + defaultMessage: 'Do not register as antivirus', + } +); + +type AntivirusRegistrationCardProps = PolicyFormComponentCommonProps; + +export const AntivirusRegistrationCard = memo( + ({ policy, onChange, mode, 'data-test-subj': dataTestSubj }) => { + const getTestId = useTestIdGenerator(dataTestSubj); + const isChecked = policy.windows.antivirus_registration.enabled; + const isEditMode = mode === 'edit'; + const label = isChecked ? REGISTERED_LABEL : NOT_REGISTERED_LABEL; + + const handleSwitchChange = useCallback( + (event) => { + const updatedPolicy = cloneDeep(policy); + updatedPolicy.windows.antivirus_registration.enabled = event.target.checked; + + onChange({ isValid: true, updatedPolicy }); + }, + [onChange, policy] + ); + + return ( + + {isEditMode && {DESCRIPTON}} + + + + {isEditMode ? ( + + ) : ( +
{label}
+ )} +
+ ); + } +); +AntivirusRegistrationCard.displayName = 'AntivirusRegistrationCard'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/attack_surface_reduction_card.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/attack_surface_reduction_card.tsx new file mode 100644 index 0000000000000..c2356c248261b --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/attack_surface_reduction_card.tsx @@ -0,0 +1,95 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo, useCallback } from 'react'; +import { OperatingSystem } from '@kbn/securitysolution-utils'; +import { EuiSwitch } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { cloneDeep } from 'lodash'; +import { useTestIdGenerator } from '../../../../../../hooks/use_test_id_generator'; +import { useLicense } from '../../../../../../../common/hooks/use_license'; +import { SettingLockedCard } from '../setting_locked_card'; +import type { PolicyFormComponentCommonProps } from '../../types'; +import { SettingCard } from '../setting_card'; + +const ATTACK_SURFACE_OS_LIST = [OperatingSystem.WINDOWS]; + +const LOCKED_CARD_ATTACK_SURFACE_REDUCTION = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.attack_surface_reduction', + { + defaultMessage: 'Attack Surface Reduction', + } +); + +const CARD_TITLE = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.attackSurfaceReduction.type', + { + defaultMessage: 'Attack surface reduction', + } +); + +const SWITCH_ENABLED_LABEL = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.credentialHardening.toggleEnabled', + { + defaultMessage: 'Credential hardening enabled', + } +); + +const SWITCH_DISABLED_LABEL = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.credentialHardening.toggleDisabled', + { + defaultMessage: 'Credential hardening disabled', + } +); + +type AttackSurfaceReductionCardProps = PolicyFormComponentCommonProps; + +export const AttackSurfaceReductionCard = memo( + ({ policy, onChange, mode, 'data-test-subj': dataTestSubj }) => { + const isPlatinumPlus = useLicense().isPlatinumPlus(); + const getTestId = useTestIdGenerator(dataTestSubj); + const isChecked = policy.windows.attack_surface_reduction.credential_hardening.enabled; + const isEditMode = mode === 'edit'; + const label = isChecked ? SWITCH_ENABLED_LABEL : SWITCH_DISABLED_LABEL; + + const handleSwitchChange = useCallback( + (event) => { + const updatedPolicy = cloneDeep(policy); + + updatedPolicy.windows.attack_surface_reduction.credential_hardening.enabled = + event.target.checked; + + onChange({ isValid: true, updatedPolicy }); + }, + [onChange, policy] + ); + + if (!isPlatinumPlus) { + return ; + } + + return ( + + {isEditMode ? ( + + ) : ( + <>{label} + )} + + ); + } +); +AttackSurfaceReductionCard.displayName = 'AttackSurfaceReductionCard'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/behaviour_protection_card.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/behaviour_protection_card.tsx new file mode 100644 index 0000000000000..033fa855f6f5a --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/behaviour_protection_card.tsx @@ -0,0 +1,114 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo } from 'react'; +import { i18n } from '@kbn/i18n'; +import { OperatingSystem } from '@kbn/securitysolution-utils'; +import { EuiCallOut, EuiSpacer } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { useTestIdGenerator } from '../../../../../../hooks/use_test_id_generator'; +import { SettingCard } from '../setting_card'; +import { NotifyUserOption } from '../notify_user_option'; +import { DetectPreventProtectionLevel } from '../detect_prevent_protection_level'; +import { ProtectionSettingCardSwitch } from '../protection_setting_card_switch'; +import type { Immutable } from '../../../../../../../../common/endpoint/types'; +import { PolicyOperatingSystem } from '../../../../../../../../common/endpoint/types'; +import type { BehaviorProtectionOSes } from '../../../../types'; +import { LinkToApp } from '../../../../../../../common/components/endpoint/link_to_app'; +import { APP_UI_ID, SecurityPageName } from '../../../../../../../../common'; +import { useLicense } from '../../../../../../../common/hooks/use_license'; +import { SettingLockedCard } from '../setting_locked_card'; +import type { PolicyFormComponentCommonProps } from '../../types'; + +const LOCKED_CARD_BEHAVIOR_TITLE = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.behavior', + { + defaultMessage: 'Malicious Behavior', + } +); + +const BEHAVIOUR_OS_VALUES: Immutable = [ + PolicyOperatingSystem.windows, + PolicyOperatingSystem.mac, + PolicyOperatingSystem.linux, +]; + +type BehaviourProtectionCardProps = PolicyFormComponentCommonProps; + +export const BehaviourProtectionCard = memo( + ({ policy, onChange, mode, 'data-test-subj': dataTestSubj }) => { + const isPlatinumPlus = useLicense().isPlatinumPlus(); + const getTestId = useTestIdGenerator(dataTestSubj); + const protection = 'behavior_protection'; + const protectionLabel = i18n.translate( + 'xpack.securitySolution.endpoint.policy.protections.behavior', + { + defaultMessage: 'Malicious behavior protections', + } + ); + + if (!isPlatinumPlus) { + return ; + } + + return ( + + } + > + + + + + + + + + + ), + }} + /> + + + ); + } +); +BehaviourProtectionCard.displayName = 'BehaviourProtectionCard'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/event_collection_card.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/event_collection_card.tsx new file mode 100644 index 0000000000000..0b59cf42c2307 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/event_collection_card.tsx @@ -0,0 +1,283 @@ +/* + * Copyright 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 { ReactElement, ReactNode } from 'react'; +import React, { memo, useCallback, useContext, useMemo } from 'react'; +import { OperatingSystem } from '@kbn/securitysolution-utils'; +import { ThemeContext } from 'styled-components'; +import { i18n } from '@kbn/i18n'; +import { + EuiBetaBadge, + EuiCheckbox, + EuiFlexGroup, + EuiFlexItem, + EuiIconTip, + EuiSpacer, + EuiText, + useGeneratedHtmlId, +} from '@elastic/eui'; +import { cloneDeep, get, set } from 'lodash'; +import type { EuiCheckboxProps } from '@elastic/eui/src/components/form/checkbox/checkbox'; +import { getEmptyValue } from '../../../../../../../common/components/empty_value'; +import { useTestIdGenerator } from '../../../../../../hooks/use_test_id_generator'; +import type { PolicyFormComponentCommonProps } from '../../types'; +import { SettingCard, SettingCardHeader } from '../setting_card'; +import { PolicyOperatingSystem } from '../../../../../../../../common/endpoint/types'; +import type { UIPolicyConfig } from '../../../../../../../../common/endpoint/types'; + +const mapOperatingSystemToPolicyOsKey = { + [OperatingSystem.WINDOWS]: PolicyOperatingSystem.windows, + [OperatingSystem.LINUX]: PolicyOperatingSystem.linux, + [OperatingSystem.MAC]: PolicyOperatingSystem.mac, +} as const; + +type OperatingSystemToOsMap = typeof mapOperatingSystemToPolicyOsKey; + +export type ProtectionField = + keyof UIPolicyConfig[OperatingSystemToOsMap[T]]['events']; + +export type EventFormSelection = { [K in ProtectionField]: boolean }; + +export interface EventFormOption { + name: string; + protectionField: ProtectionField; +} + +export interface SupplementalEventFormOption { + id?: string; + title?: string; + description?: string; + name: string; + uncheckedName?: string; + protectionField: ProtectionField; + tooltipText?: string; + beta?: boolean; + indented?: boolean; + isDisabled?(policyConfig: UIPolicyConfig): boolean; +} + +export interface EventCollectionCardProps + extends PolicyFormComponentCommonProps { + os: T; + options: ReadonlyArray>; + selection: EventFormSelection; + supplementalOptions?: ReadonlyArray>; +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type ANY = any; +interface EventCollectionCardComponent { + (props: EventCollectionCardProps, context?: ANY): ReactElement< + ANY, + ANY + > | null; + displayName?: string | undefined; +} + +// eslint-disable-next-line react/display-name +export const EventCollectionCard = memo( + ({ + policy, + onChange, + mode, + os, + options, + selection, + supplementalOptions, + 'data-test-subj': dataTestSubj, + }: EventCollectionCardProps) => { + const getTestId = useTestIdGenerator(dataTestSubj); + const isEditMode = mode === 'edit'; + const theme = useContext(ThemeContext); + const totalOptions = options.length; + const policyOs = mapOperatingSystemToPolicyOsKey[os]; + + const selectedCount: number = useMemo(() => { + const supplementalSelectionFields: string[] = supplementalOptions + ? supplementalOptions.map((value) => value.protectionField as string) + : []; + return Object.entries(selection).filter(([key, value]) => + !supplementalSelectionFields.includes(key) ? value : false + ).length; + }, [selection, supplementalOptions]); + + return ( + + {i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.eventCollectionsEnabled', + { + defaultMessage: '{selected} / {total} event collections enabled', + values: { + selected: selectedCount, + total: totalOptions, + }, + } + )} + + } + dataTestSubj={getTestId()} + > + + {i18n.translate('xpack.securitySolution.endpoint.policyDetailsConfig.eventingEvents', { + defaultMessage: 'Events', + })} + + + + {options.map(({ name, protectionField }) => { + const keyPath = `${policyOs}.events.${protectionField}`; + + return ( + + ); + })} + + {selectedCount === 0 && !isEditMode &&
{getEmptyValue()}
} + + {supplementalOptions && + supplementalOptions.map( + ({ + title, + description, + name, + uncheckedName, + protectionField, + tooltipText, + beta, + indented, + isDisabled, + }) => { + const keyPath = `${policyOs}.events.${protectionField}`; + const isChecked = get(policy, keyPath); + + if (!isEditMode && !isChecked) { + return null; + } + + return ( +
+ {title && ( + <> + + {title} + + )} + + {description && ( + <> + + + {description} + + + )} + + + + + + + + + {tooltipText && ( + + + + )} + + {beta && ( + + + + )} + +
+ ); + } + )} +
+ ); + } +) as EventCollectionCardComponent; +EventCollectionCard.displayName = 'EventCollectionCard'; + +interface EventCheckboxProps + extends PolicyFormComponentCommonProps, + Pick { + keyPath: string; + unCheckedLabel?: ReactNode; +} + +const EventCheckbox = memo( + ({ + policy, + onChange, + label, + unCheckedLabel, + mode, + keyPath, + disabled, + 'data-test-subj': dataTestSubj, + }) => { + const checkboxId = useGeneratedHtmlId(); + const isChecked: boolean = get(policy, keyPath); + const isEditMode = mode === 'edit'; + const displayLabel = isChecked ? label : unCheckedLabel ? unCheckedLabel : label; + + const checkboxOnChangeHandler = useCallback( + (ev) => { + const updatedPolicy = cloneDeep(policy); + set(updatedPolicy, keyPath, ev.target.checked); + + onChange({ isValid: true, updatedPolicy }); + }, + [keyPath, onChange, policy] + ); + + return isEditMode ? ( + + ) : isChecked ? ( +
{displayLabel}
+ ) : null; + } +); +EventCheckbox.displayName = 'EventCheckbox'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/events/linux.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/linux_event_collection_card.tsx similarity index 65% rename from x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/events/linux.tsx rename to x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/linux_event_collection_card.tsx index f32f83cdf70cb..1bd1943718b29 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/events/linux.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/linux_event_collection_card.tsx @@ -5,16 +5,13 @@ * 2.0. */ -import React, { memo } from 'react'; -import { i18n } from '@kbn/i18n'; -import { useDispatch } from 'react-redux'; +import React, { memo, useMemo } from 'react'; import { OperatingSystem } from '@kbn/securitysolution-utils'; -import { policyConfig } from '../../../store/policy_details/selectors'; -import { setIn } from '../../../models/policy_details_config'; -import { usePolicyDetailsSelector } from '../../policy_hooks'; -import type { EventFormOption, SupplementalEventFormOption } from '../../components/events_form'; -import { EventsForm } from '../../components/events_form'; -import type { UIPolicyConfig } from '../../../../../../../common/endpoint/types'; +import { i18n } from '@kbn/i18n'; +import type { PolicyFormComponentCommonProps } from '../../types'; +import type { UIPolicyConfig } from '../../../../../../../../common/endpoint/types'; +import type { EventFormOption, SupplementalEventFormOption } from './event_collection_card'; +import { EventCollectionCard } from './event_collection_card'; const OPTIONS: ReadonlyArray> = [ { @@ -45,6 +42,7 @@ const OPTIONS: ReadonlyArray> = [ const SUPPLEMENTAL_OPTIONS: ReadonlyArray> = [ { + id: 'sessionDataSection', title: i18n.translate( 'xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.session_data.title', { @@ -59,11 +57,17 @@ const SUPPLEMENTAL_OPTIONS: ReadonlyArray { return !config.linux.events.process; @@ -71,11 +75,17 @@ const SUPPLEMENTAL_OPTIONS: ReadonlyArray { - const policyDetailsConfig = usePolicyDetailsSelector(policyConfig); - const dispatch = useDispatch(); +type LinuxEventCollectionCardProps = PolicyFormComponentCommonProps; + +export const LinuxEventCollectionCard = memo((props) => { + const supplementalOptions = useMemo(() => { + if (props.mode === 'edit') { + return SUPPLEMENTAL_OPTIONS; + } + + // View only mode: remove instructions for session data + return SUPPLEMENTAL_OPTIONS.map((option) => { + if (option.id === 'sessionDataSection') { + return { + ...option, + description: undefined, + }; + } + + return option; + }); + }, [props.mode]); return ( - + + {...props} os={OperatingSystem.LINUX} - selection={policyDetailsConfig.linux.events} + selection={props.policy.linux.events} + supplementalOptions={supplementalOptions} options={OPTIONS} - supplementalOptions={SUPPLEMENTAL_OPTIONS} - onValueSelection={(value, selected) => { - let newConfig = setIn(policyDetailsConfig)('linux')('events')(value)(selected); - - if (value === 'session_data' && !selected) { - newConfig = setIn(newConfig)('linux')('events')('tty_io')(false); - } - - dispatch({ - type: 'userChangedPolicyConfig', - payload: { - policyConfig: newConfig, - }, - }); - }} /> ); }); - -LinuxEvents.displayName = 'LinuxEvents'; +LinuxEventCollectionCard.displayName = 'LinuxEventCollectionCard'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/events/mac.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/mac_event_collection_card.tsx similarity index 55% rename from x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/events/mac.tsx rename to x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/mac_event_collection_card.tsx index 7682a91daafcc..215722635c420 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/events/mac.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/mac_event_collection_card.tsx @@ -6,14 +6,11 @@ */ import React, { memo } from 'react'; -import { i18n } from '@kbn/i18n'; -import { useDispatch } from 'react-redux'; import { OperatingSystem } from '@kbn/securitysolution-utils'; -import { policyConfig } from '../../../store/policy_details/selectors'; -import { setIn } from '../../../models/policy_details_config'; -import { usePolicyDetailsSelector } from '../../policy_hooks'; -import type { EventFormOption } from '../../components/events_form'; -import { EventsForm } from '../../components/events_form'; +import { i18n } from '@kbn/i18n'; +import type { EventFormOption } from './event_collection_card'; +import { EventCollectionCard } from './event_collection_card'; +import type { PolicyFormComponentCommonProps } from '../../types'; const OPTIONS: ReadonlyArray> = [ { @@ -36,23 +33,16 @@ const OPTIONS: ReadonlyArray> = [ }, ]; -export const MacEvents = memo(() => { - const policyDetailsConfig = usePolicyDetailsSelector(policyConfig); - const dispatch = useDispatch(); +type MacEventCollectionCardProps = PolicyFormComponentCommonProps; +export const MacEventCollectionCard = memo((props) => { return ( - + + {...props} os={OperatingSystem.MAC} - selection={policyDetailsConfig.mac.events} + selection={props.policy.mac.events} options={OPTIONS} - onValueSelection={(value, selected) => - dispatch({ - type: 'userChangedPolicyConfig', - payload: { policyConfig: setIn(policyDetailsConfig)('mac')('events')(value)(selected) }, - }) - } /> ); }); - -MacEvents.displayName = 'MacEvents'; +MacEventCollectionCard.displayName = 'MacEventCollectionCard'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/malware_protections_card.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/malware_protections_card.tsx new file mode 100644 index 0000000000000..74dbc65737f76 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/malware_protections_card.tsx @@ -0,0 +1,205 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo, useCallback } from 'react'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { + EuiCallOut, + EuiSpacer, + EuiSwitch, + EuiFlexGroup, + EuiFlexItem, + EuiIconTip, +} from '@elastic/eui'; +import { OperatingSystem } from '@kbn/securitysolution-utils'; +import { cloneDeep } from 'lodash'; +import { NotifyUserOption } from '../notify_user_option'; +import { SettingCard } from '../setting_card'; +import type { PolicyFormComponentCommonProps } from '../../types'; +import { APP_UI_ID } from '../../../../../../../../common'; +import { SecurityPageName } from '../../../../../../../app/types'; +import type { Immutable } from '../../../../../../../../common/endpoint/types'; +import { PolicyOperatingSystem } from '../../../../../../../../common/endpoint/types'; +import type { MalwareProtectionOSes } from '../../../../types'; +import { LinkToApp } from '../../../../../../../common/components/endpoint/link_to_app'; +import type { ProtectionSettingCardSwitchProps } from '../protection_setting_card_switch'; +import { ProtectionSettingCardSwitch } from '../protection_setting_card_switch'; +import { DetectPreventProtectionLevel } from '../detect_prevent_protection_level'; +import { useTestIdGenerator } from '../../../../../../hooks/use_test_id_generator'; + +const BLOCKLIST_ENABLED_LABEL = i18n.translate( + 'xpack.securitySolution.endpoint.policy.protections.blocklistEnabled', + { + defaultMessage: 'Blocklist enabled', + } +); + +const BLOCKLIST_DISABLED_LABEL = i18n.translate( + 'xpack.securitySolution.endpoint.policy.protections.blocklistDisabled', + { + defaultMessage: 'Blocklist disabled', + } +); + +// NOTE: it mutates `policyConfigData` passed on input +const adjustBlocklistSettingsOnProtectionSwitch: ProtectionSettingCardSwitchProps['additionalOnSwitchChange'] = + ({ value, policyConfigData, protectionOsList }) => { + for (const os of protectionOsList) { + policyConfigData[os].malware.blocklist = value; + } + + return policyConfigData; + }; + +const MALWARE_OS_VALUES: Immutable = [ + PolicyOperatingSystem.windows, + PolicyOperatingSystem.mac, + PolicyOperatingSystem.linux, +]; + +export type MalwareProtectionsProps = PolicyFormComponentCommonProps; + +/** The Malware Protections form for policy details + * which will configure for all relevant OSes. + */ +export const MalwareProtectionsCard = React.memo( + ({ policy, onChange, mode = 'edit', 'data-test-subj': dataTestSubj }) => { + const getTestId = useTestIdGenerator(dataTestSubj); + const protection = 'malware'; + const protectionLabel = i18n.translate( + 'xpack.securitySolution.endpoint.policy.protections.malware', + { + defaultMessage: 'Malware protections', + } + ); + + return ( + + } + > + + + + + + + + + + + + + ), + }} + /> + + + ); + } +); + +MalwareProtectionsCard.displayName = 'MalwareProtectionsCard'; + +type EnableDisableBlocklistProps = PolicyFormComponentCommonProps; + +const EnableDisableBlocklist = memo(({ policy, onChange, mode }) => { + const checked = policy.windows.malware.blocklist; + const isDisabled = policy.windows.malware.mode === 'off'; + const isEditMode = mode === 'edit'; + const label = checked ? BLOCKLIST_ENABLED_LABEL : BLOCKLIST_DISABLED_LABEL; + + const handleBlocklistSwitchChange = useCallback( + (event) => { + const value = event.target.checked; + const newPayload = cloneDeep(policy); + + adjustBlocklistSettingsOnProtectionSwitch({ + value, + policyConfigData: newPayload, + protectionOsList: MALWARE_OS_VALUES, + }); + + onChange({ isValid: true, updatedPolicy: newPayload }); + }, + [onChange, policy] + ); + + return ( + + + {isEditMode ? ( + + ) : ( + <>{label} + )} + + + + + + } + /> + + + ); +}); +EnableDisableBlocklist.displayName = 'EnableDisableBlocklist'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/memory_protection_card.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/memory_protection_card.tsx new file mode 100644 index 0000000000000..3af9a422fc1a6 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/memory_protection_card.tsx @@ -0,0 +1,116 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo } from 'react'; +import { i18n } from '@kbn/i18n'; +import { OperatingSystem } from '@kbn/securitysolution-utils'; +import { EuiCallOut, EuiSpacer } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { useTestIdGenerator } from '../../../../../../hooks/use_test_id_generator'; +import { NotifyUserOption } from '../notify_user_option'; +import { DetectPreventProtectionLevel } from '../detect_prevent_protection_level'; +import { ProtectionSettingCardSwitch } from '../protection_setting_card_switch'; +import { SettingLockedCard } from '../setting_locked_card'; +import type { Immutable } from '../../../../../../../../common/endpoint/types'; +import { PolicyOperatingSystem } from '../../../../../../../../common/endpoint/types'; +import type { MemoryProtectionOSes } from '../../../../types'; +import { LinkToApp } from '../../../../../../../common/components/endpoint/link_to_app'; +import { APP_UI_ID, SecurityPageName } from '../../../../../../../../common'; +import { useLicense } from '../../../../../../../common/hooks/use_license'; +import type { PolicyFormComponentCommonProps } from '../../types'; +import { SettingCard } from '../setting_card'; + +const LOCKED_CARD_MEMORY_TITLE = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.memory', + { + defaultMessage: 'Memory Threat', + } +); + +const MEMORY_PROTECTION_OS_VALUES: Immutable = [ + PolicyOperatingSystem.windows, + PolicyOperatingSystem.mac, + PolicyOperatingSystem.linux, +]; + +type MemoryProtectionCardProps = PolicyFormComponentCommonProps; + +export const MemoryProtectionCard = memo( + ({ policy, onChange, mode, 'data-test-subj': dataTestSubj }) => { + const isPlatinumPlus = useLicense().isPlatinumPlus(); + const getTestId = useTestIdGenerator(dataTestSubj); + const protection = 'memory_protection'; + const protectionLabel = i18n.translate( + 'xpack.securitySolution.endpoint.policy.protections.memory', + { + defaultMessage: 'Memory threat protections', + } + ); + + if (!isPlatinumPlus) { + return ; + } + + return ( + + } + > + + + + + + + + + + ), + }} + /> + + + ); + } +); +MemoryProtectionCard.displayName = 'MemoryProtectionCard'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/ransomware_protection_card.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/ransomware_protection_card.tsx new file mode 100644 index 0000000000000..b1988ab53c482 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/ransomware_protection_card.tsx @@ -0,0 +1,114 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import { OperatingSystem } from '@kbn/securitysolution-utils'; +import { EuiCallOut, EuiSpacer } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { useTestIdGenerator } from '../../../../../../hooks/use_test_id_generator'; +import { ProtectionSettingCardSwitch } from '../protection_setting_card_switch'; +import { NotifyUserOption } from '../notify_user_option'; +import { DetectPreventProtectionLevel } from '../detect_prevent_protection_level'; +import { SettingCard } from '../setting_card'; +import type { PolicyFormComponentCommonProps } from '../../types'; +import type { Immutable } from '../../../../../../../../common/endpoint/types'; +import { PolicyOperatingSystem } from '../../../../../../../../common/endpoint/types'; +import type { RansomwareProtectionOSes } from '../../../../types'; +import { LinkToApp } from '../../../../../../../common/components/endpoint/link_to_app'; +import { APP_UI_ID, SecurityPageName } from '../../../../../../../../common'; +import { useLicense } from '../../../../../../../common/hooks/use_license'; +import { SettingLockedCard } from '../setting_locked_card'; + +const RANSOMEWARE_OS_VALUES: Immutable = [ + PolicyOperatingSystem.windows, +]; + +const LOCKED_CARD_RAMSOMWARE_TITLE = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.ransomware', + { + defaultMessage: 'Ransomware', + } +); + +type RansomwareProtectionCardProps = PolicyFormComponentCommonProps; + +export const RansomwareProtectionCard = React.memo( + ({ policy, onChange, mode, 'data-test-subj': dataTestSubj }) => { + const isPlatinumPlus = useLicense().isPlatinumPlus(); + const getTestId = useTestIdGenerator(dataTestSubj); + const protection = 'ransomware'; + const protectionLabel = i18n.translate( + 'xpack.securitySolution.endpoint.policy.protections.ransomware', + { + defaultMessage: 'Ransomware protections', + } + ); + + if (!isPlatinumPlus) { + return ; + } + + return ( + + } + > + + + + + + + + + + ), + }} + /> + + + ); + } +); +RansomwareProtectionCard.displayName = 'RansomwareProtectionCard'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/events/windows.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/windows_event_collection_card.tsx similarity index 71% rename from x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/events/windows.tsx rename to x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/windows_event_collection_card.tsx index 9ba51a819e041..33653e2f603a7 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/events/windows.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/cards/windows_event_collection_card.tsx @@ -7,13 +7,10 @@ import React, { memo } from 'react'; import { i18n } from '@kbn/i18n'; -import { useDispatch } from 'react-redux'; import { OperatingSystem } from '@kbn/securitysolution-utils'; -import { policyConfig } from '../../../store/policy_details/selectors'; -import { setIn } from '../../../models/policy_details_config'; -import { usePolicyDetailsSelector } from '../../policy_hooks'; -import type { EventFormOption } from '../../components/events_form'; -import { EventsForm } from '../../components/events_form'; +import type { EventFormOption } from './event_collection_card'; +import { EventCollectionCard } from './event_collection_card'; +import type { PolicyFormComponentCommonProps } from '../../types'; const OPTIONS: ReadonlyArray> = [ { @@ -87,25 +84,16 @@ const OPTIONS: ReadonlyArray> = [ }, ]; -export const WindowsEvents = memo(() => { - const policyDetailsConfig = usePolicyDetailsSelector(policyConfig); - const dispatch = useDispatch(); +type WindowsEventCollectionCardProps = PolicyFormComponentCommonProps; +export const WindowsEventCollectionCard = memo((props) => { return ( - + + {...props} os={OperatingSystem.WINDOWS} - selection={policyDetailsConfig.windows.events} + selection={props.policy.windows.events} options={OPTIONS} - onValueSelection={(value, selected) => - dispatch({ - type: 'userChangedPolicyConfig', - payload: { - policyConfig: setIn(policyDetailsConfig)('windows')('events')(value)(selected), - }, - }) - } /> ); }); - -WindowsEvents.displayName = 'WindowsEvents'; +WindowsEventCollectionCard.displayName = 'WindowsEventCollectionCard'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/detect_prevent_protection_level.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/detect_prevent_protection_level.tsx new file mode 100644 index 0000000000000..a141234ded60e --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/detect_prevent_protection_level.tsx @@ -0,0 +1,185 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo, useCallback, useMemo } from 'react'; +import { cloneDeep } from 'lodash'; +import type { EuiFlexItemProps } from '@elastic/eui'; +import { EuiRadio, EuiSpacer, EuiFlexGroup, EuiFlexItem, useGeneratedHtmlId } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { useTestIdGenerator } from '../../../../../hooks/use_test_id_generator'; +import { SettingCardHeader } from './setting_card'; +import type { PolicyFormComponentCommonProps } from '../types'; +import type { + ImmutableArray, + UIPolicyConfig, + Immutable, +} from '../../../../../../../common/endpoint/types'; +import { ProtectionModes } from '../../../../../../../common/endpoint/types'; +import type { MacPolicyProtection, LinuxPolicyProtection, PolicyProtection } from '../../../types'; +import { useLicense } from '../../../../../../common/hooks/use_license'; + +const DETECT_LABEL = i18n.translate('xpack.securitySolution.endpoint.policy.details.detect', { + defaultMessage: 'Detect', +}); + +const PREVENT_LABEL = i18n.translate('xpack.securitySolution.endpoint.policy.details.prevent', { + defaultMessage: 'Prevent', +}); + +export type DetectPreventProtectionLavelProps = PolicyFormComponentCommonProps & { + protection: PolicyProtection; + osList: ImmutableArray>; +}; + +export const DetectPreventProtectionLevel = memo( + ({ policy, protection, osList, mode, onChange, 'data-test-subj': dataTestSubj }) => { + const isEditMode = mode === 'edit'; + const getTestId = useTestIdGenerator(dataTestSubj); + + const radios: Immutable< + Array<{ + id: ProtectionModes; + label: string; + flexGrow: EuiFlexItemProps['grow']; + }> + > = useMemo(() => { + return [ + { + id: ProtectionModes.detect, + label: DETECT_LABEL, + flexGrow: 1, + }, + { + id: ProtectionModes.prevent, + label: PREVENT_LABEL, + flexGrow: 5, + }, + ]; + }, []); + + const currentProtectionLevelLabel = useMemo(() => { + const radio = radios.find((item) => item.id === policy.windows[protection].mode); + + if (radio) { + return radio.label; + } + + return PREVENT_LABEL; + }, [policy.windows, protection, radios]); + + return ( +
+ + + + + + {isEditMode ? ( + radios.map(({ label, id, flexGrow }) => { + return ( + + + + ); + }) + ) : ( + <>{currentProtectionLevelLabel} + )} + +
+ ); + } +); +DetectPreventProtectionLevel.displayName = 'DetectPreventProtectionLevel'; + +interface ProtectionRadioProps extends PolicyFormComponentCommonProps { + protection: PolicyProtection; + protectionMode: ProtectionModes; + osList: ImmutableArray>; + label: string; +} + +const ProtectionRadio = React.memo( + ({ + protection, + protectionMode, + osList, + label, + onChange, + policy, + mode, + 'data-test-subj': dataTestSubj, + }: ProtectionRadioProps) => { + const radioButtonId = useGeneratedHtmlId(); + const selected = policy.windows[protection].mode; + const isPlatinumPlus = useLicense().isPlatinumPlus(); + const showEditableFormFields = mode === 'edit'; + + const handleRadioChange = useCallback(() => { + const newPayload = cloneDeep(policy); + + for (const os of osList) { + if (os === 'windows') { + newPayload[os][protection].mode = protectionMode; + } else if (os === 'mac') { + newPayload[os][protection as MacPolicyProtection].mode = protectionMode; + } else if (os === 'linux') { + newPayload[os][protection as LinuxPolicyProtection].mode = protectionMode; + } + if (isPlatinumPlus) { + if (os === 'windows') { + if (protectionMode === ProtectionModes.prevent) { + newPayload[os].popup[protection].enabled = true; + } else { + newPayload[os].popup[protection].enabled = false; + } + } else if (os === 'mac') { + if (protectionMode === ProtectionModes.prevent) { + newPayload[os].popup[protection as MacPolicyProtection].enabled = true; + } else { + newPayload[os].popup[protection as MacPolicyProtection].enabled = false; + } + } else if (os === 'linux') { + if (protectionMode === ProtectionModes.prevent) { + newPayload[os].popup[protection as LinuxPolicyProtection].enabled = true; + } else { + newPayload[os].popup[protection as LinuxPolicyProtection].enabled = false; + } + } + } + } + + onChange({ isValid: true, updatedPolicy: newPayload }); + }, [isPlatinumPlus, onChange, osList, policy, protection, protectionMode]); + + return ( + + ); + } +); + +ProtectionRadio.displayName = 'ProtectionRadio'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/notify_user_option.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/notify_user_option.tsx new file mode 100644 index 0000000000000..f7afe7bd186d6 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/notify_user_option.tsx @@ -0,0 +1,291 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useMemo } from 'react'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { cloneDeep } from 'lodash'; +import { + EuiSpacer, + EuiFlexItem, + EuiFlexGroup, + EuiCheckbox, + EuiIconTip, + EuiText, + EuiTextArea, +} from '@elastic/eui'; +import { PROTECTION_NOTICE_SUPPORTED_ENDPOINT_VERSION } from '../protection_notice_supported_endpoint_version'; +import { useTestIdGenerator } from '../../../../../hooks/use_test_id_generator'; +import { getEmptyValue } from '../../../../../../common/components/empty_value'; +import { useLicense } from '../../../../../../common/hooks/use_license'; +import { SettingCardHeader } from './setting_card'; +import type { PolicyFormComponentCommonProps } from '../types'; +import type { ImmutableArray, UIPolicyConfig } from '../../../../../../../common/endpoint/types'; +import { ProtectionModes } from '../../../../../../../common/endpoint/types'; +import type { PolicyProtection, MacPolicyProtection, LinuxPolicyProtection } from '../../../types'; + +const NOTIFY_USER_CHECKBOX_LABEL = i18n.translate( + 'xpack.securitySolution.endpoint.policyDetail.notifyUser', + { + defaultMessage: 'Notify user', + } +); + +const DO_NOT_NOTIFY_USER_CHECKBOX_LABEL = i18n.translate( + 'xpack.securitySolution.endpoint.policyDetail.doNotNotifyUser', + { + defaultMessage: "Don't notify user", + } +); + +const NOTIFICATION_MESSAGE_LABEL = i18n.translate( + 'xpack.securitySolution.endpoint.policyDetailsConfig.notificationMessage', + { + defaultMessage: 'Notification message', + } +); + +const CUSTOMIZE_NOTIFICATION_MESSAGE_LABEL = i18n.translate( + 'xpack.securitySolution.endpoint.policyDetailsConfig.customizeUserNotification', + { + defaultMessage: 'Customize notification message', + } +); + +interface NotifyUserOptionProps extends PolicyFormComponentCommonProps { + protection: PolicyProtection; + osList: ImmutableArray>; +} + +export const NotifyUserOption = React.memo( + ({ + policy, + onChange, + mode, + protection, + osList, + 'data-test-subj': dataTestSubj, + }: NotifyUserOptionProps) => { + const isPlatinumPlus = useLicense().isPlatinumPlus(); + const getTestId = useTestIdGenerator(dataTestSubj); + + const isEditMode = mode === 'edit'; + const selected = policy.windows[protection].mode; + const userNotificationSelected = policy.windows.popup[protection].enabled; + const userNotificationMessage = policy.windows.popup[protection].message; + const checkboxLabel = userNotificationSelected + ? NOTIFY_USER_CHECKBOX_LABEL + : DO_NOT_NOTIFY_USER_CHECKBOX_LABEL; + + const handleUserNotificationCheckbox = useCallback( + (event) => { + const newPayload = cloneDeep(policy); + + for (const os of osList) { + if (os === 'windows') { + newPayload[os].popup[protection].enabled = event.target.checked; + } else if (os === 'mac') { + newPayload[os].popup[protection as MacPolicyProtection].enabled = event.target.checked; + } else if (os === 'linux') { + newPayload[os].popup[protection as LinuxPolicyProtection].enabled = + event.target.checked; + } + } + + onChange({ isValid: true, updatedPolicy: newPayload }); + }, + [policy, onChange, osList, protection] + ); + + const handleCustomUserNotification = useCallback( + (event) => { + const newPayload = cloneDeep(policy); + for (const os of osList) { + if (os === 'windows') { + newPayload[os].popup[protection].message = event.target.value; + } else if (os === 'mac') { + newPayload[os].popup[protection as MacPolicyProtection].message = event.target.value; + } else if (os === 'linux') { + newPayload[os].popup[protection as LinuxPolicyProtection].message = event.target.value; + } + } + + onChange({ isValid: true, updatedPolicy: newPayload }); + }, + [policy, onChange, osList, protection] + ); + + const tooltipProtectionText = useCallback((protectionType: PolicyProtection) => { + if (protectionType === 'memory_protection') { + return i18n.translate( + 'xpack.securitySolution.endpoint.policyDetail.memoryProtectionTooltip', + { + defaultMessage: 'memory threat', + } + ); + } else if (protectionType === 'behavior_protection') { + return i18n.translate( + 'xpack.securitySolution.endpoint.policyDetail.behaviorProtectionTooltip', + { + defaultMessage: 'malicious behavior', + } + ); + } else { + return protectionType; + } + }, []); + + const tooltipBracketText = useCallback( + (protectionType: PolicyProtection) => { + if (protectionType === 'memory_protection' || protection === 'behavior_protection') { + return i18n.translate('xpack.securitySolution.endpoint.policyDetail.rule', { + defaultMessage: 'rule', + }); + } else { + return i18n.translate('xpack.securitySolution.endpoint.policyDetail.filename', { + defaultMessage: 'filename', + }); + } + }, + [protection] + ); + + if (!isPlatinumPlus) { + return null; + } + + return ( +
+ + + + + + + + + + {isEditMode ? ( + + ) : ( + <>{checkboxLabel} + )} + + {userNotificationSelected && + (isEditMode ? ( + <> + + + + +

{CUSTOMIZE_NOTIFICATION_MESSAGE_LABEL}

+
+
+ + + + + + + } + /> + +
+ + + + ) : ( + <> + + +

{NOTIFICATION_MESSAGE_LABEL}

+
+ + <>{userNotificationMessage || getEmptyValue()} + + ))} +
+ ); + } +); +NotifyUserOption.displayName = 'NotifyUserOption'; + +export const SupportedVersionForProtectionNotice = React.memo( + ({ + protection, + 'data-test-subj': dataTestSubj, + }: { + protection: string; + 'data-test-subj'?: string; + }) => { + const version = useMemo(() => { + return PROTECTION_NOTICE_SUPPORTED_ENDPOINT_VERSION[ + protection as keyof typeof PROTECTION_NOTICE_SUPPORTED_ENDPOINT_VERSION + ]; + }, [protection]); + + if (!version) { + return null; + } + + return ( + + + + + + ); + } +); +SupportedVersionForProtectionNotice.displayName = 'SupportedVersionForProtectionNotice'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/protection_setting_card_switch.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/protection_setting_card_switch.tsx new file mode 100644 index 0000000000000..cdd636b9c4baa --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/protection_setting_card_switch.tsx @@ -0,0 +1,140 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback } from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiSwitch } from '@elastic/eui'; +import { cloneDeep } from 'lodash'; +import type { PolicyFormComponentCommonProps } from '../types'; +import { useLicense } from '../../../../../../common/hooks/use_license'; +import type { + ImmutableArray, + UIPolicyConfig, + PolicyConfig, +} from '../../../../../../../common/endpoint/types'; +import { ProtectionModes } from '../../../../../../../common/endpoint/types'; +import type { PolicyProtection, MacPolicyProtection, LinuxPolicyProtection } from '../../../types'; + +export interface ProtectionSettingCardSwitchProps extends PolicyFormComponentCommonProps { + protection: PolicyProtection; + protectionLabel?: string; + osList: ImmutableArray>; + additionalOnSwitchChange?: ({ + value, + policyConfigData, + protectionOsList, + }: { + value: boolean; + policyConfigData: PolicyConfig; + protectionOsList: ImmutableArray>; + }) => PolicyConfig; +} + +export const ProtectionSettingCardSwitch = React.memo( + ({ + protection, + protectionLabel, + osList, + additionalOnSwitchChange, + onChange, + policy, + mode, + 'data-test-subj': dataTestSubj, + }: ProtectionSettingCardSwitchProps) => { + const isPlatinumPlus = useLicense().isPlatinumPlus(); + const isEditMode = mode === 'edit'; + const selected = policy && policy.windows[protection].mode; + const switchLabel = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.protectionsEnabled', + { + defaultMessage: '{protectionLabel} {mode, select, true {enabled} false {disabled}}', + values: { + protectionLabel, + mode: selected !== ProtectionModes.off, + }, + } + ); + + const handleSwitchChange = useCallback( + (event) => { + const newPayload = cloneDeep(policy); + + if (event.target.checked === false) { + for (const os of osList) { + if (os === 'windows') { + newPayload[os][protection].mode = ProtectionModes.off; + } else if (os === 'mac') { + newPayload[os][protection as MacPolicyProtection].mode = ProtectionModes.off; + } else if (os === 'linux') { + newPayload[os][protection as LinuxPolicyProtection].mode = ProtectionModes.off; + } + if (isPlatinumPlus) { + if (os === 'windows') { + newPayload[os].popup[protection].enabled = event.target.checked; + } else if (os === 'mac') { + newPayload[os].popup[protection as MacPolicyProtection].enabled = + event.target.checked; + } else if (os === 'linux') { + newPayload[os].popup[protection as LinuxPolicyProtection].enabled = + event.target.checked; + } + } + } + } else { + for (const os of osList) { + if (os === 'windows') { + newPayload[os][protection].mode = ProtectionModes.prevent; + } else if (os === 'mac') { + newPayload[os][protection as MacPolicyProtection].mode = ProtectionModes.prevent; + } else if (os === 'linux') { + newPayload[os][protection as LinuxPolicyProtection].mode = ProtectionModes.prevent; + } + if (isPlatinumPlus) { + if (os === 'windows') { + newPayload[os].popup[protection].enabled = event.target.checked; + } else if (os === 'mac') { + newPayload[os].popup[protection as MacPolicyProtection].enabled = + event.target.checked; + } else if (os === 'linux') { + newPayload[os].popup[protection as LinuxPolicyProtection].enabled = + event.target.checked; + } + } + } + } + + onChange({ + isValid: true, + updatedPolicy: additionalOnSwitchChange + ? additionalOnSwitchChange({ + value: event.target.checked, + policyConfigData: newPayload, + protectionOsList: osList, + }) + : newPayload, + }); + }, + [policy, onChange, additionalOnSwitchChange, osList, isPlatinumPlus, protection] + ); + + if (!isEditMode) { + return <>{switchLabel}; + } + + return ( + + ); + } +); + +ProtectionSettingCardSwitch.displayName = 'ProtectionSettingCardSwitch'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/components/config_form/index.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/setting_card.tsx similarity index 77% rename from x-pack/plugins/security_solution/public/management/pages/policy/view/components/config_form/index.tsx rename to x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/setting_card.tsx index b5f46c91dade4..ebae19d960b69 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/components/config_form/index.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/setting_card.tsx @@ -23,6 +23,7 @@ import { import { ThemeContext } from 'styled-components'; import type { OperatingSystem } from '@kbn/securitysolution-utils'; +import { useTestIdGenerator } from '../../../../../hooks/use_test_id_generator'; import { OS_TITLES } from '../../../../../common/translations'; const TITLES = { @@ -34,7 +35,7 @@ const TITLES = { }), }; -interface ConfigFormProps { +interface SettingCardProps { /** * A subtitle for this component. **/ @@ -49,19 +50,22 @@ interface ConfigFormProps { rightCorner?: ReactNode; } -export const ConfigFormHeading: FC = memo(({ children }) => ( - -
{children}
-
-)); - -ConfigFormHeading.displayName = 'ConfigFormHeading'; +export const SettingCardHeader = memo<{ children: React.ReactNode; 'data-test-subj'?: string }>( + ({ children, 'data-test-subj': dataTestSubj }) => ( + +
{children}
+
+ ) +); +SettingCardHeader.displayName = 'SettingCardHeader'; -export const ConfigForm: FC = memo( +export const SettingCard: FC = memo( ({ type, supportedOss, osRestriction, dataTestSubj, rightCorner, children }) => { const paddingSize = useContext(ThemeContext).eui.euiPanelPaddingModifiers.paddingMedium; + const getTestId = useTestIdGenerator(dataTestSubj); + return ( - + = memo( style={{ padding: `${paddingSize} ${paddingSize} 0 ${paddingSize}` }} > - {TITLES.type} + {TITLES.type} {type} - {TITLES.os} + {TITLES.os} - {supportedOss.map((os) => OS_TITLES[os]).join(', ')} + + {supportedOss.map((os) => OS_TITLES[os]).join(', ')}{' '} + {osRestriction && ( @@ -117,4 +123,4 @@ export const ConfigForm: FC = memo( } ); -ConfigForm.displayName = 'ConfigForm'; +SettingCard.displayName = 'SettingCard'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/setting_locked_card.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/setting_locked_card.tsx new file mode 100644 index 0000000000000..bb2faa6f8abe2 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/components/setting_locked_card.tsx @@ -0,0 +1,98 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo } from 'react'; +import { + EuiCard, + EuiIcon, + EuiTextColor, + EuiLink, + EuiFlexGroup, + EuiFlexItem, + EuiText, +} from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import styled from 'styled-components'; +import { i18n } from '@kbn/i18n'; +import { useTestIdGenerator } from '../../../../../hooks/use_test_id_generator'; + +const LockedPolicyDiv = styled.div` + .euiCard__betaBadgeWrapper { + .euiCard__betaBadge { + width: auto; + } + } + .lockedCardDescription { + padding: 0 33.3%; + } +`; + +export const SettingLockedCard = memo( + ({ title, 'data-test-subj': dataTestSubj }: { title: string; 'data-test-subj'?: string }) => { + const getTestId = useTestIdGenerator(dataTestSubj); + + return ( + + } + title={ +

+ {title} +

+ } + description={false} + > + + + +

+ + + +

+
+ +

+ + + + ), + }} + /> +

+
+
+
+
+
+ ); + } +); +SettingLockedCard.displayName = 'SettingLockedCard'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/index.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/index.ts similarity index 80% rename from x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/index.tsx rename to x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/index.ts index cf989e6b4e0ee..b84c32fbeee97 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/index.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export { PolicyFormLayout } from './policy_form_layout'; +export { PolicySettingsForm } from './policy_settings_form'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/mocks.ts b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/mocks.ts new file mode 100644 index 0000000000000..c351bea4fdf93 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/mocks.ts @@ -0,0 +1,116 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +interface TestSubjGenerator { + (suffix?: string): string; + withPrefix: (prefix: string) => TestSubjGenerator; +} + +export const createTestSubjGenerator = (testSubjPrefix: string): TestSubjGenerator => { + const testSubjGenerator: TestSubjGenerator = (suffix) => { + if (suffix) { + return `${testSubjPrefix}-${suffix}`; + } + return testSubjPrefix; + }; + + testSubjGenerator.withPrefix = (prefix: string): TestSubjGenerator => { + return createTestSubjGenerator(testSubjGenerator(prefix)); + }; + + return testSubjGenerator; +}; + +export const getPolicySettingsFormTestSubjects = ( + formTopLevelTestSubj: string = 'endpointPolicyForm' +) => { + const genTestSubj = createTestSubjGenerator(formTopLevelTestSubj); + const malwareTestSubj = genTestSubj.withPrefix('malware'); + const ransomwareTestSubj = genTestSubj.withPrefix('ransomware'); + const memoryTestSubj = genTestSubj.withPrefix('memory'); + const behaviourTestSubj = genTestSubj.withPrefix('behaviour'); + const advancedSectionTestSubj = genTestSubj.withPrefix('advancedSection'); + const windowsEventsTestSubj = genTestSubj.withPrefix('windowsEvents'); + const macEventsTestSubj = genTestSubj.withPrefix('macEvents'); + const linuxEventsTestSubj = genTestSubj.withPrefix('linuxEvents'); + + const testSubj = { + form: genTestSubj(), + + malware: { + card: malwareTestSubj(), + enableDisableSwitch: malwareTestSubj('enableDisableSwitch'), + protectionPreventRadio: malwareTestSubj('protectionLevel-preventRadio'), + protectionDetectRadio: malwareTestSubj('protectionLevel-detectRadio'), + notifyUserCheckbox: malwareTestSubj('notifyUser-checkbox'), + notifySupportedVersion: malwareTestSubj('notifyUser-supportedVersion'), + notifyCustomMessage: malwareTestSubj('notifyUser-customMessage'), + notifyCustomMessageTooltipIcon: malwareTestSubj('notifyUser-tooltipIcon'), + notifyCustomMessageTooltipInfo: malwareTestSubj('notifyUser-tooltipInfo'), + osValuesContainer: malwareTestSubj('osValues'), + }, + ransomware: { + card: ransomwareTestSubj(), + enableDisableSwitch: ransomwareTestSubj('enableDisableSwitch'), + protectionPreventRadio: ransomwareTestSubj('protectionLevel-preventRadio'), + protectionDetectRadio: ransomwareTestSubj('protectionLevel-detectRadio'), + notifyUserCheckbox: ransomwareTestSubj('notifyUser-checkbox'), + notifySupportedVersion: ransomwareTestSubj('notifyUser-supportedVersion'), + notifyCustomMessage: ransomwareTestSubj('notifyUser-customMessage'), + notifyCustomMessageTooltipIcon: ransomwareTestSubj('notifyUser-tooltipIcon'), + notifyCustomMessageTooltipInfo: ransomwareTestSubj('notifyUser-tooltipInfo'), + osValuesContainer: ransomwareTestSubj('osValues'), + }, + memory: { + card: memoryTestSubj(), + enableDisableSwitch: memoryTestSubj('enableDisableSwitch'), + protectionPreventRadio: memoryTestSubj('protectionLevel-preventRadio'), + protectionDetectRadio: memoryTestSubj('protectionLevel-detectRadio'), + notifyUserCheckbox: memoryTestSubj('notifyUser-checkbox'), + osValuesContainer: memoryTestSubj('osValues'), + }, + behaviour: { + card: behaviourTestSubj(), + enableDisableSwitch: behaviourTestSubj('enableDisableSwitch'), + protectionPreventRadio: behaviourTestSubj('protectionLevel-preventRadio'), + protectionDetectRadio: behaviourTestSubj('protectionLevel-detectRadio'), + notifyUserCheckbox: behaviourTestSubj('notifyUser-checkbox'), + osValuesContainer: behaviourTestSubj('osValues'), + }, + attachSurface: { + card: genTestSubj('attackSurface'), + enableDisableSwitch: genTestSubj('attachSurface-enableDisableSwitch'), + osValuesContainer: genTestSubj('attackSurface-osValues'), + }, + + windowsEvents: { + card: windowsEventsTestSubj(), + dnsCheckbox: windowsEventsTestSubj('dns'), + processCheckbox: windowsEventsTestSubj('process'), + fileCheckbox: windowsEventsTestSubj('file'), + }, + macEvents: { + card: macEventsTestSubj(), + fileCheckbox: macEventsTestSubj('file'), + }, + linuxEvents: { + card: linuxEventsTestSubj(), + fileCheckbox: linuxEventsTestSubj('file'), + }, + antivirusRegistration: { + card: genTestSubj('antivirusRegistration'), + }, + advancedSection: { + container: advancedSectionTestSubj(''), + showHideButton: advancedSectionTestSubj('showButton'), + settingsContainer: advancedSectionTestSubj('settings'), + warningCallout: advancedSectionTestSubj('warning'), + }, + }; + + return testSubj; +}; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/policy_settings_form.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/policy_settings_form.tsx new file mode 100644 index 0000000000000..8771e40e4be7c --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/policy_settings_form.tsx @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo } from 'react'; +import { EuiSpacer, EuiText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { AntivirusRegistrationCard } from './components/cards/antivirus_registration_card'; +import { LinuxEventCollectionCard } from './components/cards/linux_event_collection_card'; +import { MacEventCollectionCard } from './components/cards/mac_event_collection_card'; +import { WindowsEventCollectionCard } from './components/cards/windows_event_collection_card'; +import { AttackSurfaceReductionCard } from './components/cards/attack_surface_reduction_card'; +import { BehaviourProtectionCard } from './components/cards/behaviour_protection_card'; +import { MemoryProtectionCard } from './components/cards/memory_protection_card'; +import { RansomwareProtectionCard } from './components/cards/ransomware_protection_card'; +import { MalwareProtectionsCard } from './components/cards/malware_protections_card'; +import type { PolicyFormComponentCommonProps } from './types'; +import { AdvancedSection } from './components/advanced_section'; +import { useTestIdGenerator } from '../../../../hooks/use_test_id_generator'; + +const PROTECTIONS_SECTION_TITLE = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.protections', + { defaultMessage: 'Protections' } +); + +const SETTINGS_SECTION_TITLE = i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.settings', + { defaultMessage: 'Settings' } +); + +export type PolicySettingsFormProps = PolicyFormComponentCommonProps; + +export const PolicySettingsForm = memo((props) => { + const getTestId = useTestIdGenerator(props['data-test-subj']); + + return ( +
+ {PROTECTIONS_SECTION_TITLE} + + + + + + + + + + + + + + + + + + {SETTINGS_SECTION_TITLE} + + + + + + + + + + + + + + + +
+ ); +}); +PolicySettingsForm.displayName = 'PolicySettingsForm'; + +const FormSectionTitle = memo(({ children }) => { + return ( + +

{children}

+
+ ); +}); +FormSectionTitle.displayName = 'FormSectionTitle'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/protection_notice_supported_endpoint_version.ts b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/protection_notice_supported_endpoint_version.ts new file mode 100644 index 0000000000000..5e518cb6215a6 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/protection_notice_supported_endpoint_version.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const PROTECTION_NOTICE_SUPPORTED_ENDPOINT_VERSION = Object.freeze({ + malware: '7.11+', + ransomware: '7.12+', + memory_protection: '7.15+', + behavior_protection: '7.15+', +}); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/types.ts b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/types.ts new file mode 100644 index 0000000000000..d09f8005750ee --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_form/types.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { PolicyConfig } from '../../../../../../common/endpoint/types'; + +export interface PolicyFormComponentCommonProps { + policy: PolicyConfig; + onChange: (options: { isValid: boolean; updatedPolicy: PolicyConfig }) => void; + mode: 'edit' | 'view'; + 'data-test-subj'?: string; +} diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/policy_form_confirm_update.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/components/policy_form_confirm_update.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/policy_form_confirm_update.tsx rename to x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/components/policy_form_confirm_update.tsx diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/events/index.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/index.ts similarity index 68% rename from x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/events/index.tsx rename to x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/index.ts index 53f02b8e5349e..34ce6db6a0bb2 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/events/index.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/index.ts @@ -5,6 +5,4 @@ * 2.0. */ -export { WindowsEvents } from './windows'; -export { MacEvents } from './mac'; -export { LinuxEvents } from './linux'; +export { PolicySettingsLayout } from './policy_settings_layout'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/policy_form_layout.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/policy_settings_layout.tsx similarity index 51% rename from x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/policy_form_layout.tsx rename to x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/policy_settings_layout.tsx index 34defb5b25ce6..bd7ecc6529c65 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_forms/components/policy_form_layout.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_settings_layout/policy_settings_layout.tsx @@ -5,64 +5,58 @@ * 2.0. */ -import React, { useCallback, useEffect, useMemo, useState } from 'react'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiButton, - EuiButtonEmpty, - EuiLoadingSpinner, - EuiSpacer, -} from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { i18n } from '@kbn/i18n'; -import { useDispatch } from 'react-redux'; +import React, { memo, useCallback, useEffect, useMemo, useState } from 'react'; import { useLocation } from 'react-router-dom'; -import type { ApplicationStart } from '@kbn/core/public'; -import { toMountPoint } from '@kbn/kibana-react-plugin/public'; +import type { ApplicationStart } from '@kbn/core-application-browser'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { EuiButton, EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; -import { useShowEditableFormFields, usePolicyDetailsSelector } from '../../policy_hooks'; -import { - policyDetails, - agentStatusSummary, - updateStatus, - isLoading, -} from '../../../store/policy_details/selectors'; - -import { useToasts, useKibana } from '../../../../../../common/lib/kibana'; -import type { AppAction } from '../../../../../../common/store/actions'; -import { getPoliciesPath } from '../../../../../common/routing'; -import { useNavigateToAppEventHandler } from '../../../../../../common/hooks/endpoint/use_navigate_to_app_event_handler'; -import { APP_UI_ID } from '../../../../../../../common/constants'; -import type { PolicyDetailsRouteState } from '../../../../../../../common/endpoint/types'; -import { SecuritySolutionPageWrapper } from '../../../../../../common/components/page_wrapper'; -import { PolicyDetailsForm } from '../../policy_details_form'; -import { ConfirmUpdate } from './policy_form_confirm_update'; - -export const PolicyFormLayout = React.memo(() => { - const dispatch = useDispatch<(action: AppAction) => void>(); +import { cloneDeep } from 'lodash'; +import { i18n } from '@kbn/i18n'; +import { useUserPrivileges } from '../../../../../common/components/user_privileges'; +import { useFetchAgentByAgentPolicySummary } from '../../../../hooks/policy/use_fetch_endpoint_policy_agent_summary'; +import { useUpdateEndpointPolicy } from '../../../../hooks/policy/use_update_endpoint_policy'; +import type { PolicySettingsFormProps } from '../policy_settings_form/policy_settings_form'; +import { PolicySettingsForm } from '../policy_settings_form'; +import type { + MaybeImmutable, + PolicyConfig, + PolicyData, + PolicyDetailsRouteState, +} from '../../../../../../common/endpoint/types'; +import { useKibana, useToasts } from '../../../../../common/lib/kibana'; +import { APP_UI_ID } from '../../../../../../common'; +import { getPoliciesPath } from '../../../../common/routing'; +import { useNavigateToAppEventHandler } from '../../../../../common/hooks/endpoint/use_navigate_to_app_event_handler'; +import { ConfirmUpdate } from './components/policy_form_confirm_update'; + +export interface PolicySettingsLayoutProps { + policy: MaybeImmutable; +} + +export const PolicySettingsLayout = memo(({ policy: _policy }) => { + const policy = _policy as PolicyData; const { services: { - theme, application: { navigateToApp }, }, } = useKibana(); const toasts = useToasts(); const { state: locationRouteState } = useLocation(); - const showEditableFormFields = useShowEditableFormFields(); - - // Store values - const policyItem = usePolicyDetailsSelector(policyDetails); - const policyAgentStatusSummary = usePolicyDetailsSelector(agentStatusSummary); - const policyUpdateStatus = usePolicyDetailsSelector(updateStatus); - const isPolicyLoading = usePolicyDetailsSelector(isLoading); + const { canWritePolicyManagement } = useUserPrivileges().endpointPrivileges; + const { isLoading: isUpdating, mutateAsync: sendPolicyUpdate } = useUpdateEndpointPolicy(); + const { data: agentSummaryData } = useFetchAgentByAgentPolicySummary(policy.policy_id); - // Local state + const [policySettings, setPolicySettings] = useState( + cloneDeep(policy.inputs[0].config.policy.value) + ); const [showConfirm, setShowConfirm] = useState(false); const [routeState, setRouteState] = useState(); - const policyName = policyItem?.name ?? ''; + const isEditMode = canWritePolicyManagement; + const policyName = policy?.name ?? ''; const routingOnCancelNavigateTo = routeState?.onCancelNavigateTo; + const navigateToAppArguments = useMemo((): Parameters => { if (routingOnCancelNavigateTo) { return routingOnCancelNavigateTo; @@ -76,60 +70,68 @@ export const PolicyFormLayout = React.memo(() => { ]; }, [routingOnCancelNavigateTo]); - // Handle showing update statuses - useEffect(() => { - if (policyUpdateStatus) { - if (policyUpdateStatus.success) { + const handleSettingsOnChange: PolicySettingsFormProps['onChange'] = useCallback((updates) => { + setPolicySettings(updates.updatedPolicy); + }, []); + + const handleCancelOnClick = useNavigateToAppEventHandler(...navigateToAppArguments); + + const handleSaveOnClick = useCallback(() => { + setShowConfirm(true); + }, []); + + const handleSaveCancel = useCallback(() => { + setShowConfirm(false); + }, []); + + const handleSaveConfirmation = useCallback(() => { + const update = cloneDeep(policy); + + update.inputs[0].config.policy.value = policySettings; + sendPolicyUpdate({ policy: update }) + .then(() => { toasts.addSuccess({ + 'data-test-subj': 'policyDetailsSuccessMessage', title: i18n.translate( 'xpack.securitySolution.endpoint.policy.details.updateSuccessTitle', { defaultMessage: 'Success!', } ), - text: toMountPoint( - - - , - { theme$: theme.theme$ } + text: i18n.translate( + 'xpack.securitySolution.endpoint.policy.details.updateSuccessMessage', + { + defaultMessage: 'Integration {name} has been updated.', + values: { name: policyName }, + } ), }); if (routeState && routeState.onSaveNavigateTo) { navigateToApp(...routeState.onSaveNavigateTo); } - } else { + }) + .catch((err) => { toasts.addDanger({ + 'data-test-subj': 'policyDetailsFailureMessage', title: i18n.translate('xpack.securitySolution.endpoint.policy.details.updateErrorTitle', { defaultMessage: 'Failed!', }), - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - text: policyUpdateStatus.error!.message, + text: err.message, }); - } - } - }, [navigateToApp, toasts, policyName, policyUpdateStatus, routeState, theme.theme$]); - - const handleCancelOnClick = useNavigateToAppEventHandler(...navigateToAppArguments); - - const handleSaveOnClick = useCallback(() => { - setShowConfirm(true); - }, []); - - const handleSaveConfirmation = useCallback(() => { - dispatch({ - type: 'userClickedPolicyDetailsSaveButton', - }); - setShowConfirm(false); - }, [dispatch]); - - const handleSaveCancel = useCallback(() => { - setShowConfirm(false); - }, []); + }); + + handleSaveCancel(); + }, [ + handleSaveCancel, + navigateToApp, + policy, + policyName, + policySettings, + routeState, + sendPolicyUpdate, + toasts, + ]); useEffect(() => { if (!routeState && locationRouteState) { @@ -137,28 +139,25 @@ export const PolicyFormLayout = React.memo(() => { } }, [locationRouteState, routeState]); - // Before proceeding - check if we have a policy data. - // If not, and we are still loading, show spinner. - // Else, if we have an error, then show error on the page. - if (!policyItem) { - return ( - - {isPolicyLoading ? : null} - - ); - } - return ( <> {showConfirm && ( )} - + + + + @@ -173,14 +172,14 @@ export const PolicyFormLayout = React.memo(() => { /> - {showEditableFormFields && ( + {isEditMode && ( { ); }); - -PolicyFormLayout.displayName = 'PolicyFormLayout'; +PolicySettingsLayout.displayName = 'PolicySettingsLayout'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/tabs/policy_tabs.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/tabs/policy_tabs.tsx index e16d5fcb392a8..d3f9edc202acc 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/tabs/policy_tabs.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/tabs/policy_tabs.tsx @@ -11,6 +11,7 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import React, { useCallback, useEffect, useMemo } from 'react'; import { useHistory, useLocation } from 'react-router-dom'; +import { PolicySettingsLayout } from '../policy_settings_layout'; import { useUserPrivileges } from '../../../../../common/components/user_privileges'; import { getPolicyDetailPath, @@ -36,7 +37,6 @@ import { policyIdFromParams, } from '../../store/policy_details/selectors'; import { PolicyArtifactsLayout } from '../artifacts/layout/policy_artifacts_layout'; -import { PolicyFormLayout } from '../policy_forms/components'; import { usePolicyDetailsSelector } from '../policy_hooks'; import { POLICY_ARTIFACT_EVENT_FILTERS_LABELS } from './event_filters_translations'; import { POLICY_ARTIFACT_TRUSTED_APPS_LABELS } from './trusted_apps_translations'; @@ -77,7 +77,11 @@ export const PolicyTabs = React.memo(() => { const isInHostIsolationExceptionsTab = usePolicyDetailsSelector(isOnHostIsolationExceptionsView); const isInBlocklistsTab = usePolicyDetailsSelector(isOnBlocklistsView); const policyId = usePolicyDetailsSelector(policyIdFromParams); - const policyItem = usePolicyDetailsSelector(policyDetails); + + // By the time the tabs load, we know that we already have a `policyItem` since a conditional + // check is done at the `PageDetails` component level. So asserting to non-null/undefined here. + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const policyItem = usePolicyDetailsSelector(policyDetails)!; const { canReadTrustedApplications, canWriteTrustedApplications, @@ -195,7 +199,8 @@ export const PolicyTabs = React.memo(() => { content: ( <> - + + ), }, diff --git a/x-pack/plugins/security_solution/public/management/services/policies/hooks.ts b/x-pack/plugins/security_solution/public/management/services/policies/hooks.ts index a979d79db5663..0c6f4e7db9b89 100644 --- a/x-pack/plugins/security_solution/public/management/services/policies/hooks.ts +++ b/x-pack/plugins/security_solution/public/management/services/policies/hooks.ts @@ -15,6 +15,7 @@ import type { GetPolicyListResponse } from '../../pages/policy/types'; import { sendGetEndpointSpecificPackagePolicies } from './policies'; import type { ServerApiError } from '../../../common/types'; +// FIXME:PT move to `hooks` folder export function useGetEndpointSpecificPolicies( { onError, diff --git a/x-pack/plugins/security_solution/public/management/services/policies/ingest.ts b/x-pack/plugins/security_solution/public/management/services/policies/ingest.ts index c6240c934ec8f..e5347449d4dbe 100644 --- a/x-pack/plugins/security_solution/public/management/services/policies/ingest.ts +++ b/x-pack/plugins/security_solution/public/management/services/policies/ingest.ts @@ -8,8 +8,6 @@ import type { HttpFetchOptions, HttpStart } from '@kbn/core/public'; import type { GetAgentStatusResponse, - GetAgentPoliciesRequest, - GetAgentPoliciesResponse, GetPackagePoliciesResponse, GetInfoResponse, } from '@kbn/fleet-plugin/common'; @@ -59,38 +57,6 @@ export const sendBulkGetPackagePolicies = ( }); }; -/** - * Retrieve a list of Agent Policies - * @param http - * @param options - */ -export const sendGetAgentPolicyList = ( - http: HttpStart, - options: HttpFetchOptions & GetAgentPoliciesRequest -) => { - return http.get(INGEST_API_AGENT_POLICIES, options); -}; - -/** - * Retrieve a list of Agent Policies - * @param http - * @param options - */ -export const sendBulkGetAgentPolicyList = ( - http: HttpStart, - ids: string[], - options: HttpFetchOptions = {} -) => { - return http.post(`${INGEST_API_AGENT_POLICIES}/_bulk_get`, { - ...options, - body: JSON.stringify({ - ids, - ignoreMissing: true, - full: true, - }), - }); -}; - /** * Updates a package policy * diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index dce1d4c5a02a2..abeb8e76b2f8a 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -28955,7 +28955,6 @@ "xpack.securitySolution.endpoint.list.totalCount": "Affichage de {totalItemCount, plural, one {# point de terminaison} many {# points de terminaison} other {# points de terminaison}}", "xpack.securitySolution.endpoint.list.totalCount.limited": "Affichage de {limit} sur {totalItemCount, plural, one {# point de terminaison} many {# points de terminaison} other {# points de terminaison}}", "xpack.securitySolution.endpoint.list.transformFailed.message": "Une transformation requise, {transformId}, est actuellement en échec. La plupart du temps, ce problème peut être corrigé par {transformsPage}. Pour une assistance supplémentaire, veuillez visitez la {docsPage}", - "xpack.securitySolution.endpoint.policy.advanced.show": "Paramètres avancés pour {action}", "xpack.securitySolution.endpoint.policy.artifacts.empty.unassigned.backButtonLabel": "Retour à la politique {policyName}", "xpack.securitySolution.endpoint.policy.artifacts.empty.unassigned.content": "Aucun artefact n'est actuellement affecté à {policyName}. Affectez des artefacts maintenant, ou ajoutez-les et gérez-les sur la page des artefacts.", "xpack.securitySolution.endpoint.policy.artifacts.empty.unassigned.noPrivileges.content": "Aucun artefact n'est actuellement affecté à {policyName}.", @@ -31590,7 +31589,6 @@ "xpack.securitySolution.endpoint.policy.blocklist.list.search.placeholder": "Rechercher sur les champs ci-dessous : nom, description, valeur", "xpack.securitySolution.endpoint.policy.details.antivirusRegistration.explanation": "Activez la bascule pour enregistrer Elastic comme solution d'antivirus officielle pour le système d'exploitation Windows. Cela désactivera également Windows Defender.", "xpack.securitySolution.endpoint.policy.details.antivirusRegistration.osRestriction": "Restrictions", - "xpack.securitySolution.endpoint.policy.details.antivirusRegistration.toggle": "Enregistrer comme antivirus", "xpack.securitySolution.endpoint.policy.details.antivirusRegistration.type": "Enregistrer comme antivirus", "xpack.securitySolution.endpoint.policy.details.attack_surface_reduction": "Réduction de la surface d’attaque", "xpack.securitySolution.endpoint.policy.details.attackSurfaceReduction.type": "Réduction de la surface d’attaque", @@ -31600,7 +31598,6 @@ "xpack.securitySolution.endpoint.policy.details.behavior_protection": "Comportement malveillant", "xpack.securitySolution.endpoint.policy.details.cancel": "Annuler", "xpack.securitySolution.endpoint.policy.details.cloudDeploymentLInk": "déploiement sur le cloud", - "xpack.securitySolution.endpoint.policy.details.credentialHardening.toggle": "Renforcement de l’identification", "xpack.securitySolution.endpoint.policy.details.detect": "Détecter", "xpack.securitySolution.endpoint.policy.details.detectionRulesLink": "règles de détection associées", "xpack.securitySolution.endpoint.policy.details.eventCollection": "Collection d'événements", @@ -31668,7 +31665,6 @@ "xpack.securitySolution.endpoint.policy.multiStepOnboarding.learnMore": "En savoir plus", "xpack.securitySolution.endpoint.policy.multiStepOnboarding.title": "Nous enregistrerons votre intégration avec nos valeurs par défaut recommandées.", "xpack.securitySolution.endpoint.policy.protections.behavior": "Protections contre les comportements malveillants", - "xpack.securitySolution.endpoint.policy.protections.blocklist": "Liste noire activée", "xpack.securitySolution.endpoint.policy.protections.malware": "Protections contre les malware", "xpack.securitySolution.endpoint.policy.protections.memory": "Protections de la mémoire contre les menaces", "xpack.securitySolution.endpoint.policy.protections.ransomware": "Protections contre les ransomware", @@ -31701,7 +31697,6 @@ "xpack.securitySolution.endpoint.policyDetails.agentsSummary.onlineTitle": "Intègre", "xpack.securitySolution.endpoint.policyDetails.agentsSummary.totalTitle": "Total des agents", "xpack.securitySolution.endpoint.policyDetails.artifacts.title": "Artefacts", - "xpack.securitySolution.endpoint.policyDetails.loadError": "Impossible de charger les paramètres de la politique des points de terminaison", "xpack.securitySolution.endpoint.policyDetails.settings.title": "Paramètres de politique", "xpack.securitySolution.endpoint.policyDetails.userNotification.placeholder": "Saisir votre message de notification personnalisé", "xpack.securitySolution.endpoint.policyDetailsConfig.blocklistTooltip": "Active ou désactive la liste noire associée à cette politique. La liste noire est une collection de hachages, de chemins ou de signataires qui étend la liste de processus considérés comme malveillants par le point de terminaison. Consultez l'onglet de la liste noire pour plus de détails sur l'entrée.", @@ -31710,10 +31705,8 @@ "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.file": "Fichier", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.network": "Réseau", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.process": "Processus", - "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.session_data": "Collecter les données de session", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.session_data.description": "Activez cette option pour capturer les données de processus étendues requises pour la vue de session. La vue de session vous fournit une représentation visuelle des données de session et d'exécution du processus. Les données de la vue de session sont organisées en fonction du modèle de processus Linux pour vous aider à examiner l'activité des processus, des utilisateurs et des services dans votre infrastructure Linux.", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.session_data.title": "Données de session", - "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.tty_io": "Capturer la sortie du terminal", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.tty_io.tooltip": "Activez cette option pour collecter la sortie du terminal (tty). La sortie du terminal apparaît dans la vue de session, et vous pouvez l'afficher séparément pour voir quelles commandes ont été exécutées et comment elles ont été tapées, à condition que le terminal soit en mode écho. Fonctionne uniquement sur les hôtes qui prennent en charge ebpf.", "xpack.securitySolution.endpoint.policyDetailsConfig.mac.events.file": "Fichier", "xpack.securitySolution.endpoint.policyDetailsConfig.mac.events.network": "Réseau", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index a17cd63a4c62c..b996b954c9af4 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -28940,7 +28940,6 @@ "xpack.securitySolution.endpoint.list.totalCount": "{totalItemCount, plural, other {#個のエンドポイント}}を表示中", "xpack.securitySolution.endpoint.list.totalCount.limited": "{limit}/{totalItemCount, plural, other {#個のエンドポイント}}ページを表示中", "xpack.securitySolution.endpoint.list.transformFailed.message": "現在、必須のトランスフォーム{transformId}が失敗しています。通常、これは{transformsPage}で修正できます。ヘルプについては、{docsPage}ご覧ください", - "xpack.securitySolution.endpoint.policy.advanced.show": "{action}高度な設定", "xpack.securitySolution.endpoint.policy.artifacts.empty.unassigned.backButtonLabel": "{policyName}ポリシーに戻る", "xpack.securitySolution.endpoint.policy.artifacts.empty.unassigned.content": "現在、{policyName}に割り当てられたアーティファクトがありません。今すぐアーティファクトを割り当てるか、アーティファクトページでアーティファクトを追加および管理してください。", "xpack.securitySolution.endpoint.policy.artifacts.empty.unassigned.noPrivileges.content": "現在、{policyName}に割り当てられたアーティファクトがありません。", @@ -31575,7 +31574,6 @@ "xpack.securitySolution.endpoint.policy.blocklist.list.search.placeholder": "次のフィールドで検索:名前、説明、値", "xpack.securitySolution.endpoint.policy.details.antivirusRegistration.explanation": "オンにすると、ElasticをWindows OSのオフィシャルウイルス対策ソリューションとして登録します。これで Windows Defender も無効になります。", "xpack.securitySolution.endpoint.policy.details.antivirusRegistration.osRestriction": "制限事項", - "xpack.securitySolution.endpoint.policy.details.antivirusRegistration.toggle": "ウイルス対策として登録", "xpack.securitySolution.endpoint.policy.details.antivirusRegistration.type": "ウイルス対策として登録", "xpack.securitySolution.endpoint.policy.details.attack_surface_reduction": "攻撃面削減", "xpack.securitySolution.endpoint.policy.details.attackSurfaceReduction.type": "攻撃面削減", @@ -31585,7 +31583,6 @@ "xpack.securitySolution.endpoint.policy.details.behavior_protection": "悪意のある動作", "xpack.securitySolution.endpoint.policy.details.cancel": "キャンセル", "xpack.securitySolution.endpoint.policy.details.cloudDeploymentLInk": "クラウド展開", - "xpack.securitySolution.endpoint.policy.details.credentialHardening.toggle": "資格情報強化", "xpack.securitySolution.endpoint.policy.details.detect": "検知", "xpack.securitySolution.endpoint.policy.details.detectionRulesLink": "関連する検出ルール", "xpack.securitySolution.endpoint.policy.details.eventCollection": "イベント収集", @@ -31653,7 +31650,6 @@ "xpack.securitySolution.endpoint.policy.multiStepOnboarding.learnMore": "詳細", "xpack.securitySolution.endpoint.policy.multiStepOnboarding.title": "推奨のデフォルト値で統合が保存されます。", "xpack.securitySolution.endpoint.policy.protections.behavior": "悪意ある動作に対する保護", - "xpack.securitySolution.endpoint.policy.protections.blocklist": "ブロックリストが有効にされました", "xpack.securitySolution.endpoint.policy.protections.malware": "マルウェア保護", "xpack.securitySolution.endpoint.policy.protections.memory": "メモリ脅威に対する保護", "xpack.securitySolution.endpoint.policy.protections.ransomware": "ランサムウェア保護", @@ -31686,7 +31682,6 @@ "xpack.securitySolution.endpoint.policyDetails.agentsSummary.onlineTitle": "正常", "xpack.securitySolution.endpoint.policyDetails.agentsSummary.totalTitle": "合計エージェント数", "xpack.securitySolution.endpoint.policyDetails.artifacts.title": "アーチファクト", - "xpack.securitySolution.endpoint.policyDetails.loadError": "エンドポイントポリシー設定を読み込めませんでした", "xpack.securitySolution.endpoint.policyDetails.settings.title": "ポリシー設定", "xpack.securitySolution.endpoint.policyDetails.userNotification.placeholder": "カスタム通知メッセージを入力", "xpack.securitySolution.endpoint.policyDetailsConfig.blocklistTooltip": "このポリシーに関連付けられたブロックリストを有効または無効にします。このブロックリストは、コレクションハッシュ、パス、または署名者です。これはエンドポイントによって悪意があると見なされるプロセスのリストを拡張します。エントリ詳細については、ブロックリストタブを参照してください。", @@ -31695,10 +31690,8 @@ "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.file": "ファイル", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.network": "ネットワーク", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.process": "プロセス", - "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.session_data": "セッションデータを収集", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.session_data.description": "オンにすると、セッションビューに必要な拡張プロセスデータを取り込みます。セッションビューでは、セッションおよびプロセス実行データが視覚的に表示されます。セッションビューデータは、Linuxプロセスモデルに従って整理して表示され、Linuxインフラストラクチャーのプロセス、ユーザー、サービスアクティビティを調査できます。", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.session_data.title": "セッションデータ", - "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.tty_io": "ターミナル出力を取り込む", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.tty_io.tooltip": "オンにすると、ターミナル(tty)出力を収集します。ターミナル出力はセッションビューに表示されます。ターミナルがエコーモードの場合は、実行されたコマンド、入力方法を個別に表示して確認できます。ebpfをサポートするホストでのみ動作します。", "xpack.securitySolution.endpoint.policyDetailsConfig.mac.events.file": "ファイル", "xpack.securitySolution.endpoint.policyDetailsConfig.mac.events.network": "ネットワーク", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index f8262933b3a83..30c37966d9de6 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -28936,7 +28936,6 @@ "xpack.securitySolution.endpoint.list.totalCount": "正在显示 {totalItemCount, plural, other {# 个终端}}", "xpack.securitySolution.endpoint.list.totalCount.limited": "正在显示 {limit} 个,共 {totalItemCount, plural, other {# 个终端}} 个", "xpack.securitySolution.endpoint.list.transformFailed.message": "所需的转换 {transformId} 当前失败。多数时候,这可以通过 {transformsPage} 解决。要获取更多帮助,请访问{docsPage}", - "xpack.securitySolution.endpoint.policy.advanced.show": "{action} 高级设置", "xpack.securitySolution.endpoint.policy.artifacts.empty.unassigned.backButtonLabel": "返回到 {policyName} 策略", "xpack.securitySolution.endpoint.policy.artifacts.empty.unassigned.content": "当前没有项目已分配给 {policyName}。立即分配项目,或在项目页面上添加和管理项目。", "xpack.securitySolution.endpoint.policy.artifacts.empty.unassigned.noPrivileges.content": "当前没有项目已分配给 {policyName}。", @@ -31571,7 +31570,6 @@ "xpack.securitySolution.endpoint.policy.blocklist.list.search.placeholder": "搜索下面的字段:name、description、value", "xpack.securitySolution.endpoint.policy.details.antivirusRegistration.explanation": "打开可将 Elastic 注册为 Windows 操作系统的正式防病毒解决方案。这也将禁用 Windows Defender。", "xpack.securitySolution.endpoint.policy.details.antivirusRegistration.osRestriction": "限制", - "xpack.securitySolution.endpoint.policy.details.antivirusRegistration.toggle": "注册为防病毒解决方案", "xpack.securitySolution.endpoint.policy.details.antivirusRegistration.type": "注册为防病毒解决方案", "xpack.securitySolution.endpoint.policy.details.attack_surface_reduction": "攻击面减少", "xpack.securitySolution.endpoint.policy.details.attackSurfaceReduction.type": "攻击面减少", @@ -31581,7 +31579,6 @@ "xpack.securitySolution.endpoint.policy.details.behavior_protection": "恶意行为", "xpack.securitySolution.endpoint.policy.details.cancel": "取消", "xpack.securitySolution.endpoint.policy.details.cloudDeploymentLInk": "云部署", - "xpack.securitySolution.endpoint.policy.details.credentialHardening.toggle": "凭据强化", "xpack.securitySolution.endpoint.policy.details.detect": "检测", "xpack.securitySolution.endpoint.policy.details.detectionRulesLink": "相关检测规则", "xpack.securitySolution.endpoint.policy.details.eventCollection": "事件收集", @@ -31649,7 +31646,6 @@ "xpack.securitySolution.endpoint.policy.multiStepOnboarding.learnMore": "了解详情", "xpack.securitySolution.endpoint.policy.multiStepOnboarding.title": "我们将使用建议的默认值保存您的集成。", "xpack.securitySolution.endpoint.policy.protections.behavior": "恶意行为防护", - "xpack.securitySolution.endpoint.policy.protections.blocklist": "阻止列表已启用", "xpack.securitySolution.endpoint.policy.protections.malware": "恶意软件防护", "xpack.securitySolution.endpoint.policy.protections.memory": "内存威胁防护", "xpack.securitySolution.endpoint.policy.protections.ransomware": "勒索软件防护", @@ -31682,7 +31678,6 @@ "xpack.securitySolution.endpoint.policyDetails.agentsSummary.onlineTitle": "运行正常", "xpack.securitySolution.endpoint.policyDetails.agentsSummary.totalTitle": "代理总数", "xpack.securitySolution.endpoint.policyDetails.artifacts.title": "项目", - "xpack.securitySolution.endpoint.policyDetails.loadError": "无法加载终端策略设置", "xpack.securitySolution.endpoint.policyDetails.settings.title": "策略设置", "xpack.securitySolution.endpoint.policyDetails.userNotification.placeholder": "输入您的定制通知消息", "xpack.securitySolution.endpoint.policyDetailsConfig.blocklistTooltip": "启用或禁用与此策略关联的阻止列表。阻止列表是哈希、路径或签名者的集合,它扩充了终端视为恶意的进程列表。查看阻止列表选项卡了解条目详情。", @@ -31691,10 +31686,8 @@ "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.file": "文件", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.network": "网络", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.process": "进程", - "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.session_data": "收集会话数据", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.session_data.description": "打开此项可捕获会话视图所需的扩展进程数据。会话视图为您提供了会话和进程执行数据的视觉表示形式。会话视图数据将根据 Linux 进程模型进行组织,以帮助您调查 Linux 基础架构上的进程、用户和服务活动。", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.session_data.title": "会话数据", - "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.tty_io": "捕获终端输出", "xpack.securitySolution.endpoint.policyDetailsConfig.linux.events.tty_io.tooltip": "打开此项可收集终端 (tty) 输出。终端输出在会话视图中显示,只要终端处于回显模式,您就可以单独查看该输出来了解执行了哪些命令、如何键入这些命令。仅在支持 ebpf 的主机上运行。", "xpack.securitySolution.endpoint.policyDetailsConfig.mac.events.file": "文件", "xpack.securitySolution.endpoint.policyDetailsConfig.mac.events.network": "网络", diff --git a/x-pack/test/security_solution_endpoint/apps/integrations/policy_details.ts b/x-pack/test/security_solution_endpoint/apps/integrations/policy_details.ts index e167315e0a126..0093119a21e18 100644 --- a/x-pack/test/security_solution_endpoint/apps/integrations/policy_details.ts +++ b/x-pack/test/security_solution_endpoint/apps/integrations/policy_details.ts @@ -7,7 +7,8 @@ import expect from '@kbn/expect'; import { IndexedHostsAndAlertsResponse } from '@kbn/security-solution-plugin/common/endpoint/index_data'; -import { popupVersionsMap } from '@kbn/security-solution-plugin/public/management/pages/policy/view/policy_forms/protections/popup_options_to_versions'; +import { PROTECTION_NOTICE_SUPPORTED_ENDPOINT_VERSION } from '@kbn/security-solution-plugin/public/management/pages/policy/view/policy_settings_form/protection_notice_supported_endpoint_version'; +import { getPolicySettingsFormTestSubjects } from '@kbn/security-solution-plugin/public/management/pages/policy/view/policy_settings_form/mocks'; import { FtrProviderContext } from '../../ftr_provider_context'; import { PolicyTestResourceInfo } from '../../services/endpoint_policy'; @@ -28,6 +29,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('When on the Endpoint Policy Details Page', function () { let indexedData: IndexedHostsAndAlertsResponse; + const formTestSubjects = getPolicySettingsFormTestSubjects(); before(async () => { indexedData = await endpointTestResources.loadEndpointData(); @@ -80,91 +82,94 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await pageObjects.policy.navigateToPolicyDetails(policyInfo.packagePolicy.id); }); - it('and the show advanced settings button is clicked', async () => { - await testSubjects.missingOrFail('advancedPolicyPanel'); + it('Should show/hide advanced section when button is clicked', async () => { + await testSubjects.missingOrFail(formTestSubjects.advancedSection.settingsContainer); // Expand await pageObjects.policy.showAdvancedSettingsSection(); - await testSubjects.existOrFail('advancedPolicyPanel'); + await testSubjects.existOrFail(formTestSubjects.advancedSection.settingsContainer); // Collapse await pageObjects.policy.hideAdvancedSettingsSection(); - await testSubjects.missingOrFail('advancedPolicyPanel'); + await testSubjects.missingOrFail(formTestSubjects.advancedSection.settingsContainer); }); }); ['malware', 'ransomware'].forEach((protection) => { - describe(`on the ${protection} protections section`, () => { + describe(`on the ${protection} protections card`, () => { let policyInfo: PolicyTestResourceInfo; + const cardTestSubj: + | typeof formTestSubjects['ransomware'] + | typeof formTestSubjects['malware'] = + formTestSubjects[ + protection as keyof Pick + ]; beforeEach(async () => { policyInfo = await policyTestResources.createPolicy(); await pageObjects.policy.navigateToPolicyDetails(policyInfo.packagePolicy.id); - await testSubjects.existOrFail(`${protection}ProtectionsForm`); }); afterEach(async () => { if (policyInfo) { await policyInfo.cleanup(); + + // @ts-expect-error forcing to undefined + policyInfo = undefined; } }); - it('should show the supported Endpoint version', async () => { - const supportedVersionElement = await testSubjects.findDescendant( - 'policySupportedVersions', - await testSubjects.find(`${protection}ProtectionsForm`) - ); - - expect(await supportedVersionElement.getVisibleText()).to.equal( - 'Agent version ' + popupVersionsMap.get(protection) + it('should show the supported Endpoint version for user notification', async () => { + expect(await testSubjects.getVisibleText(cardTestSubj.notifySupportedVersion)).to.equal( + 'Agent version ' + + PROTECTION_NOTICE_SUPPORTED_ENDPOINT_VERSION[ + protection as keyof typeof PROTECTION_NOTICE_SUPPORTED_ENDPOINT_VERSION + ] ); }); it('should show the custom message text area when the Notify User checkbox is checked', async () => { - expect(await testSubjects.isChecked(`${protection}UserNotificationCheckbox`)).to.be(true); - await testSubjects.existOrFail(`${protection}UserNotificationCustomMessage`); + expect(await testSubjects.isChecked(cardTestSubj.notifyUserCheckbox)).to.be(true); + await testSubjects.existOrFail(cardTestSubj.notifyCustomMessage); }); it('should not show the custom message text area when the Notify User checkbox is unchecked', async () => { - await pageObjects.endpointPageUtils.clickOnEuiCheckbox( - `${protection}UserNotificationCheckbox` - ); - expect(await testSubjects.isChecked(`${protection}UserNotificationCheckbox`)).to.be( - false - ); - await testSubjects.missingOrFail(`${protection}UserNotificationCustomMessage`); + await pageObjects.endpointPageUtils.clickOnEuiCheckbox(cardTestSubj.notifyUserCheckbox); + expect(await testSubjects.isChecked(cardTestSubj.notifyUserCheckbox)).to.be(false); + await testSubjects.missingOrFail(cardTestSubj.notifyCustomMessage); }); it('should show a sample custom message', async () => { - const customMessageBox = await testSubjects.find( - `${protection}UserNotificationCustomMessage` - ); - expect(await customMessageBox.getVisibleText()).equal( + expect(await testSubjects.getVisibleText(cardTestSubj.notifyCustomMessage)).equal( 'Elastic Security {action} {filename}' ); }); - it('should show a tooltip ', async () => { - const malwareTooltipIcon = await testSubjects.find(`${protection}TooltipIcon`); - await malwareTooltipIcon.moveMouseTo(); + it('should show a tooltip on hover', async () => { + await testSubjects.moveMouseTo(cardTestSubj.notifyCustomMessageTooltipIcon); - const malwareTooltip = await testSubjects.find(`${protection}Tooltip`); - expect(await malwareTooltip.getVisibleText()).equal( + expect( + await testSubjects.getVisibleText(cardTestSubj.notifyCustomMessageTooltipInfo) + ).equal( `Selecting the user notification option will display a notification to the host user when ${protection} is prevented or detected.\nThe user notification can be customized in the text box below. Bracketed tags can be used to dynamically populate the applicable action (such as prevented or detected) and the filename.` ); }); it('should preserve a custom notification message upon saving', async () => { - const customMessageBox = await testSubjects.find( - `${protection}UserNotificationCustomMessage` + await testSubjects.setValue(cardTestSubj.notifyCustomMessage, '', { + clearWithKeyboard: true, + }); + await testSubjects.setValue( + cardTestSubj.notifyCustomMessage, + 'a custom notification message @$% 123', + { typeCharByChar: true } ); - await customMessageBox.clearValue(); - await customMessageBox.type('a custom notification message @$% 123'); + await pageObjects.policy.confirmAndSave(); await testSubjects.existOrFail('policyDetailsSuccessMessage'); - expect( - await testSubjects.getVisibleText(`${protection}UserNotificationCustomMessage`) - ).to.equal('a custom notification message @$% 123'); + expect(await testSubjects.getVisibleText(cardTestSubj.notifyCustomMessage)).to.equal( + 'a custom notification message @$% 123' + ); }); }); }); @@ -180,21 +185,28 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { afterEach(async () => { if (policyInfo) { await policyInfo.cleanup(); + + // @ts-expect-error forcing to undefined + policyInfo = undefined; } }); it('should display success toast on successful save', async () => { - await pageObjects.endpointPageUtils.clickOnEuiCheckbox('policyWindowsEvent_dns'); + await pageObjects.endpointPageUtils.clickOnEuiCheckbox( + formTestSubjects.windowsEvents.dnsCheckbox + ); await pageObjects.policy.confirmAndSave(); await testSubjects.existOrFail('policyDetailsSuccessMessage'); expect(await testSubjects.getVisibleText('policyDetailsSuccessMessage')).to.equal( - `Integration ${policyInfo.packagePolicy.name} has been updated.` + `Success!\nIntegration ${policyInfo.packagePolicy.name} has been updated.` ); }); it('should persist update on the screen', async () => { - await pageObjects.endpointPageUtils.clickOnEuiCheckbox('policyWindowsEvent_process'); + await pageObjects.endpointPageUtils.clickOnEuiCheckbox( + formTestSubjects.windowsEvents.processCheckbox + ); await pageObjects.policy.confirmAndSave(); await testSubjects.existOrFail('policyDetailsSuccessMessage'); @@ -202,9 +214,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await pageObjects.endpoint.navigateToEndpointList(); await pageObjects.policy.navigateToPolicyDetails(policyInfo.packagePolicy.id); - expect(await (await testSubjects.find('policyWindowsEvent_process')).isSelected()).to.equal( - false - ); + expect( + await ( + await testSubjects.find(formTestSubjects.windowsEvents.processCheckbox) + ).isSelected() + ).to.equal(false); }); it('should have updated policy data in overall Agent Policy', async () => { @@ -212,9 +226,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { // to the generated Agent Policy that is dispatch down to the Elastic Agent. await Promise.all([ - pageObjects.endpointPageUtils.clickOnEuiCheckbox('policyWindowsEvent_file'), - pageObjects.endpointPageUtils.clickOnEuiCheckbox('policyLinuxEvent_file'), - pageObjects.endpointPageUtils.clickOnEuiCheckbox('policyMacEvent_file'), + pageObjects.endpointPageUtils.clickOnEuiCheckbox( + formTestSubjects.windowsEvents.fileCheckbox + ), + pageObjects.endpointPageUtils.clickOnEuiCheckbox( + formTestSubjects.linuxEvents.fileCheckbox + ), + pageObjects.endpointPageUtils.clickOnEuiCheckbox(formTestSubjects.macEvents.fileCheckbox), ]); await pageObjects.policy.showAdvancedSettingsSection(); @@ -290,7 +308,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { policyInfo.agentPolicy.id, policyInfo.packagePolicy.id ); - await testSubjects.existOrFail('endpointIntegrationPolicyForm'); }); afterEach(async () => { @@ -300,27 +317,41 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should show the endpoint policy form', async () => { - await testSubjects.existOrFail('endpointIntegrationPolicyForm'); + await testSubjects.existOrFail(formTestSubjects.form); }); it('should allow updates to policy items', async () => { - const winDnsEventingCheckbox = await testSubjects.find('policyWindowsEvent_dns'); + const winDnsEventingCheckbox = await testSubjects.find( + formTestSubjects.windowsEvents.dnsCheckbox + ); await pageObjects.ingestManagerCreatePackagePolicy.scrollToCenterOfWindow( winDnsEventingCheckbox ); expect(await winDnsEventingCheckbox.isSelected()).to.be(true); - await pageObjects.endpointPageUtils.clickOnEuiCheckbox('policyWindowsEvent_dns'); - await pageObjects.policy.waitForCheckboxSelectionChange('policyWindowsEvent_dns', false); + await pageObjects.endpointPageUtils.clickOnEuiCheckbox( + formTestSubjects.windowsEvents.dnsCheckbox + ); + await pageObjects.policy.waitForCheckboxSelectionChange( + formTestSubjects.windowsEvents.dnsCheckbox, + false + ); }); it('should include updated endpoint data when saved', async () => { await pageObjects.ingestManagerCreatePackagePolicy.scrollToCenterOfWindow( - await testSubjects.find('policyWindowsEvent_dns') + await testSubjects.find(formTestSubjects.windowsEvents.dnsCheckbox) + ); + await pageObjects.endpointPageUtils.clickOnEuiCheckbox( + formTestSubjects.windowsEvents.dnsCheckbox + ); + const updatedCheckboxValue = await testSubjects.isSelected( + formTestSubjects.windowsEvents.dnsCheckbox ); - await pageObjects.endpointPageUtils.clickOnEuiCheckbox('policyWindowsEvent_dns'); - const updatedCheckboxValue = await testSubjects.isSelected('policyWindowsEvent_dns'); - await pageObjects.policy.waitForCheckboxSelectionChange('policyWindowsEvent_dns', false); + await pageObjects.policy.waitForCheckboxSelectionChange( + formTestSubjects.windowsEvents.dnsCheckbox, + false + ); await (await pageObjects.ingestManagerCreatePackagePolicy.findSaveButton(true)).click(); await pageObjects.ingestManagerCreatePackagePolicy.waitForSaveSuccessNotification(true); @@ -331,7 +362,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ); await pageObjects.policy.waitForCheckboxSelectionChange( - 'policyWindowsEvent_dns', + formTestSubjects.windowsEvents.dnsCheckbox, updatedCheckboxValue ); }); diff --git a/x-pack/test/security_solution_endpoint/page_objects/policy_page.ts b/x-pack/test/security_solution_endpoint/page_objects/policy_page.ts index da4fb936d6655..f2b6452245135 100644 --- a/x-pack/test/security_solution_endpoint/page_objects/policy_page.ts +++ b/x-pack/test/security_solution_endpoint/page_objects/policy_page.ts @@ -6,12 +6,14 @@ */ import expect from '@kbn/expect'; +import { getPolicySettingsFormTestSubjects } from '@kbn/security-solution-plugin/public/management/pages/policy/view/policy_settings_form/mocks'; import { FtrProviderContext } from '../ftr_provider_context'; export function EndpointPolicyPageProvider({ getService, getPageObjects }: FtrProviderContext) { const pageObjects = getPageObjects(['common', 'header']); const testSubjects = getService('testSubjects'); const retryService = getService('retry'); + const formTestSubj = getPolicySettingsFormTestSubjects(); return { /** @@ -59,16 +61,8 @@ export function EndpointPolicyPageProvider({ getService, getPageObjects }: FtrPr return await testSubjects.find('policyDetailsCancelButton'); }, - /** - * Finds and returns the Advanced Policy Show/Hide Button - */ - async findAdvancedPolicyButton() { - await this.ensureIsOnDetailsPage(); - return await testSubjects.find('advancedPolicyButton'); - }, - async isAdvancedSettingsExpanded() { - return await testSubjects.exists('advancedPolicyPanel'); + return await testSubjects.exists(formTestSubj.advancedSection.settingsContainer); }, /** @@ -76,12 +70,9 @@ export function EndpointPolicyPageProvider({ getService, getPageObjects }: FtrPr */ async showAdvancedSettingsSection() { if (!(await this.isAdvancedSettingsExpanded())) { - const expandButton = await this.findAdvancedPolicyButton(); - await expandButton.click(); + await testSubjects.click(formTestSubj.advancedSection.showHideButton); } - - await testSubjects.existOrFail('advancedPolicyPanel'); - await testSubjects.scrollIntoView('advancedPolicyPanel'); + await testSubjects.scrollIntoView(formTestSubj.advancedSection.settingsContainer); }, /** @@ -89,10 +80,9 @@ export function EndpointPolicyPageProvider({ getService, getPageObjects }: FtrPr */ async hideAdvancedSettingsSection() { if (await this.isAdvancedSettingsExpanded()) { - const expandButton = await this.findAdvancedPolicyButton(); - await expandButton.click(); + await testSubjects.click(formTestSubj.advancedSection.showHideButton); } - await testSubjects.missingOrFail('advancedPolicyPanel'); + await testSubjects.missingOrFail(formTestSubj.advancedSection.settingsContainer); }, /** @@ -104,7 +94,7 @@ export function EndpointPolicyPageProvider({ getService, getPageObjects }: FtrPr }, /** - * ensures that the Details Page is the currently display view + * ensures that the Details Page is currently displayed */ async ensureIsOnDetailsPage() { await testSubjects.existOrFail('policyDetailsPage'); @@ -116,8 +106,6 @@ export function EndpointPolicyPageProvider({ getService, getPageObjects }: FtrPr async confirmAndSave() { await this.ensureIsOnDetailsPage(); - const saveButton = await this.findSaveButton(); - // Sometimes, data retrieval errors may have been encountered by other security solution processes // (ex. index fields search here: `x-pack/plugins/security_solution/public/common/containers/source/index.tsx:181`) // which are displayed using one or more Toast messages. This in turn prevents the user from @@ -125,31 +113,11 @@ export function EndpointPolicyPageProvider({ getService, getPageObjects }: FtrPr // we'll first check that all toasts are cleared await pageObjects.common.clearAllToasts(); - await saveButton.click(); + await testSubjects.click('policyDetailsSaveButton'); await testSubjects.existOrFail('policyDetailsConfirmModal'); await pageObjects.common.clickConfirmOnModal(); }, - /** - * Finds and returns the Create New policy Policy button displayed on the List page - */ - async findHeaderCreateNewButton() { - // The Create button is initially disabled because we need to first make a call to Ingest - // to retrieve the package version, so that the redirect works as expected. So, we wait - // for that to occur here a well. - await testSubjects.waitForEnabled('headerCreateNewPolicyButton'); - return await testSubjects.find('headerCreateNewPolicyButton'); - }, - - /** - * Used when looking a the Ingest create/edit package policy pages. Finds the endpoint - * custom configuration component - * @param onEditPage - */ - async findPackagePolicyEndpointCustomConfiguration(onEditPage: boolean = false) { - return await testSubjects.find(`endpointPackagePolicy_${onEditPage ? 'edit' : 'create'}`); - }, - /** * Waits for a Checkbox/Radiobutton to have its `isSelected()` value match the provided expected value * @param selector From 0cd98f1dfbeee6cb53832778df94058112fefbb4 Mon Sep 17 00:00:00 2001 From: Matthew Kime Date: Wed, 12 Jul 2023 14:31:33 -0500 Subject: [PATCH 10/50] [data discovery] Remove deprecated saved object type references (#161683) ## Summary Cleanup after removing saved object browser client usage. Removing usage of deprecated types, mostly replacing with non-deprecated versions. Closes https://github.com/elastic/kibana/issues/157073 --------- Co-authored-by: Jean-Louis Leysens --- .../search_source/extract_references.ts | 2 +- .../search_source/inject_references.test.ts | 2 +- .../search/search_source/inject_references.ts | 2 +- .../search/session/sessions_mgmt/lib/api.ts | 15 ++++++----- .../search_session_migration.test.ts | 2 +- .../data_views/persistable_state.test.ts | 2 +- .../common/expressions/load_index_pattern.ts | 2 +- .../data_views/common/lib/get_title.ts | 27 ------------------- src/plugins/data_views/common/lib/index.ts | 1 - 9 files changed, 14 insertions(+), 41 deletions(-) delete mode 100644 src/plugins/data_views/common/lib/get_title.ts diff --git a/src/plugins/data/common/search/search_source/extract_references.ts b/src/plugins/data/common/search/search_source/extract_references.ts index 5848cfb232e52..d77d90e3c2845 100644 --- a/src/plugins/data/common/search/search_source/extract_references.ts +++ b/src/plugins/data/common/search/search_source/extract_references.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { SavedObjectReference } from '@kbn/core/types'; +import type { SavedObjectReference } from '@kbn/core/server'; import { Filter } from '@kbn/es-query'; import { DataViewPersistableStateService } from '@kbn/data-views-plugin/common'; import { SerializedSearchSourceFields } from './types'; diff --git a/src/plugins/data/common/search/search_source/inject_references.test.ts b/src/plugins/data/common/search/search_source/inject_references.test.ts index 11d098533f449..cce3a2bf6a196 100644 --- a/src/plugins/data/common/search/search_source/inject_references.test.ts +++ b/src/plugins/data/common/search/search_source/inject_references.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { SavedObjectReference } from '@kbn/core/types'; +import type { SavedObjectReference } from '@kbn/core/server'; import { SerializedSearchSourceFields } from './types'; import { injectReferences } from './inject_references'; diff --git a/src/plugins/data/common/search/search_source/inject_references.ts b/src/plugins/data/common/search/search_source/inject_references.ts index 09b1be840b5e4..e6fb9160b08be 100644 --- a/src/plugins/data/common/search/search_source/inject_references.ts +++ b/src/plugins/data/common/search/search_source/inject_references.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { SavedObjectReference } from '@kbn/core/types'; +import type { SavedObjectReference } from '@kbn/core/server'; import { DataViewPersistableStateService } from '@kbn/data-views-plugin/common'; import { SerializedSearchSourceFields } from './types'; diff --git a/src/plugins/data/public/search/session/sessions_mgmt/lib/api.ts b/src/plugins/data/public/search/session/sessions_mgmt/lib/api.ts index ee5b4d504e294..753f43dcbb648 100644 --- a/src/plugins/data/public/search/session/sessions_mgmt/lib/api.ts +++ b/src/plugins/data/public/search/session/sessions_mgmt/lib/api.ts @@ -7,7 +7,7 @@ */ import { i18n } from '@kbn/i18n'; -import type { ApplicationStart, NotificationsStart, SavedObject } from '@kbn/core/public'; +import type { ApplicationStart, NotificationsStart } from '@kbn/core/public'; import moment from 'moment'; import { from, race, timer } from 'rxjs'; import { mapTo, tap } from 'rxjs/operators'; @@ -26,6 +26,11 @@ import { SearchSessionsConfigSchema } from '../../../../../config'; type LocatorsStart = SharePluginStart['url']['locators']; +interface SearchSessionSavedObject { + id: string; + attributes: PersistedSearchSessionSavedObjectAttributes; +} + function getActions(status: UISearchSessionState) { const actions: ACTION[] = []; actions.push(ACTION.INSPECT); @@ -65,9 +70,7 @@ const mapToUISession = config: SearchSessionsConfigSchema, sessionStatuses: SearchSessionsFindResponse['statuses'] ) => - async ( - savedObject: SavedObject - ): Promise => { + async (savedObject: SearchSessionSavedObject): Promise => { const { name, appId, @@ -152,9 +155,7 @@ export class SearchSessionsMgmtAPI { try { const result = await race(fetch$, timeout$).toPromise(); if (result && result.saved_objects) { - const savedObjects = result.saved_objects as Array< - SavedObject - >; + const savedObjects = result.saved_objects as SearchSessionSavedObject[]; return await Promise.all( savedObjects.map(mapToUISession(this.deps.locators, this.config, result.statuses)) ); diff --git a/src/plugins/data/server/search/saved_objects/search_session_migration.test.ts b/src/plugins/data/server/search/saved_objects/search_session_migration.test.ts index d1c9ef15d4197..4e858089bc656 100644 --- a/src/plugins/data/server/search/saved_objects/search_session_migration.test.ts +++ b/src/plugins/data/server/search/saved_objects/search_session_migration.test.ts @@ -13,7 +13,7 @@ import { SearchSessionSavedObjectAttributesPre$8$0$0, SearchSessionSavedObjectAttributesPre$8$6$0, } from './search_session_migration'; -import { SavedObject } from '@kbn/core/types'; +import type { SavedObject } from '@kbn/core/server'; import { SEARCH_SESSION_TYPE, SearchSessionStatus, SearchStatus } from '../../../common'; import { SavedObjectMigrationContext } from '@kbn/core/server'; import { SavedObjectsUtils } from '@kbn/core-saved-objects-utils-server'; diff --git a/src/plugins/data_views/common/data_views/persistable_state.test.ts b/src/plugins/data_views/common/data_views/persistable_state.test.ts index 473b9ea02bd47..a375e47df88da 100644 --- a/src/plugins/data_views/common/data_views/persistable_state.test.ts +++ b/src/plugins/data_views/common/data_views/persistable_state.test.ts @@ -7,7 +7,7 @@ */ import { DataViewPersistableStateService } from './persistable_state'; -import { SavedObjectReference } from '@kbn/core/types'; +import type { SavedObjectReference } from '@kbn/core/server'; import { DataViewSpec } from '../types'; const { inject, extract } = DataViewPersistableStateService; diff --git a/src/plugins/data_views/common/expressions/load_index_pattern.ts b/src/plugins/data_views/common/expressions/load_index_pattern.ts index 58510bf3a70f9..fcfdf16865ee7 100644 --- a/src/plugins/data_views/common/expressions/load_index_pattern.ts +++ b/src/plugins/data_views/common/expressions/load_index_pattern.ts @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; import { ExpressionFunctionDefinition } from '@kbn/expressions-plugin/common'; -import { SavedObjectReference } from '@kbn/core/types'; +import type { SavedObjectReference } from '@kbn/core/server'; import { DataViewsContract } from '../data_views'; import { DataViewSpec } from '..'; diff --git a/src/plugins/data_views/common/lib/get_title.ts b/src/plugins/data_views/common/lib/get_title.ts deleted file mode 100644 index 0dfb274ef240f..0000000000000 --- a/src/plugins/data_views/common/lib/get_title.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { SavedObjectsClientContract } from '@kbn/core/public'; -import { DATA_VIEW_SAVED_OBJECT_TYPE } from '../constants'; -import { DataViewAttributes } from '../types'; - -export async function getTitle( - client: SavedObjectsClientContract, - indexPatternId: string -): Promise { - const savedObject = await client.get( - DATA_VIEW_SAVED_OBJECT_TYPE, - indexPatternId - ); - - if (savedObject.error) { - throw new Error(`Unable to get index-pattern title: ${savedObject.error.message}`); - } - - return savedObject.attributes.title; -} diff --git a/src/plugins/data_views/common/lib/index.ts b/src/plugins/data_views/common/lib/index.ts index 0554232e64cae..e27370682c3cf 100644 --- a/src/plugins/data_views/common/lib/index.ts +++ b/src/plugins/data_views/common/lib/index.ts @@ -7,7 +7,6 @@ */ export { DataViewMissingIndices } from './errors'; -export { getTitle } from './get_title'; export * from './types'; export { validateDataView } from './validate_data_view'; From 4ae94c35024f2037ee02502037b873d93256d200 Mon Sep 17 00:00:00 2001 From: Dario Gieselaar Date: Wed, 12 Jul 2023 21:58:13 +0200 Subject: [PATCH 11/50] [Observability] Add feedback buttons for prompts (#160351) Co-authored-by: Sean Heelan --- .../test_suites/core_plugins/rendering.ts | 1 + .../error_sample_co_pilot_prompt.tsx | 1 + x-pack/plugins/apm/server/feature.ts | 4 +- .../components/explain_log_rate_spike.tsx | 1 + .../tabs/processes/process_row.tsx | 1 + x-pack/plugins/infra/server/features.ts | 8 +- .../log_entry_flyout/log_entry_flyout.tsx | 2 + .../observability/common/co_pilot/index.ts | 28 +++ .../{co_pilot.ts => co_pilot/prompts.ts} | 125 +++++------ x-pack/plugins/observability/common/index.ts | 2 +- .../co_pilot_prompt/co_pilot_prompt.tsx | 102 ++++++--- .../co_pilot_prompt_feedback.tsx | 131 +++++++++++ .../create_co_pilot_service.ts | 212 +++++++++++------- .../pages/overview/overview.stories.tsx | 3 + .../public/pages/rules/rules.test.tsx | 5 +- x-pack/plugins/observability/public/plugin.ts | 6 +- .../observability/public/typings/co_pilot.ts | 17 +- .../kibana_react.storybook_decorator.tsx | 3 + .../public/utils/test_helper.tsx | 3 + x-pack/plugins/observability/server/index.ts | 3 + x-pack/plugins/observability/server/plugin.ts | 7 + .../server/routes/copilot/route.ts | 77 ++++++- .../server/routes/register_routes.ts | 12 +- .../observability/server/routes/types.ts | 2 + .../server/services/openai/config.ts | 6 + .../technical_preview_badge.tsx | 31 +++ .../observability_shared/public/index.ts | 2 + .../frame_information_window/index.tsx | 11 +- x-pack/plugins/profiling/server/feature.ts | 4 +- 29 files changed, 592 insertions(+), 218 deletions(-) create mode 100644 x-pack/plugins/observability/common/co_pilot/index.ts rename x-pack/plugins/observability/common/{co_pilot.ts => co_pilot/prompts.ts} (75%) create mode 100644 x-pack/plugins/observability/public/components/co_pilot_prompt/co_pilot_prompt_feedback.tsx create mode 100644 x-pack/plugins/observability_shared/public/components/technical_preview_badge/technical_preview_badge.tsx diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index e711aba9b82a1..7a3b22d62712c 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -273,6 +273,7 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.upgrade_assistant.featureSet.reindexCorrectiveActions (boolean)', 'xpack.upgrade_assistant.ui.enabled (boolean)', 'xpack.observability.aiAssistant.enabled (boolean)', + 'xpack.observability.aiAssistant.feedback.enabled (boolean)', 'xpack.observability.unsafe.alertDetails.metrics.enabled (boolean)', 'xpack.observability.unsafe.alertDetails.logs.enabled (boolean)', 'xpack.observability.unsafe.alertDetails.uptime.enabled (boolean)', diff --git a/x-pack/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_co_pilot_prompt.tsx b/x-pack/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_co_pilot_prompt.tsx index 78631a9db1cc3..dd78c7f090e98 100644 --- a/x-pack/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_co_pilot_prompt.tsx +++ b/x-pack/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_co_pilot_prompt.tsx @@ -49,6 +49,7 @@ export function ErrorSampleCoPilotPrompt({ )} promptId={CoPilotPromptId.ApmExplainError} params={promptParams} + feedbackEnabled={false} /> diff --git a/x-pack/plugins/apm/server/feature.ts b/x-pack/plugins/apm/server/feature.ts index 09681f01da2d6..292f48bf18156 100644 --- a/x-pack/plugins/apm/server/feature.ts +++ b/x-pack/plugins/apm/server/feature.ts @@ -35,7 +35,7 @@ export const APM_FEATURE = { privileges: { all: { app: [APM_SERVER_FEATURE_ID, 'ux', 'kibana'], - api: [APM_SERVER_FEATURE_ID, 'apm_write', 'rac'], + api: [APM_SERVER_FEATURE_ID, 'apm_write', 'rac', 'ai_assistant'], catalogue: [APM_SERVER_FEATURE_ID], savedObject: { all: [], @@ -56,7 +56,7 @@ export const APM_FEATURE = { }, read: { app: [APM_SERVER_FEATURE_ID, 'ux', 'kibana'], - api: [APM_SERVER_FEATURE_ID, 'rac'], + api: [APM_SERVER_FEATURE_ID, 'rac', 'ai_assistant'], catalogue: [APM_SERVER_FEATURE_ID], savedObject: { all: [], diff --git a/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/components/explain_log_rate_spike.tsx b/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/components/explain_log_rate_spike.tsx index a8acacd8debd1..c0837f0749b67 100644 --- a/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/components/explain_log_rate_spike.tsx +++ b/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/components/explain_log_rate_spike.tsx @@ -230,6 +230,7 @@ export const ExplainLogRateSpikes: FC
) : null} diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/node_details/tabs/processes/process_row.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/node_details/tabs/processes/process_row.tsx index 646cb82e696bb..c1365364c9ae1 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/node_details/tabs/processes/process_row.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/node_details/tabs/processes/process_row.tsx @@ -49,6 +49,7 @@ export const CopilotProcessRow = ({ command }: { command: string }) => { title={explainProcessMessageTitle} params={explainProcessParams} promptId={CoPilotPromptId.InfraExplainProcess} + feedbackEnabled={true} />
diff --git a/x-pack/plugins/infra/server/features.ts b/x-pack/plugins/infra/server/features.ts index e9fec4a5b4f5d..41f60ab5eac9b 100644 --- a/x-pack/plugins/infra/server/features.ts +++ b/x-pack/plugins/infra/server/features.ts @@ -33,7 +33,7 @@ export const METRICS_FEATURE = { all: { app: ['infra', 'metrics', 'kibana'], catalogue: ['infraops', 'metrics'], - api: ['infra', 'rac'], + api: ['infra', 'rac', 'ai_assistant'], savedObject: { all: ['infrastructure-ui-source'], read: ['index-pattern'], @@ -54,7 +54,7 @@ export const METRICS_FEATURE = { read: { app: ['infra', 'metrics', 'kibana'], catalogue: ['infraops', 'metrics'], - api: ['infra', 'rac'], + api: ['infra', 'rac', 'ai_assistant'], savedObject: { all: [], read: ['infrastructure-ui-source', 'index-pattern'], @@ -92,7 +92,7 @@ export const LOGS_FEATURE = { all: { app: ['infra', 'logs', 'kibana'], catalogue: ['infralogging', 'logs'], - api: ['infra', 'rac'], + api: ['infra', 'rac', 'ai_assistant'], savedObject: { all: [infraSourceConfigurationSavedObjectName, logViewSavedObjectName], read: [], @@ -113,7 +113,7 @@ export const LOGS_FEATURE = { read: { app: ['infra', 'logs', 'kibana'], catalogue: ['infralogging', 'logs'], - api: ['infra', 'rac'], + api: ['infra', 'rac', 'ai_assistant'], alerting: { rule: { read: [LOG_DOCUMENT_COUNT_RULE_TYPE_ID], diff --git a/x-pack/plugins/logs_shared/public/components/logging/log_entry_flyout/log_entry_flyout.tsx b/x-pack/plugins/logs_shared/public/components/logging/log_entry_flyout/log_entry_flyout.tsx index e06064c676a63..70185794f380f 100644 --- a/x-pack/plugins/logs_shared/public/components/logging/log_entry_flyout/log_entry_flyout.tsx +++ b/x-pack/plugins/logs_shared/public/components/logging/log_entry_flyout/log_entry_flyout.tsx @@ -204,6 +204,7 @@ export const LogEntryFlyout = ({ title={explainLogMessageTitle} params={explainLogMessageParams} promptId={CoPilotPromptId.LogsExplainMessage} + feedbackEnabled={false} /> ) : null} @@ -214,6 +215,7 @@ export const LogEntryFlyout = ({ title={similarLogMessagesTitle} params={similarLogMessageParams} promptId={CoPilotPromptId.LogsFindSimilar} + feedbackEnabled={false} /> ) : null} diff --git a/x-pack/plugins/observability/common/co_pilot/index.ts b/x-pack/plugins/observability/common/co_pilot/index.ts new file mode 100644 index 0000000000000..0d1765402a53e --- /dev/null +++ b/x-pack/plugins/observability/common/co_pilot/index.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export enum OpenAIProvider { + OpenAI = 'openAI', + AzureOpenAI = 'azureOpenAI', +} + +export enum CoPilotPromptId { + ProfilingOptimizeFunction = 'profilingOptimizeFunction', + ApmExplainError = 'apmExplainError', + LogsExplainMessage = 'logsExplainMessage', + LogsFindSimilar = 'logsFindSimilar', + InfraExplainProcess = 'infraExplainProcess', + ExplainLogSpike = 'explainLogSpike', +} + +export type { + CoPilotPromptMap, + CreateChatCompletionResponseChunk, + PromptParamsOf, +} from './prompts'; + +export const loadCoPilotPrompts = () => import('./prompts').then((m) => m.coPilotPrompts); diff --git a/x-pack/plugins/observability/common/co_pilot.ts b/x-pack/plugins/observability/common/co_pilot/prompts.ts similarity index 75% rename from x-pack/plugins/observability/common/co_pilot.ts rename to x-pack/plugins/observability/common/co_pilot/prompts.ts index 9ec88ee24648a..0093232d0c8e7 100644 --- a/x-pack/plugins/observability/common/co_pilot.ts +++ b/x-pack/plugins/observability/common/co_pilot/prompts.ts @@ -5,26 +5,12 @@ * 2.0. */ import * as t from 'io-ts'; -import { - type ChatCompletionRequestMessage, - type CreateChatCompletionResponse, - type CreateChatCompletionResponseChoicesInner, +import type { + ChatCompletionRequestMessage, + CreateChatCompletionResponse, + CreateChatCompletionResponseChoicesInner, } from 'openai'; - -export enum OpenAIProvider { - OpenAI = 'openAI', - AzureOpenAI = 'azureOpenAI', -} - -export enum CoPilotPromptId { - ProfilingExplainFunction = 'profilingExplainFunction', - ProfilingOptimizeFunction = 'profilingOptimizeFunction', - ApmExplainError = 'apmExplainError', - LogsExplainMessage = 'logsExplainMessage', - LogsFindSimilar = 'logsFindSimilar', - InfraExplainProcess = 'infraExplainProcess', - ExplainLogSpike = 'explainLogSpike', -} +import { CoPilotPromptId } from '.'; const PERF_GPT_SYSTEM_MESSAGE = { content: `You are perf-gpt, a helpful assistant for performance analysis and optimisation @@ -83,49 +69,6 @@ const significantFieldValuesRt = t.array( export const coPilotPrompts = { [CoPilotPromptId.ProfilingOptimizeFunction]: prompt({ - params: t.type({ - library: t.string, - functionName: t.string, - }), - messages: ({ library, functionName }) => { - return [ - PERF_GPT_SYSTEM_MESSAGE, - { - content: `Assuming the function ${functionName} from the library ${library} is consuming significant CPU resources. - Suggest ways to optimize or improve the system that involve the ${functionName} function from the - ${library} library. Types of improvements that would be useful to me are improvements that result in: - - - Higher performance so that the system runs faster or uses less CPU - - Better memory efficient so that the system uses less RAM - - Better storage efficient so that the system stores less data on disk. - - Better network I/O efficiency so that less data is sent over the network - - Better disk I/O efficiency so that less data is read and written from disk - - Make up to five suggestions. Your suggestions must meet all of the following criteria: - 1. Your suggestions should be detailed, technical and include concrete examples. - 2. Your suggestions should be specific to improving performance of a system in which the ${functionName} function from - the ${library} library is consuming significant CPU. - 2. If you suggest replacing the function or library with a more efficient replacement you must suggest at least - one concrete replacement. - - If you know of fewer than five ways to improve the performance of a system in which the ${functionName} function from the - ${library} library is consuming significant CPU, then provide fewer than five suggestions. If you do not know of any - way in which to improve the performance then say "I do not know how to improve the performance of systems where - this function is consuming a significant amount of CPU". - - If you have suggestions, the output format should look as follows: - - Here are some suggestions as to how you might optimize your system if ${functionName} in ${library} is consuming - significant CPU resources: - 1. Insert first suggestion - 2. Insert second suggestion - etc.`, - role: 'user', - }, - ]; - }, - }), - [CoPilotPromptId.ProfilingExplainFunction]: prompt({ params: t.type({ library: t.string, functionName: t.string, @@ -135,18 +78,52 @@ export const coPilotPrompts = { PERF_GPT_SYSTEM_MESSAGE, { content: `I am a software engineer. I am trying to understand what a function in a particular - software library does. - - The library is: ${library} - The function is: ${functionName} - - Your task is to describe what the library is and what its use cases are, and to describe what the function - does. The output format should look as follows: - - Library description: Provide a concise description of the library - Library use-cases: Provide a concise description of what the library is typically used for. - Function description: Provide a concise, technical, description of what the function does. - `, + software library does. + + The library is: ${library} + The function is: ${functionName} + + Your have two tasks. Your first task is to desribe what the library is and what its use cases are, and to + describe what the function does. The output format should look as follows: + + Library description: Provide a concise description of the library + Library use-cases: Provide a concise description of what the library is typically used for. + Function description: Provide a concise, technical, description of what the function does. + + Assume the function ${functionName} from the library ${library} is consuming significant CPU resources. + Your second task is to suggest ways to optimize or improve the system that involve the ${functionName} function from the + ${library} library. Types of improvements that would be useful to me are improvements that result in: + + - Higher performance so that the system runs faster or uses less CPU + - Better memory efficient so that the system uses less RAM + - Better storage efficient so that the system stores less data on disk. + - Better network I/O efficiency so that less data is sent over the network + - Better disk I/O efficiency so that less data is read and written from disk + + Make up to five suggestions. Your suggestions must meet all of the following criteria: + 1. Your suggestions should detailed, technical and include concrete examples. + 2. Your suggestions should be specific to improving performance of a system in which the ${functionName} function from + the ${library} library is consuming significant CPU. + 3. If you suggest replacing the function or library with a more efficient replacement you must suggest at least + one concrete replacement. + + If you know of fewer than five ways to improve the performance of a system in which the ${functionName} function from the + ${library} library is consuming significant CPU, then provide fewer than five suggestions. If you do not know of any + way in which to improve the performance then say "I do not know how to improve the performance of systems where + this function is consuming a significant amount of CPU". + + Do not suggest using a CPU profiler. I have already profiled my code. The profiler I used is Elastic Universal Profiler. + If there is specific information I should look for in the profiler output then tell me what information to look for + in the output of Elastic Universal Profiler. + + You must not include URLs, web addresses or websites of any kind in your output. + + If you have suggestions, the output format should look as follows: + + Here are some suggestions as to how you might optimize your system if ${functionName} in ${library} is consuming + significant CPU resources: + 1. Insert first suggestion + 2. Insert second suggestion`, role: 'user', }, ]; diff --git a/x-pack/plugins/observability/common/index.ts b/x-pack/plugins/observability/common/index.ts index 1d4bf57abf285..ab921a8c0c544 100644 --- a/x-pack/plugins/observability/common/index.ts +++ b/x-pack/plugins/observability/common/index.ts @@ -82,4 +82,4 @@ export { SYNTHETICS_WAIT_TIMINGS, } from './field_names/synthetics'; -export { CoPilotPromptId, coPilotPrompts } from './co_pilot'; +export { CoPilotPromptId, loadCoPilotPrompts } from './co_pilot'; diff --git a/x-pack/plugins/observability/public/components/co_pilot_prompt/co_pilot_prompt.tsx b/x-pack/plugins/observability/public/components/co_pilot_prompt/co_pilot_prompt.tsx index 9f762b20e9146..c1241ca62d93b 100644 --- a/x-pack/plugins/observability/public/components/co_pilot_prompt/co_pilot_prompt.tsx +++ b/x-pack/plugins/observability/public/components/co_pilot_prompt/co_pilot_prompt.tsx @@ -8,22 +8,25 @@ import { EuiAccordion, EuiFlexGroup, EuiFlexItem, + EuiHorizontalRule, EuiIcon, EuiLoadingSpinner, EuiPanel, EuiSpacer, EuiText, - EuiToolTip, useEuiTheme, } from '@elastic/eui'; import { css } from '@emotion/css'; import { i18n } from '@kbn/i18n'; -import React, { useEffect, useMemo, useState } from 'react'; +import { TechnicalPreviewBadge } from '@kbn/observability-shared-plugin/public'; +import type { ChatCompletionRequestMessage } from 'openai'; +import React, { useMemo, useState } from 'react'; import useObservable from 'react-use/lib/useObservable'; import { catchError, Observable, of } from 'rxjs'; import { CoPilotPromptId } from '../../../common'; import type { PromptParamsOf } from '../../../common/co_pilot'; import type { CoPilotService, PromptObservableState } from '../../typings/co_pilot'; +import { CoPilotPromptFeedback } from './co_pilot_prompt_feedback'; const cursorCss = css` @keyframes blink { @@ -51,6 +54,7 @@ export interface CoPilotPromptProps { promptId: TPromptId; coPilot: CoPilotService; params: PromptParamsOf; + feedbackEnabled: boolean; } // eslint-disable-next-line import/no-default-export @@ -59,26 +63,47 @@ export default function CoPilotPrompt({ coPilot, promptId, params, + feedbackEnabled, }: CoPilotPromptProps) { const [hasOpened, setHasOpened] = useState(false); const theme = useEuiTheme(); + const [responseTime, setResponseTime] = useState(undefined); + const conversation$ = useMemo(() => { - return hasOpened - ? coPilot - .prompt(promptId, params) - .pipe( - catchError((err) => of({ loading: false, error: err, message: String(err.message) })) - ) - : new Observable(() => {}); - }, [params, promptId, coPilot, hasOpened]); + if (hasOpened) { + setResponseTime(undefined); - const conversation = useObservable(conversation$); + const now = Date.now(); + + const observable = coPilot.prompt(promptId, params).pipe( + catchError((err) => + of({ + messages: [] as ChatCompletionRequestMessage[], + loading: false, + error: err, + message: String(err.message), + }) + ) + ); - useEffect(() => {}, [conversation$]); + observable.subscribe({ + complete: () => { + setResponseTime(Date.now() - now); + }, + }); + + return observable; + } + + return new Observable(() => {}); + }, [params, promptId, coPilot, hasOpened, setResponseTime]); + + const conversation = useObservable(conversation$); const content = conversation?.message ?? ''; + const messages = conversation?.messages; let state: 'init' | 'loading' | 'streaming' | 'error' | 'complete' = 'init'; @@ -94,10 +119,26 @@ export default function CoPilotPrompt({ if (state === 'complete' || state === 'streaming') { inner = ( -

- {content} - {state === 'streaming' ? : <>} -

+ <> +

+ {content} + {state === 'streaming' ? : undefined} +

+ {state === 'complete' ? ( + <> + + {coPilot.isTrackingEnabled() && feedbackEnabled ? ( + + ) : undefined} + + ) : undefined} + ); } else if (state === 'init' || state === 'loading') { inner = ( @@ -128,10 +169,6 @@ export default function CoPilotPrompt({ ); } - const tooltipContent = i18n.translate('xpack.observability.coPilotPrompt.askCoPilot', { - defaultMessage: 'Ask Observability AI Assistent for help', - }); - return ( ({ buttonContent={ - - {title} - + + + + {title} + + + + + {i18n.translate('xpack.observability.coPilotChatPrompt.subtitle', { + defaultMessage: 'Get helpful insights from our Elastic AI Assistant', + })} + + + - - - + } @@ -164,7 +210,9 @@ export default function CoPilotPrompt({ setHasOpened(true); }} > - + + + {inner} diff --git a/x-pack/plugins/observability/public/components/co_pilot_prompt/co_pilot_prompt_feedback.tsx b/x-pack/plugins/observability/public/components/co_pilot_prompt/co_pilot_prompt_feedback.tsx new file mode 100644 index 0000000000000..f51d8061ce491 --- /dev/null +++ b/x-pack/plugins/observability/public/components/co_pilot_prompt/co_pilot_prompt_feedback.tsx @@ -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 { + EuiButtonEmpty, + EuiFlexGroup, + EuiFlexItem, + EuiIcon, + EuiText, + useEuiTheme, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import type { ChatCompletionRequestMessage } from 'openai'; +import React, { useCallback, useEffect, useState } from 'react'; +import { CoPilotPromptId } from '../../../common'; +import type { CoPilotService } from '../../typings/co_pilot'; + +interface Props { + coPilot: CoPilotService; + promptId: CoPilotPromptId; + messages?: ChatCompletionRequestMessage[]; + response: string; + responseTime: number; +} + +export function CoPilotPromptFeedback({ + coPilot, + promptId, + messages, + response, + responseTime, +}: Props) { + const theme = useEuiTheme(); + + const [hasSubmittedFeedback, setHasSubmittedFeedback] = useState(false); + + const submitFeedback = useCallback( + (positive: boolean) => { + setHasSubmittedFeedback(true); + if (messages) { + coPilot + .track({ + messages, + response, + responseTime, + promptId, + feedbackAction: positive ? 'thumbsup' : 'thumbsdown', + }) + .catch((err) => {}); + } + }, + [coPilot, promptId, messages, response, responseTime] + ); + + const [hasSubmittedTelemetry, setHasSubmittedTelemetry] = useState(false); + + useEffect(() => { + if (!hasSubmittedTelemetry && messages) { + setHasSubmittedTelemetry(true); + coPilot + .track({ + messages, + response, + responseTime, + promptId, + }) + .catch((err) => {}); + } + }, [coPilot, promptId, messages, response, responseTime, hasSubmittedTelemetry]); + + if (hasSubmittedFeedback) { + return ( + + + + + + + {i18n.translate('xpack.observability.coPilotPrompt.feedbackSubmittedText', { + defaultMessage: + "Thank you for submitting your feedback! We'll use this to improve responses.", + })} + + + + ); + } + + return ( + + + + {i18n.translate('xpack.observability.coPilotPrompt.feedbackActionTitle', { + defaultMessage: 'Did you find this response helpful?', + })} + + + + { + submitFeedback(true); + }} + > + {i18n.translate('xpack.observability.coPilotPrompt.likedFeedbackButtonTitle', { + defaultMessage: 'Yes', + })} + + + + { + submitFeedback(false); + }} + > + {i18n.translate('xpack.observability.coPilotPrompt.dislikedFeedbackButtonTitle', { + defaultMessage: 'No', + })} + + + + ); +} diff --git a/x-pack/plugins/observability/public/context/co_pilot_context/create_co_pilot_service.ts b/x-pack/plugins/observability/public/context/co_pilot_context/create_co_pilot_service.ts index c493bff4e1df8..9f2bdddfe412e 100644 --- a/x-pack/plugins/observability/public/context/co_pilot_context/create_co_pilot_service.ts +++ b/x-pack/plugins/observability/public/context/co_pilot_context/create_co_pilot_service.ts @@ -6,9 +6,13 @@ */ import { type HttpSetup } from '@kbn/core/public'; -import { concatMap, delay, Observable, of } from 'rxjs'; -import { type CreateChatCompletionResponseChunk } from '../../../common/co_pilot'; -import { type CoPilotService, type PromptObservableState } from '../../typings/co_pilot'; +import { ChatCompletionRequestMessage } from 'openai'; +import { BehaviorSubject, concatMap, delay, of } from 'rxjs'; +import { + type CreateChatCompletionResponseChunk, + loadCoPilotPrompts, +} from '../../../common/co_pilot'; +import type { CoPilotService } from '../../typings/co_pilot'; function getMessageFromChunks(chunks: CreateChatCompletionResponseChunk[]) { let message = ''; @@ -18,94 +22,136 @@ function getMessageFromChunks(chunks: CreateChatCompletionResponseChunk[]) { return message; } -export function createCoPilotService({ enabled, http }: { enabled: boolean; http: HttpSetup }) { +export function createCoPilotService({ + enabled, + trackingEnabled, + http, +}: { + enabled: boolean; + trackingEnabled: boolean; + http: HttpSetup; +}) { const service: CoPilotService = { isEnabled: () => enabled, + isTrackingEnabled: () => trackingEnabled, prompt: (promptId, params) => { - return new Observable((observer) => { - observer.next({ chunks: [], loading: true }); - - http - .post(`/internal/observability/copilot/prompts/${promptId}`, { - body: JSON.stringify(params), - asResponse: true, - rawResponse: true, - }) - .then((response) => { - const status = response.response?.status; - - if (!status || status >= 400) { - throw new Error(response.response?.statusText || 'Unexpected error'); - } - - const reader = response.response.body?.getReader(); - - if (!reader) { - throw new Error('Could not get reader from response'); - } - - const decoder = new TextDecoder(); - - const chunks: CreateChatCompletionResponseChunk[] = []; - - let prev: string = ''; + const subject = new BehaviorSubject({ + messages: [] as ChatCompletionRequestMessage[], + loading: true, + message: '', + }); + + loadCoPilotPrompts() + .then((coPilotPrompts) => { + const messages = coPilotPrompts[promptId].messages(params as any); + subject.next({ + messages, + loading: true, + message: '', + }); - function read() { - reader!.read().then(({ done, value }) => { - try { - if (done) { - observer.next({ - chunks, - message: getMessageFromChunks(chunks), - loading: false, + http + .post(`/internal/observability/copilot/prompts/${promptId}`, { + body: JSON.stringify(params), + asResponse: true, + rawResponse: true, + }) + .then((response) => { + const status = response.response?.status; + + if (!status || status >= 400) { + throw new Error(response.response?.statusText || 'Unexpected error'); + } + + const reader = response.response.body?.getReader(); + + if (!reader) { + throw new Error('Could not get reader from response'); + } + + const decoder = new TextDecoder(); + + const chunks: CreateChatCompletionResponseChunk[] = []; + + let prev: string = ''; + + function read() { + reader!.read().then(({ done, value }) => { + try { + if (done) { + subject.next({ + messages, + message: getMessageFromChunks(chunks), + loading: false, + }); + subject.complete(); + return; + } + + let lines = (prev + decoder.decode(value)).split('\n'); + + const lastLine = lines[lines.length - 1]; + + const isPartialChunk = !!lastLine && lastLine !== 'data: [DONE]'; + + if (isPartialChunk) { + prev = lastLine; + lines.pop(); + } else { + prev = ''; + } + + lines = lines + .map((str) => str.substr(6)) + .filter((str) => !!str && str !== '[DONE]'); + + const nextChunks: CreateChatCompletionResponseChunk[] = lines.map((line) => + JSON.parse(line) + ); + + nextChunks.forEach((chunk) => { + chunks.push(chunk); + subject.next({ + messages, + message: getMessageFromChunks(chunks), + loading: true, + }); }); - observer.complete(); + } catch (err) { + subject.error(err); return; } - - let lines = (prev + decoder.decode(value)).split('\n'); - - const lastLine = lines[lines.length - 1]; - - const isPartialChunk = !!lastLine && lastLine !== 'data: [DONE]'; - - if (isPartialChunk) { - prev = lastLine; - lines.pop(); - } else { - prev = ''; - } - - lines = lines - .map((str) => str.substr(6)) - .filter((str) => !!str && str !== '[DONE]'); - - const nextChunks: CreateChatCompletionResponseChunk[] = lines.map((line) => - JSON.parse(line) - ); - - nextChunks.forEach((chunk) => { - chunks.push(chunk); - observer.next({ chunks, message: getMessageFromChunks(chunks), loading: true }); - }); - } catch (err) { - observer.error(err); - return; + read(); + }); + } + + read(); + }) + .catch(async (err) => { + if ('response' in err) { + try { + const responseBody = await err.response.json(); + err.message = responseBody.message; + } catch { + // leave message as-is } - read(); - }); - } - - read(); - - return () => { - reader.cancel(); - }; - }) - .catch((err) => { - observer.error(err); - }); - }).pipe(concatMap((value) => of(value).pipe(delay(50)))); + } + subject.error(err); + }); + }) + .catch((err) => {}); + + return subject.pipe(concatMap((value) => of(value).pipe(delay(25)))); + }, + track: async ({ messages, response, responseTime, feedbackAction, promptId }) => { + await http.post(`/internal/observability/copilot/prompts/${promptId}/track`, { + body: JSON.stringify({ + response, + feedbackAction, + messages, + responseTime, + }), + }); }, }; 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 64d640ef93475..4fd78735bdb68 100644 --- a/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx +++ b/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx @@ -90,6 +90,9 @@ const withCore = makeDecorator({ compositeSlo: { enabled: false }, aiAssistant: { enabled: false, + feedback: { + 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 db273b2cd018e..0c5a18c5ac9c7 100644 --- a/x-pack/plugins/observability/public/pages/rules/rules.test.tsx +++ b/x-pack/plugins/observability/public/pages/rules/rules.test.tsx @@ -46,8 +46,11 @@ jest.spyOn(pluginContext, 'usePluginContext').mockImplementation(() => ({ compositeSlo: { enabled: false, }, - coPilot: { + aiAssistant: { enabled: false, + feedback: { + enabled: false, + }, }, }, observabilityRuleTypeRegistry: createObservabilityRuleTypeRegistryMock(), diff --git a/x-pack/plugins/observability/public/plugin.ts b/x-pack/plugins/observability/public/plugin.ts index 24c1d2a84ca47..287248538b633 100644 --- a/x-pack/plugins/observability/public/plugin.ts +++ b/x-pack/plugins/observability/public/plugin.ts @@ -93,7 +93,10 @@ export interface ConfigSchema { }; compositeSlo: { enabled: boolean }; aiAssistant?: { - enabled?: boolean; + enabled: boolean; + feedback: { + enabled: boolean; + }; }; } export type ObservabilityPublicSetup = ReturnType; @@ -343,6 +346,7 @@ export class Plugin this.coPilotService = createCoPilotService({ enabled: !!config.aiAssistant?.enabled, http: coreSetup.http, + trackingEnabled: !!config.aiAssistant?.feedback.enabled, }); return { diff --git a/x-pack/plugins/observability/public/typings/co_pilot.ts b/x-pack/plugins/observability/public/typings/co_pilot.ts index b8004f40f8325..3dac1895a8ed3 100644 --- a/x-pack/plugins/observability/public/typings/co_pilot.ts +++ b/x-pack/plugins/observability/public/typings/co_pilot.ts @@ -5,23 +5,28 @@ * 2.0. */ +import type { ChatCompletionRequestMessage } from 'openai'; import type { Observable } from 'rxjs'; -import { - type CoPilotPromptId, - type PromptParamsOf, - type CreateChatCompletionResponseChunk, -} from '../../common/co_pilot'; +import type { CoPilotPromptId, PromptParamsOf } from '../../common/co_pilot'; export interface PromptObservableState { - chunks: CreateChatCompletionResponseChunk[]; message?: string; + messages: ChatCompletionRequestMessage[]; loading: boolean; } export interface CoPilotService { isEnabled: () => boolean; + isTrackingEnabled: () => boolean; prompt( promptId: TPromptId, params: PromptParamsOf ): Observable; + track: (options: { + messages: ChatCompletionRequestMessage[]; + response: string; + promptId: CoPilotPromptId; + feedbackAction?: 'thumbsup' | 'thumbsdown'; + responseTime: number; + }) => Promise; } 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 98b4d32dd7c6c..e56487549a689 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 @@ -37,6 +37,9 @@ export function KibanaReactStorybookDecorator(Story: ComponentType) { compositeSlo: { enabled: false }, aiAssistant: { enabled: false, + feedback: { + enabled: false, + }, }, }; const mockTheme: CoreTheme = { diff --git a/x-pack/plugins/observability/public/utils/test_helper.tsx b/x-pack/plugins/observability/public/utils/test_helper.tsx index ac0a79975af75..c979eaef6b879 100644 --- a/x-pack/plugins/observability/public/utils/test_helper.tsx +++ b/x-pack/plugins/observability/public/utils/test_helper.tsx @@ -41,6 +41,9 @@ const defaultConfig: ConfigSchema = { compositeSlo: { enabled: false }, aiAssistant: { enabled: false, + feedback: { + enabled: false, + }, }, }; diff --git a/x-pack/plugins/observability/server/index.ts b/x-pack/plugins/observability/server/index.ts index 3ea386dbb1d99..1f06f63c5de00 100644 --- a/x-pack/plugins/observability/server/index.ts +++ b/x-pack/plugins/observability/server/index.ts @@ -62,6 +62,9 @@ export const config: PluginConfigDescriptor = { unsafe: true, aiAssistant: { enabled: true, + feedback: { + enabled: true, + }, }, }, schema: configSchema, diff --git a/x-pack/plugins/observability/server/plugin.ts b/x-pack/plugins/observability/server/plugin.ts index ab74a511b265f..ccd437865f47d 100644 --- a/x-pack/plugins/observability/server/plugin.ts +++ b/x-pack/plugins/observability/server/plugin.ts @@ -25,6 +25,7 @@ import { SharePluginSetup } from '@kbn/share-plugin/server'; import { SpacesPluginSetup } from '@kbn/spaces-plugin/server'; import type { GuidedOnboardingPluginSetup } from '@kbn/guided-onboarding-plugin/server'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; +import { CloudSetup } from '@kbn/cloud-plugin/server'; import { kubernetesGuideId, kubernetesGuideConfig, @@ -57,6 +58,7 @@ interface PluginSetup { share: SharePluginSetup; spaces?: SpacesPluginSetup; usageCollection?: UsageCollectionSetup; + cloud?: CloudSetup; } interface PluginStart { @@ -249,7 +251,12 @@ export class ObservabilityPlugin implements Plugin { core.getStartServices().then(([coreStart, pluginStart]) => { registerRoutes({ core, + config, dependencies: { + pluginsSetup: { + ...plugins, + core, + }, ruleDataService, getRulesClientWithRequest: pluginStart.alerting.getRulesClientWithRequest, getOpenAIClient: () => openAIService?.client, diff --git a/x-pack/plugins/observability/server/routes/copilot/route.ts b/x-pack/plugins/observability/server/routes/copilot/route.ts index f0a6e7bae56b4..13606616bdc96 100644 --- a/x-pack/plugins/observability/server/routes/copilot/route.ts +++ b/x-pack/plugins/observability/server/routes/copilot/route.ts @@ -6,11 +6,13 @@ */ import Boom from '@hapi/boom'; import { ServerRoute } from '@kbn/server-route-repository'; +import axios from 'axios'; import * as t from 'io-ts'; import { map } from 'lodash'; -import { CreateChatCompletionResponse } from 'openai'; +import { ChatCompletionRequestMessageRoleEnum, CreateChatCompletionResponse } from 'openai'; import { Readable } from 'stream'; -import { CoPilotPromptMap, coPilotPrompts } from '../../../common/co_pilot'; +import { CoPilotPromptMap } from '../../../common/co_pilot'; +import { coPilotPrompts } from '../../../common/co_pilot/prompts'; import { createObservabilityServerRoute } from '../create_observability_server_route'; import { ObservabilityRouteCreateOptions, ObservabilityRouteHandlerResources } from '../types'; @@ -31,7 +33,7 @@ const promptRoutes: { body: prompt.params, }), options: { - tags: [], + tags: ['ai_assistant'], }, handler: async (resources): Promise => { const client = resources.dependencies.getOpenAIClient(); @@ -40,12 +42,79 @@ const promptRoutes: { throw Boom.notImplemented(); } - return client.chatCompletion.create(prompt.messages(resources.params.body as any)); + try { + return await client.chatCompletion.create(prompt.messages(resources.params.body as any)); + } catch (error: any) { + if (axios.isAxiosError(error) && error.response?.status === 401) { + throw Boom.forbidden(error.response?.statusText); + } + throw error; + } }, }); }) ); +const trackRoute = createObservabilityServerRoute({ + endpoint: 'POST /internal/observability/copilot/prompts/{promptId}/track', + params: t.type({ + path: t.type({ + promptId: t.string, + }), + body: t.intersection([ + t.type({ + responseTime: t.number, + messages: t.array( + t.intersection([ + t.type({ + role: t.union([ + t.literal(ChatCompletionRequestMessageRoleEnum.System), + t.literal(ChatCompletionRequestMessageRoleEnum.User), + t.literal(ChatCompletionRequestMessageRoleEnum.Assistant), + ]), + content: t.string, + }), + t.partial({ + name: t.string, + }), + ]) + ), + response: t.string, + }), + t.partial({ + feedbackAction: t.union([t.literal('thumbsup'), t.literal('thumbsdown')]), + }), + ]), + }), + options: { + tags: ['ai_assistant'], + }, + handler: async (resources): Promise => { + const { params, config } = resources; + + if (!config.aiAssistant?.enabled) { + throw Boom.notImplemented(); + } + + const feedbackBody = { + prompt_name: params.path.promptId, + feedback_action: params.body.feedbackAction, + model: + 'openAI' in config.aiAssistant.provider + ? config.aiAssistant.provider.openAI.model + : config.aiAssistant.provider.azureOpenAI.resourceName, + response_time: params.body.responseTime, + conversation: [ + ...params.body.messages.map(({ role, content }) => ({ role, content })), + { role: 'system', content: params.body.response }, + ], + }; + + await axios.post(config.aiAssistant.feedback.url, feedbackBody); + }, +}); + export const observabilityCoPilotRouteRepository = { ...promptRoutes, + ...trackRoute, }; diff --git a/x-pack/plugins/observability/server/routes/register_routes.ts b/x-pack/plugins/observability/server/routes/register_routes.ts index a296fe86a7be7..0d982c6bf48ca 100644 --- a/x-pack/plugins/observability/server/routes/register_routes.ts +++ b/x-pack/plugins/observability/server/routes/register_routes.ts @@ -16,12 +16,14 @@ import { } from '@kbn/server-route-repository'; import axios from 'axios'; import * as t from 'io-ts'; +import { ObservabilityConfig } from '..'; import { getHTTPResponseCode, ObservabilityError } from '../errors'; import { IOpenAIClient } from '../services/openai/types'; import { ObservabilityRequestHandlerContext } from '../types'; import { AbstractObservabilityServerRouteRepository } from './types'; interface RegisterRoutes { + config: ObservabilityConfig; core: CoreSetup; repository: AbstractObservabilityServerRouteRepository; logger: Logger; @@ -29,12 +31,15 @@ interface RegisterRoutes { } export interface RegisterRoutesDependencies { + pluginsSetup: { + core: CoreSetup; + }; ruleDataService: RuleDataPluginService; getRulesClientWithRequest: (request: KibanaRequest) => RulesClientApi; getOpenAIClient: () => IOpenAIClient | undefined; } -export function registerRoutes({ repository, core, logger, dependencies }: RegisterRoutes) { +export function registerRoutes({ config, repository, core, logger, dependencies }: RegisterRoutes) { const routes = Object.values(repository); const router = core.http.createRouter(); @@ -60,13 +65,14 @@ export function registerRoutes({ repository, core, logger, dependencies }: Regis params ?? t.strict({}) ); - const data = (await handler({ + const data = await handler({ + config, context, request, logger, params: decodedParams, dependencies, - })) as any; + }); if (data === undefined) { return response.noContent(); diff --git a/x-pack/plugins/observability/server/routes/types.ts b/x-pack/plugins/observability/server/routes/types.ts index e782053e592ae..866bd3c79c1d1 100644 --- a/x-pack/plugins/observability/server/routes/types.ts +++ b/x-pack/plugins/observability/server/routes/types.ts @@ -10,6 +10,7 @@ import { KibanaRequest, Logger } from '@kbn/core/server'; import { ObservabilityServerRouteRepository } from './get_global_observability_server_route_repository'; import { ObservabilityRequestHandlerContext } from '../types'; import { RegisterRoutesDependencies } from './register_routes'; +import { ObservabilityConfig } from '..'; export type { ObservabilityServerRouteRepository }; @@ -18,6 +19,7 @@ export interface ObservabilityRouteHandlerResources { dependencies: RegisterRoutesDependencies; logger: Logger; request: KibanaRequest; + config: ObservabilityConfig; } export interface ObservabilityRouteCreateOptions { diff --git a/x-pack/plugins/observability/server/services/openai/config.ts b/x-pack/plugins/observability/server/services/openai/config.ts index ba6e4f6b2ba08..88a9060b71386 100644 --- a/x-pack/plugins/observability/server/services/openai/config.ts +++ b/x-pack/plugins/observability/server/services/openai/config.ts @@ -24,6 +24,12 @@ export const azureOpenAIConfig = schema.object({ export const observabilityCoPilotConfig = schema.object({ enabled: schema.boolean({ defaultValue: false }), + feedback: schema.object({ + enabled: schema.boolean({ defaultValue: false }), + url: schema.string({ + defaultValue: `https://0d0uj24psl.execute-api.us-east-1.amazonaws.com/gaifeedback`, + }), + }), provider: schema.oneOf([openAIConfig, azureOpenAIConfig]), }); diff --git a/x-pack/plugins/observability_shared/public/components/technical_preview_badge/technical_preview_badge.tsx b/x-pack/plugins/observability_shared/public/components/technical_preview_badge/technical_preview_badge.tsx new file mode 100644 index 0000000000000..4055d5c888b91 --- /dev/null +++ b/x-pack/plugins/observability_shared/public/components/technical_preview_badge/technical_preview_badge.tsx @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiBetaBadge, IconType } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; + +type Props = { + icon?: IconType; +} & Pick, 'size' | 'style'>; + +export function TechnicalPreviewBadge({ icon = 'beaker', size, style }: Props) { + return ( + + ); +} diff --git a/x-pack/plugins/observability_shared/public/index.ts b/x-pack/plugins/observability_shared/public/index.ts index 6bf3b67716a91..7308265827d09 100644 --- a/x-pack/plugins/observability_shared/public/index.ts +++ b/x-pack/plugins/observability_shared/public/index.ts @@ -35,6 +35,8 @@ export { export type { SectionLinkProps } from './components/section/section'; export { LoadWhenInView } from './components/load_when_in_view/get_load_when_in_view_lazy'; +export { TechnicalPreviewBadge } from './components/technical_preview_badge/technical_preview_badge'; + export { InspectorContextProvider } from './contexts/inspector/inspector_context'; export type { AddInspectorRequest } from './contexts/inspector/inspector_context'; export { useInspectorContext } from './contexts/inspector/use_inspector_context'; diff --git a/x-pack/plugins/profiling/public/components/frame_information_window/index.tsx b/x-pack/plugins/profiling/public/components/frame_information_window/index.tsx index db3fc5d10c9dd..bd059f74cbfea 100644 --- a/x-pack/plugins/profiling/public/components/frame_information_window/index.tsx +++ b/x-pack/plugins/profiling/public/components/frame_information_window/index.tsx @@ -105,16 +105,6 @@ export function FrameInformationWindow({ frame, totalSamples, totalSeconds, samp {coPilotService?.isEnabled() && promptParams ? ( <> - - - diff --git a/x-pack/plugins/profiling/server/feature.ts b/x-pack/plugins/profiling/server/feature.ts index 13e064364b7b8..446a436145c77 100644 --- a/x-pack/plugins/profiling/server/feature.ts +++ b/x-pack/plugins/profiling/server/feature.ts @@ -27,7 +27,7 @@ export const PROFILING_FEATURE = { read: [], }, ui: ['show'], - api: [PROFILING_SERVER_FEATURE_ID], + api: [PROFILING_SERVER_FEATURE_ID, 'ai_assistant'], }, read: { app: [PROFILING_SERVER_FEATURE_ID, 'ux', 'kibana'], @@ -36,7 +36,7 @@ export const PROFILING_FEATURE = { read: [], }, ui: ['show'], - api: [PROFILING_SERVER_FEATURE_ID], + api: [PROFILING_SERVER_FEATURE_ID, 'ai_assistant'], }, }, }; From c2559ac655c3b169e35c4d44f636570db56628f4 Mon Sep 17 00:00:00 2001 From: Rodney Norris Date: Wed, 12 Jul 2023 17:03:22 -0500 Subject: [PATCH 12/50] [Enterprise Search] update error message when search app not found for field caps (#161811) ## Summary Updated "Could not find engine" to "Could not find search application" --- .../plugins/enterprise_search/common/types/error_codes.ts | 2 +- .../routes/enterprise_search/search_applications.test.ts | 4 ++-- .../server/routes/enterprise_search/search_applications.ts | 7 +++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/enterprise_search/common/types/error_codes.ts b/x-pack/plugins/enterprise_search/common/types/error_codes.ts index 6724e35f057b8..db5e5d825128c 100644 --- a/x-pack/plugins/enterprise_search/common/types/error_codes.ts +++ b/x-pack/plugins/enterprise_search/common/types/error_codes.ts @@ -11,7 +11,6 @@ export enum ErrorCode { CONNECTOR_DOCUMENT_ALREADY_EXISTS = 'connector_document_already_exists', CRAWLER_ALREADY_EXISTS = 'crawler_already_exists', DOCUMENT_NOT_FOUND = 'document_not_found', - ENGINE_NOT_FOUND = 'engine_not_found', INDEX_ALREADY_EXISTS = 'index_already_exists', INDEX_NOT_FOUND = 'index_not_found', MAPPING_UPDATE_FAILED = 'mapping_update_failed', @@ -22,6 +21,7 @@ export enum ErrorCode { RESOURCE_NOT_FOUND = 'resource_not_found', SEARCH_APPLICATION_ALREADY_EXISTS = 'search_application_already_exists', SEARCH_APPLICATION_NAME_INVALID = 'search_application_name_invalid', + SEARCH_APPLICATION_NOT_FOUND = 'search_application_not_found', UNAUTHORIZED = 'unauthorized', UNCAUGHT_EXCEPTION = 'uncaught_exception', } diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.test.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.test.ts index 20f2709e41647..09273e8c12432 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.test.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.test.ts @@ -548,9 +548,9 @@ describe('engines routes', () => { expect(mockRouter.response.customError).toHaveBeenCalledWith({ body: { attributes: { - error_code: 'engine_not_found', + error_code: 'search_application_not_found', }, - message: 'Could not find engine', + message: 'Could not find search application', }, statusCode: 404, }); diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.ts index 67af98c13dec9..5b58fd1b9b4ec 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.ts @@ -230,8 +230,11 @@ export function registerSearchApplicationsRoutes({ log, router }: RouteDependenc } catch (e) { if (isNotFoundException(e)) { return createError({ - errorCode: ErrorCode.ENGINE_NOT_FOUND, - message: 'Could not find engine', + errorCode: ErrorCode.SEARCH_APPLICATION_NOT_FOUND, + message: i18n.translate( + 'xpack.enterpriseSearch.server.routes.fetchSearchApplicationFieldCapabilities.error', + { defaultMessage: 'Could not find search application' } + ), response, statusCode: 404, }); From 2caa973c61735002df5b9aaf444f1ca543c279c1 Mon Sep 17 00:00:00 2001 From: Kevin Qualters <56408403+kqualters-elastic@users.noreply.github.com> Date: Wed, 12 Jul 2023 18:09:13 -0400 Subject: [PATCH 13/50] [Security Solution] [Timeline] Add filter.meta.relation to timeline filters saved object mapping (#161722) ## Summary Without this mapping, timelines that try to make use of a top level OR filter from the unified search filter builder cannot be saved, everything works as expected with this change. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../current_mappings.json | 91 ++++++++++--------- .../group2/check_registered_types.test.ts | 2 +- .../saved_object_mappings/timelines.ts | 3 + 3 files changed, 51 insertions(+), 45 deletions(-) diff --git a/packages/kbn-check-mappings-update-cli/current_mappings.json b/packages/kbn-check-mappings-update-cli/current_mappings.json index 689606cd5f19f..cb78e060d6edc 100644 --- a/packages/kbn-check-mappings-update-cli/current_mappings.json +++ b/packages/kbn-check-mappings-update-cli/current_mappings.json @@ -616,6 +616,30 @@ } } }, + "tag": { + "properties": { + "name": { + "type": "text" + }, + "description": { + "type": "text" + }, + "color": { + "type": "text" + } + } + }, + "search": { + "dynamic": false, + "properties": { + "title": { + "type": "text" + }, + "description": { + "type": "text" + } + } + }, "alert": { "dynamic": false, "properties": { @@ -874,30 +898,6 @@ } } }, - "tag": { - "properties": { - "name": { - "type": "text" - }, - "description": { - "type": "text" - }, - "color": { - "type": "text" - } - } - }, - "search": { - "dynamic": false, - "properties": { - "title": { - "type": "text" - }, - "description": { - "type": "text" - } - } - }, "graph-workspace": { "properties": { "description": { @@ -2259,6 +2259,14 @@ } } }, + "infrastructure-monitoring-log-view": { + "dynamic": false, + "properties": { + "name": { + "type": "text" + } + } + }, "ml-job": { "properties": { "job_id": { @@ -2796,6 +2804,9 @@ }, "value": { "type": "text" + }, + "relation": { + "type": "keyword" } } }, @@ -2932,14 +2943,6 @@ "dynamic": false, "properties": {} }, - "infrastructure-monitoring-log-view": { - "dynamic": false, - "properties": { - "name": { - "type": "text" - } - } - }, "metrics-explorer-view": { "dynamic": false, "properties": {} @@ -2976,18 +2979,6 @@ } } }, - "enterprise_search_telemetry": { - "dynamic": false, - "properties": {} - }, - "app_search_telemetry": { - "dynamic": false, - "properties": {} - }, - "workplace_search_telemetry": { - "dynamic": false, - "properties": {} - }, "apm-indices": { "dynamic": false, "properties": {} @@ -3019,5 +3010,17 @@ "type": "text" } } + }, + "enterprise_search_telemetry": { + "dynamic": false, + "properties": {} + }, + "app_search_telemetry": { + "dynamic": false, + "properties": {} + }, + "workplace_search_telemetry": { + "dynamic": false, + "properties": {} } } 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 f139103b55c54..c1cfca07017bc 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 @@ -134,7 +134,7 @@ describe('checking migration metadata changes on all registered SO types', () => "security-rule": "07abb4d7e707d91675ec0495c73816394c7b521f", "security-solution-signals-migration": "9d99715fe5246f19de2273ba77debd2446c36bb1", "siem-detection-engine-rule-actions": "54f08e23887b20da7c805fab7c60bc67c428aff9", - "siem-ui-timeline": "670a02b3c2a399bca781ff1e4781793b208b471a", + "siem-ui-timeline": "820b5a7c478cd4d5ae9cd92ce0d05ac988fee69c", "siem-ui-timeline-note": "0a32fb776907f596bedca292b8c646496ae9c57b", "siem-ui-timeline-pinned-event": "082daa3ce647b33873f6abccf340bdfa32057c8d", "slo": "2048ab6791df2e1ae0936f29c20765cb8d2fcfaa", diff --git a/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts b/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts index 4f7df977662f4..d133e9b114f8b 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts @@ -213,6 +213,9 @@ export const timelineSavedObjectMappings: SavedObjectsType['mappings'] = { value: { type: 'text', }, + relation: { + type: 'keyword', + }, }, }, exists: { From 2e049ce7f2a8a036c4554458ab30f694c25b8afa Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 13 Jul 2023 00:55:08 -0400 Subject: [PATCH 14/50] [api-docs] 2023-07-13 Daily api_docs build (#161823) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/397 --- 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.mdx | 2 +- 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 | 10 +- api_docs/deprecations_by_plugin.mdx | 8 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.devdocs.json | 15 + api_docs/enterprise_search.mdx | 4 +- 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.devdocs.json | 15 + api_docs/fleet.mdx | 4 +- 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.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_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 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- ...kbn_core_elasticsearch_server.devdocs.json | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 12 +- 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 +- ...ore_saved_objects_api_browser.devdocs.json | 12 - .../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 | 92 --- 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_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.devdocs.json | 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_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 +- .../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_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_grouping.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_serverless_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_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.devdocs.json | 522 ++++++++++-------- api_docs/observability.mdx | 7 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.devdocs.json | 33 ++ api_docs/observability_shared.mdx | 4 +- api_docs/osquery.devdocs.json | 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.devdocs.json | 110 +++- api_docs/security.mdx | 4 +- 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/visualization_ui_components.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 555 files changed, 1009 insertions(+), 935 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 0e0ab4c5351bb..9f12661e7ff19 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-12 +date: 2023-07-13 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 e1d6969e6cb84..f5278b36aef3c 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-12 +date: 2023-07-13 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 5f9b975ef5fc9..15dfa7ff4439d 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-12 +date: 2023-07-13 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 0a5831e816202..ad4805be0cf52 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-12 +date: 2023-07-13 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 eea9228dc13a1..ae8e773311363 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-12 +date: 2023-07-13 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 187f8cac08c6e..ed8b3e1f1ed8c 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-12 +date: 2023-07-13 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 1657a91e26407..76c5159216a35 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-12 +date: 2023-07-13 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 1a7203b15daf6..8052e456920be 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-12 +date: 2023-07-13 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 04935e3ace356..a1735de3babc1 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index b478758a50d19..95743d690468f 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 53ed6a8ebd0c5..d03065155b01f 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-12 +date: 2023-07-13 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 56591da514f14..e222daeb0d63b 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-12 +date: 2023-07-13 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 e3cda9d91fcec..d6b8d2cdc8a0e 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-12 +date: 2023-07-13 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 b8aab15383ec9..36de0f67b98e9 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-12 +date: 2023-07-13 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 d68eada8d0f96..e44f3096a919a 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-12 +date: 2023-07-13 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 a1dedd8339ebd..d54ef4ce06e7d 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-12 +date: 2023-07-13 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 5c6eded66b586..116caa6814780 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-12 +date: 2023-07-13 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 224ea106b3a70..0c1b2133ba6d3 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-12 +date: 2023-07-13 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 c735c48198d89..89a40411b80d1 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-12 +date: 2023-07-13 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 88b58e1006119..067e817d560c8 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-12 +date: 2023-07-13 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 f6243d77450ae..ff947b5a790b0 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-12 +date: 2023-07-13 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 2311c13d9dab5..726fe75c64c81 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-12 +date: 2023-07-13 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 050b47851a7cd..1c446d0c9b28e 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-12 +date: 2023-07-13 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 b4fc147092548..55d48f0ca2f48 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-12 +date: 2023-07-13 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 52eb0626413b2..3cc21f11e7d86 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-12 +date: 2023-07-13 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 db9e19d2ca004..ea37083c9666a 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-12 +date: 2023-07-13 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 7f25bf9e7a12f..1d31279da0b48 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-12 +date: 2023-07-13 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 c1e0159f6932f..593b3d7e16e2b 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-12 +date: 2023-07-13 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 d700893466595..a85ad030751b8 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-12 +date: 2023-07-13 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 af4c7eb88725a..4acf03b61b04d 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-12 +date: 2023-07-13 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 e4fe9a051c9e4..ec8b6df08a684 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-12 +date: 2023-07-13 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 ca4cf96b7503f..217b6c9b73aec 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-12 +date: 2023-07-13 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 f8cf8ffbe522b..469a2054c6296 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -31,7 +31,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, embeddable, 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, dataViews, 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, cases, 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 | - | @@ -44,7 +44,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/securitysolution-data-table, securitySolution | - | | | securitySolution | - | | | securitySolution | - | -| | @kbn/core-saved-objects-api-browser, @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-api-server, @kbn/core, home, data, savedObjectsTagging, canvas, savedObjects, @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-import-export-server-internal, savedObjectsTaggingOss, lists, securitySolution, upgradeAssistant, savedObjectsManagement, synthetics, @kbn/core-ui-settings-server-internal | - | +| | @kbn/core-saved-objects-api-browser, @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-api-server, @kbn/core, home, savedObjectsTagging, canvas, savedObjects, @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-import-export-server-internal, savedObjectsTaggingOss, lists, securitySolution, upgradeAssistant, savedObjectsManagement, synthetics, @kbn/core-ui-settings-server-internal | - | | | @kbn/core-saved-objects-migration-server-internal, actions, dataViews, data, alerting, lens, cases, savedObjectsTagging, visualizations, savedSearch, canvas, graph, lists, maps, securitySolution, dashboard, @kbn/core-test-helpers-so-type-serializer | - | | | lists, securitySolution, @kbn/securitysolution-io-ts-list-types | - | | | lists, securitySolution, @kbn/securitysolution-io-ts-list-types | - | @@ -66,13 +66,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | data, discover, imageEmbeddable, embeddable | - | | | @kbn/core-saved-objects-browser-mocks, discover, @kbn/core-saved-objects-browser-internal | - | | | advancedSettings, discover | - | -| | @kbn/core-saved-objects-browser, @kbn/core-saved-objects-browser-internal, @kbn/core, dataViews, home, savedObjects, visualizations, lens, visTypeTimeseries, @kbn/core-saved-objects-browser-mocks | - | +| | @kbn/core-saved-objects-browser, @kbn/core-saved-objects-browser-internal, @kbn/core, home, savedObjects, visualizations, lens, visTypeTimeseries, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-browser-mocks, savedObjects, dashboard | - | | | @kbn/core-saved-objects-browser-mocks, home, @kbn/core-saved-objects-browser-internal | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-browser-mocks, savedObjects, visualizations | - | | | @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-browser-internal | - | | | @kbn/core-saved-objects-browser-mocks, savedObjects, presentationUtil, dashboard, dashboardEnhanced, @kbn/core-saved-objects-browser-internal | - | -| | @kbn/core-saved-objects-browser-mocks, dataViews, savedObjects, dashboard, dashboardEnhanced, @kbn/core-saved-objects-browser-internal | - | +| | @kbn/core-saved-objects-browser-mocks, savedObjects, dashboard, dashboardEnhanced, @kbn/core-saved-objects-browser-internal | - | | | @kbn/core-saved-objects-browser-mocks, savedObjects, @kbn/core-saved-objects-browser-internal | - | | | @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-browser-internal | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-browser-mocks, savedObjects | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 83536ed983ed0..418fbd650446d 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -520,8 +520,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [get_columns.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/lib/get_columns.tsx#:~:text=RedirectAppLinks), [get_columns.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/lib/get_columns.tsx#:~:text=RedirectAppLinks), [get_columns.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/lib/get_columns.tsx#:~:text=RedirectAppLinks), [connected_search_session_indicator.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/session_indicator/connected_search_session_indicator/connected_search_session_indicator.tsx#:~:text=RedirectAppLinks), [connected_search_session_indicator.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/session_indicator/connected_search_session_indicator/connected_search_session_indicator.tsx#:~:text=RedirectAppLinks), [connected_search_session_indicator.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/session_indicator/connected_search_session_indicator/connected_search_session_indicator.tsx#:~:text=RedirectAppLinks) | - | | | [session_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/session/session_service.ts#:~:text=authc) | - | | | [data_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/utils/table_inspector_view/components/data_table.tsx#:~:text=executeTriggerActions), [data_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/utils/table_inspector_view/components/data_table.tsx#:~:text=executeTriggerActions) | - | -| | [api.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/lib/api.ts#:~:text=SavedObject), [api.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/lib/api.ts#:~:text=SavedObject), [api.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/search/session/sessions_mgmt/lib/api.ts#:~:text=SavedObject), [search_session_migration.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/saved_objects/search_session_migration.test.ts#:~:text=SavedObject), [search_session_migration.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/saved_objects/search_session_migration.test.ts#:~:text=SavedObject), [search_session_migration.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/saved_objects/search_session_migration.test.ts#:~:text=SavedObject), [search_session_migration.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/saved_objects/search_session_migration.test.ts#:~:text=SavedObject), [search_session_migration.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/saved_objects/search_session_migration.test.ts#:~:text=SavedObject), [search_session_migration.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/saved_objects/search_session_migration.test.ts#:~:text=SavedObject), [search_session_migration.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/saved_objects/search_session_migration.test.ts#:~:text=SavedObject)+ 2 more | - | -| | [extract_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/search_source/extract_references.ts#:~:text=SavedObjectReference), [extract_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/search_source/extract_references.ts#:~:text=SavedObjectReference), [extract_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/search_source/extract_references.ts#:~:text=SavedObjectReference), [inject_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/search_source/inject_references.ts#:~:text=SavedObjectReference), [inject_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/search_source/inject_references.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference)+ 3 more | - | +| | [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference) | - | | | [query.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/saved_objects/query.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -559,9 +558,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=removeScriptedField) | - | | | [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getNonScriptedFields) | - | | | [data_view.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.ts#:~:text=getScriptedFields), [data_view.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.ts#:~:text=getScriptedFields), [data_views.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_views.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields) | - | -| | [get_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/lib/get_title.ts#:~:text=SavedObjectsClientContract), [get_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/lib/get_title.ts#:~:text=SavedObjectsClientContract) | - | -| | [get_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/lib/get_title.ts#:~:text=get) | - | -| | [load_index_pattern.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/expressions/load_index_pattern.ts#:~:text=SavedObjectReference), [load_index_pattern.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/expressions/load_index_pattern.ts#:~:text=SavedObjectReference), [persistable_state.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/persistable_state.test.ts#:~:text=SavedObjectReference), [persistable_state.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/persistable_state.test.ts#:~:text=SavedObjectReference) | - | | | [data_views.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/server/saved_objects/data_views.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index e096bc42395d4..96988b210d293 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index d0290715c0f57..114ff24510c73 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 4a80c4c6ec659..5b4f2716b00cb 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index bf5d24a0bc322..48dda991d719b 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-12 +date: 2023-07-13 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 828b0e4f1e0d4..22c335a6bdabf 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-12 +date: 2023-07-13 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 1f61f06f10b54..5df5a15d89f59 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-12 +date: 2023-07-13 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 3306b885aba81..5df39f9b59f6b 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-12 +date: 2023-07-13 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 ecf23355c6f43..0bc3b60a9a7cd 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.devdocs.json b/api_docs/enterprise_search.devdocs.json index 17434038d906a..9481ef8ff7ad5 100644 --- a/api_docs/enterprise_search.devdocs.json +++ b/api_docs/enterprise_search.devdocs.json @@ -119,6 +119,21 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "enterpriseSearch", + "id": "def-server.CURRENT_CONNECTORS_JOB_INDEX", + "type": "string", + "tags": [], + "label": "CURRENT_CONNECTORS_JOB_INDEX", + "description": [], + "signature": [ + "\".elastic-connectors-v1\"" + ], + "path": "x-pack/plugins/enterprise_search/server/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [ diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 79d6bf3e05471..a40603ac30816 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 9 | 0 | 9 | 0 | +| 10 | 0 | 10 | 0 | ## Client diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 0b5b81b8a877d..72a974ca15d84 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-12 +date: 2023-07-13 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 9bb15b0f32bfa..5364940099acc 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-12 +date: 2023-07-13 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 13d89a9e5c378..ae328fd1164ba 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-12 +date: 2023-07-13 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 12961303978f4..2694ba0efd2bf 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-12 +date: 2023-07-13 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 fb0b8ee37a743..e7967eeaca8f3 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-12 +date: 2023-07-13 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 d9c36252d16aa..8373065ef030e 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-12 +date: 2023-07-13 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 f1fb11d646678..6d4eb1c010933 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-12 +date: 2023-07-13 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 00bed41e99c19..19a7dd01ee13e 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-12 +date: 2023-07-13 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 89af764aa6440..44793c00bee3d 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-12 +date: 2023-07-13 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 c75de62e3dbcf..7e4d7ed60343a 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-12 +date: 2023-07-13 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 289424f4e8834..71d6bb1e7adf4 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-12 +date: 2023-07-13 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 cd0da75ef6e8c..c37e371814afc 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-12 +date: 2023-07-13 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 43d6601702c5a..590ef7c4d56fb 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-12 +date: 2023-07-13 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 ccb5a2aedf6b2..ebc9b628e0530 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-12 +date: 2023-07-13 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 87d7897eb200d..d86d0ae3509af 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-12 +date: 2023-07-13 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 16bccdb267bd2..85f18ea25427c 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-12 +date: 2023-07-13 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 74d25081b5d1d..ee2b844da1d64 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-12 +date: 2023-07-13 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 f3f58b2a27a3e..a58ece1eff7a5 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-12 +date: 2023-07-13 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 41fd3419f5de7..90661245687eb 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-12 +date: 2023-07-13 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 c63612795faac..637d41fac6a29 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-12 +date: 2023-07-13 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 542d4ed08c338..97587fa96493e 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-12 +date: 2023-07-13 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 1ddacd877c509..8e94b08147a8e 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-12 +date: 2023-07-13 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 954bde0d1ae86..fcecdf57b2296 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json index d66beb287620d..a5eb0c5dd285e 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -22615,6 +22615,21 @@ "path": "x-pack/plugins/fleet/common/types/models/epm.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-common.RegistryDataStream.RegistryDataStreamKeys.routing_rules", + "type": "Array", + "tags": [], + "label": "[RegistryDataStreamKeys.routing_rules]", + "description": [], + "signature": [ + "RegistryDataStreamRoutingRules", + "[] | undefined" + ], + "path": "x-pack/plugins/fleet/common/types/models/epm.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index ee043ce78284d..5533a02e4c496 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1178 | 3 | 1062 | 38 | +| 1179 | 3 | 1063 | 39 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 0e1917e4dfc2e..d2193fc298d04 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-12 +date: 2023-07-13 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 e68c91fe3785f..200ddd283c321 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-12 +date: 2023-07-13 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 00c3488be64b6..dfb874a8fc880 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-12 +date: 2023-07-13 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 5109497abe2a6..4a484b4aa6d1d 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-12 +date: 2023-07-13 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 5473efb3ca053..8a7a53787ab26 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-12 +date: 2023-07-13 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 47fa332ba3a94..d6f48042ed408 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-12 +date: 2023-07-13 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 9475dc7e3aa86..4e69c773e8a69 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-12 +date: 2023-07-13 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 a329af66d5229..12f05417a90a8 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-12 +date: 2023-07-13 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 c3528e6d07eec..9a54b5f51ee88 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-12 +date: 2023-07-13 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 130d069ce98f9..f9ddf1e99904b 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-12 +date: 2023-07-13 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 f7d908b6ecdc9..0f7b2497feed4 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-12 +date: 2023-07-13 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 2dea9f2aa6f6b..1a2d7e193ff44 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-12 +date: 2023-07-13 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 39705e2c53c6b..1fbb9cecf8b29 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-12 +date: 2023-07-13 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 b2916aac20659..b9b520e36dfb8 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-12 +date: 2023-07-13 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 909956bbee755..694d2f230f177 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-12 +date: 2023-07-13 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 36510a7c30fca..126f0a46f88cb 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-12 +date: 2023-07-13 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 84d0e52258020..74a8353bbed7d 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-12 +date: 2023-07-13 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 00fcd4d59e31c..34d69381a912f 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-12 +date: 2023-07-13 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 8cdfd63966f52..8b4ea10b16aba 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-12 +date: 2023-07-13 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 9ea23175e6de5..23f311d7a545c 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-12 +date: 2023-07-13 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 73baa1123393d..f9f6d8e319a20 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-12 +date: 2023-07-13 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 9978be994a024..3072792c8f147 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-12 +date: 2023-07-13 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 c2fc51e9d93fc..cc63c9a594184 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-12 +date: 2023-07-13 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 0d676f679653d..59119a02ed685 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-12 +date: 2023-07-13 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 37f318fe7ef19..78e0682b0677f 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-12 +date: 2023-07-13 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 6ae83a48eccc5..7621ada3f324d 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-12 +date: 2023-07-13 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 fcb1aac9ea596..9172324ca42bf 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 568f91c78e9ed..ff368b72062dc 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index ba2472670cd1e..d5eb1e50d7a6c 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-12 +date: 2023-07-13 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 2985544798bfa..a06e63ba0db57 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-12 +date: 2023-07-13 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 e1b6a605379ec..c2b8678b95d5c 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-12 +date: 2023-07-13 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 d98c2ec0ef6ea..dd345f00b4991 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-12 +date: 2023-07-13 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 168bb6090af47..a620ff7fa7f31 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-12 +date: 2023-07-13 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 53d8ef0f3bc6d..5c0d6aebc6bfd 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-12 +date: 2023-07-13 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 fd8f651f682ad..57a4692ea3eb9 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-12 +date: 2023-07-13 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 4b2c661c20cb7..a6f8482805bfa 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-12 +date: 2023-07-13 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 5331221829399..f504890769f02 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-12 +date: 2023-07-13 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 0eaf6c9da09ec..e76b045c08ae6 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-12 +date: 2023-07-13 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 56f814d71e837..70ed7fb5db79f 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-12 +date: 2023-07-13 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 0475270a89c9c..232eb1874d230 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-12 +date: 2023-07-13 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 30a71e5a065c2..86ba55286ac5c 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-12 +date: 2023-07-13 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 362b437d4571f..346f8be9ed795 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-12 +date: 2023-07-13 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 48d8865d9f46d..cb07834904447 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-12 +date: 2023-07-13 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 7df7bbf4623f3..c6bdced42d5eb 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-12 +date: 2023-07-13 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 b50777fa84f3f..59bf34fc96f24 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 91f3c5d1783fd..babd8c5419aea 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 6847b4d1aa9c5..d4c0bd5f4855d 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-12 +date: 2023-07-13 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 173935358b865..50250c0c082ac 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-12 +date: 2023-07-13 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 8f30a416545c9..6f87d89ab7d18 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-12 +date: 2023-07-13 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 dcb36cb93ed9a..92336f64a9a8b 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-12 +date: 2023-07-13 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 e43811ca0ad9b..2c847f6fe747f 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-12 +date: 2023-07-13 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 ee34b37d18ebf..cd24830e79c03 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-12 +date: 2023-07-13 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 af1abb215ef59..d02e04fa133c9 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-12 +date: 2023-07-13 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 66115be3595c8..0aaeeda661da6 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-12 +date: 2023-07-13 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 450d8f94b3d4e..20cb5788d863d 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-12 +date: 2023-07-13 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 d771c1444b659..d69dcf27afdb4 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-12 +date: 2023-07-13 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 5639638acd338..75b470d49a335 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-12 +date: 2023-07-13 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 da1a800000ea9..9b7f724e197e7 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-12 +date: 2023-07-13 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 16014275cde75..4260c6c974c8e 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-12 +date: 2023-07-13 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 3c69264a4447e..07703d075984c 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-12 +date: 2023-07-13 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 803ecd24b551b..f6b533e2eef39 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-12 +date: 2023-07-13 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 2554c3f481917..f1b64c8e792fc 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-12 +date: 2023-07-13 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 27d5a83e89bd6..11da7cb2dab13 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-12 +date: 2023-07-13 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 bd0ed426dd0c1..74d3338be9d8c 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-12 +date: 2023-07-13 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 8b9db1d51925b..d547d5b2b4096 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-12 +date: 2023-07-13 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 07fa8f8f4eb62..89cbbf7641566 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-12 +date: 2023-07-13 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 30eb4b6ab447b..816606360771e 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-12 +date: 2023-07-13 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 691eec8bbca0a..6c92c2a164684 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-12 +date: 2023-07-13 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 031bf9c813dae..44779d3375ccc 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-12 +date: 2023-07-13 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 164655c32e2b6..8cadef61b790d 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-12 +date: 2023-07-13 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 043b7b8b09f1e..2850149229722 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-12 +date: 2023-07-13 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 976073d213970..aa8fba73ae214 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-12 +date: 2023-07-13 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 9ce15f163884d..c5e555af955cf 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-12 +date: 2023-07-13 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 f9e3dd0fe8de6..31520988ae26c 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-12 +date: 2023-07-13 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 94fb1bdf52115..6938d95c58330 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-12 +date: 2023-07-13 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 9dd0c9346a59c..19f86b54f69b6 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-12 +date: 2023-07-13 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 b39044c98c3a7..29fc1342f239d 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-12 +date: 2023-07-13 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 45c1b0db7bc28..967f1860d3bdd 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-12 +date: 2023-07-13 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 be85be3196dae..2e0e4e0f10f03 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-12 +date: 2023-07-13 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 ec9a3430517d8..78afd614e82fe 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-12 +date: 2023-07-13 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 8fc0b69f4e28e..4cd3e1b19f738 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-12 +date: 2023-07-13 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 5b075501e2588..209597139058c 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-12 +date: 2023-07-13 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 36b1e169cfa0f..ff0d8c4a668f2 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-12 +date: 2023-07-13 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 92057cff0d689..aa7d63ff68aa6 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-12 +date: 2023-07-13 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 0f2aa9ddf107c..3b23da0ad24f8 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-12 +date: 2023-07-13 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 b26062d911f90..a01948504beaa 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-12 +date: 2023-07-13 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 d5e16036d1832..25d170c7d20ef 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-12 +date: 2023-07-13 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 c9d9f5a7dc47a..f76a7596fd664 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-12 +date: 2023-07-13 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 ba4012f9e1b5b..c5e360c68faca 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-12 +date: 2023-07-13 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 0120e09dda4ce..1cec70fc49ab5 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-12 +date: 2023-07-13 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 6aeb9884c1073..2a0b684c65c01 100644 --- a/api_docs/kbn_core_elasticsearch_server.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_server.devdocs.json @@ -974,7 +974,7 @@ "Headers used for authentication against Elasticsearch" ], "signature": [ - "{ date?: string | string[] | undefined; warning?: string | string[] | undefined; location?: string | string[] | undefined; from?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; allow?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; authorization?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; host?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; range?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" + "{ date?: string | string[] | undefined; warning?: string | string[] | undefined; range?: string | string[] | undefined; from?: string | string[] | undefined; location?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; allow?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; authorization?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; host?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" ], "path": "packages/core/elasticsearch/core-elasticsearch-server/src/client/scopeable_request.ts", "deprecated": false, diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index 7ebe337c6b8bd..3ac4ccbab444e 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-12 +date: 2023-07-13 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 26bb228e9927d..24ac35dca54af 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-12 +date: 2023-07-13 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 693476127fbfb..47b92383acd3c 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-12 +date: 2023-07-13 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 27f403baec1f3..b3d29d65cdf9b 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-12 +date: 2023-07-13 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 bac9aa54d4b24..d5d2e0bea2fbb 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-12 +date: 2023-07-13 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 a31537a571fb2..da01635129551 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-12 +date: 2023-07-13 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 ecf2953f4f04d..cbc07a2cee616 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-12 +date: 2023-07-13 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 8ae2f16af5826..76d388fed0e4b 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-12 +date: 2023-07-13 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 d1b80948307e4..c31e8c64cb02a 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-12 +date: 2023-07-13 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 5c0e2fd063232..0adc8ebfe00d5 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-12 +date: 2023-07-13 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 1cb080085fccc..babca9b4374b5 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-12 +date: 2023-07-13 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 d2025835c5831..29532576b39fb 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-12 +date: 2023-07-13 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 b0a7979e93218..c241df41f3e97 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-12 +date: 2023-07-13 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 5da02bdcb2ffc..8c2c1f74b9e9e 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-12 +date: 2023-07-13 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 70844f98340c4..b10b9dc6b10fb 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-12 +date: 2023-07-13 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 c40605c832b27..edf4d89eac14a 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-12 +date: 2023-07-13 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 efdb8900c0efe..a1154770e00e1 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-12 +date: 2023-07-13 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 1b29d689faab9..6073146d38323 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-12 +date: 2023-07-13 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 5da0c253aba57..2976a7d7e17aa 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-12 +date: 2023-07-13 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 215d78a294f86..db999bfae8965 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-12 +date: 2023-07-13 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 2f9a87bc1df4f..f2095d830f97f 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-12 +date: 2023-07-13 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 648cdd93b856c..94faccd55fa77 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-12 +date: 2023-07-13 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 431c1c8ebf6d6..6db6f8d25b767 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-12 +date: 2023-07-13 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 7cbce11e04844..771c814b023d7 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-12 +date: 2023-07-13 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 f9a388d3bed9b..b6ccef6c3723c 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-12 +date: 2023-07-13 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 e2bbe5507cc44..8f3d3158648cb 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -754,7 +754,7 @@ "The headers associated with the request." ], "signature": [ - "{ date?: string | string[] | undefined; warning?: string | string[] | undefined; location?: string | string[] | undefined; from?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; allow?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; authorization?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; host?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; range?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" + "{ date?: string | string[] | undefined; warning?: string | string[] | undefined; range?: string | string[] | undefined; from?: string | string[] | undefined; location?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; allow?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; authorization?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; host?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" ], "path": "packages/core/http/core-http-server/src/router/raw_request.ts", "deprecated": false, @@ -11045,7 +11045,7 @@ "\nReadonly copy of incoming request headers." ], "signature": [ - "{ date?: string | string[] | undefined; warning?: string | string[] | undefined; location?: string | string[] | undefined; from?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; allow?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; authorization?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; host?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; range?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" + "{ date?: string | string[] | undefined; warning?: string | string[] | undefined; range?: string | string[] | undefined; from?: string | string[] | undefined; location?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; allow?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; authorization?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; host?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" ], "path": "packages/core/http/core-http-server/src/router/request.ts", "deprecated": false, @@ -12605,7 +12605,7 @@ "tags": [], "label": "access", "description": [ - "\nDefines intended request origin of the route:\n- public. The route is public, declared stable and intended for external access.\n In the future, may require an incomming request to contain a specified header.\n- internal. The route is internal and intended for internal access only.\n\nIf not declared, infers access from route path:\n- access =`internal` for '/internal' route path prefix\n- access = `public` for everything else" + "\nDefines intended request origin of the route:\n- public. The route is public, declared stable and intended for external access.\n In the future, may require an incomming request to contain a specified header.\n- internal. The route is internal and intended for internal access only.\n\nDefaults to 'internal' If not declared," ], "signature": [ "\"internal\" | \"public\" | undefined" @@ -16047,7 +16047,7 @@ "\nHttp request headers to read." ], "signature": [ - "{ date?: string | string[] | undefined; warning?: string | string[] | undefined; location?: string | string[] | undefined; from?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; allow?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; authorization?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; host?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; range?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" + "{ date?: string | string[] | undefined; warning?: string | string[] | undefined; range?: string | string[] | undefined; from?: string | string[] | undefined; location?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; allow?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; authorization?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; host?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" ], "path": "packages/core/http/core-http-server/src/router/headers.ts", "deprecated": false, @@ -16353,7 +16353,7 @@ "\nSet of well-known HTTP headers." ], "signature": [ - "\"date\" | \"warning\" | \"location\" | \"from\" | \"etag\" | \"accept\" | \"accept-language\" | \"accept-patch\" | \"accept-ranges\" | \"access-control-allow-credentials\" | \"access-control-allow-headers\" | \"access-control-allow-methods\" | \"access-control-allow-origin\" | \"access-control-expose-headers\" | \"access-control-max-age\" | \"access-control-request-headers\" | \"access-control-request-method\" | \"age\" | \"allow\" | \"alt-svc\" | \"authorization\" | \"cache-control\" | \"connection\" | \"content-disposition\" | \"content-encoding\" | \"content-language\" | \"content-length\" | \"content-location\" | \"content-range\" | \"content-type\" | \"cookie\" | \"expect\" | \"expires\" | \"forwarded\" | \"host\" | \"if-match\" | \"if-modified-since\" | \"if-none-match\" | \"if-unmodified-since\" | \"last-modified\" | \"origin\" | \"pragma\" | \"proxy-authenticate\" | \"proxy-authorization\" | \"public-key-pins\" | \"range\" | \"referer\" | \"retry-after\" | \"sec-websocket-accept\" | \"sec-websocket-extensions\" | \"sec-websocket-key\" | \"sec-websocket-protocol\" | \"sec-websocket-version\" | \"set-cookie\" | \"strict-transport-security\" | \"tk\" | \"trailer\" | \"transfer-encoding\" | \"upgrade\" | \"user-agent\" | \"vary\" | \"via\" | \"www-authenticate\"" + "\"date\" | \"warning\" | \"range\" | \"from\" | \"location\" | \"etag\" | \"accept\" | \"accept-language\" | \"accept-patch\" | \"accept-ranges\" | \"access-control-allow-credentials\" | \"access-control-allow-headers\" | \"access-control-allow-methods\" | \"access-control-allow-origin\" | \"access-control-expose-headers\" | \"access-control-max-age\" | \"access-control-request-headers\" | \"access-control-request-method\" | \"age\" | \"allow\" | \"alt-svc\" | \"authorization\" | \"cache-control\" | \"connection\" | \"content-disposition\" | \"content-encoding\" | \"content-language\" | \"content-length\" | \"content-location\" | \"content-range\" | \"content-type\" | \"cookie\" | \"expect\" | \"expires\" | \"forwarded\" | \"host\" | \"if-match\" | \"if-modified-since\" | \"if-none-match\" | \"if-unmodified-since\" | \"last-modified\" | \"origin\" | \"pragma\" | \"proxy-authenticate\" | \"proxy-authorization\" | \"public-key-pins\" | \"referer\" | \"retry-after\" | \"sec-websocket-accept\" | \"sec-websocket-extensions\" | \"sec-websocket-key\" | \"sec-websocket-protocol\" | \"sec-websocket-version\" | \"set-cookie\" | \"strict-transport-security\" | \"tk\" | \"trailer\" | \"transfer-encoding\" | \"upgrade\" | \"user-agent\" | \"vary\" | \"via\" | \"www-authenticate\"" ], "path": "packages/core/http/core-http-server/src/router/headers.ts", "deprecated": false, @@ -17459,7 +17459,7 @@ "\nHttp response headers to set." ], "signature": [ - "Record | Record<\"date\" | \"warning\" | \"location\" | \"from\" | \"etag\" | \"accept\" | \"accept-language\" | \"accept-patch\" | \"accept-ranges\" | \"access-control-allow-credentials\" | \"access-control-allow-headers\" | \"access-control-allow-methods\" | \"access-control-allow-origin\" | \"access-control-expose-headers\" | \"access-control-max-age\" | \"access-control-request-headers\" | \"access-control-request-method\" | \"age\" | \"allow\" | \"alt-svc\" | \"authorization\" | \"cache-control\" | \"connection\" | \"content-disposition\" | \"content-encoding\" | \"content-language\" | \"content-length\" | \"content-location\" | \"content-range\" | \"content-type\" | \"cookie\" | \"expect\" | \"expires\" | \"forwarded\" | \"host\" | \"if-match\" | \"if-modified-since\" | \"if-none-match\" | \"if-unmodified-since\" | \"last-modified\" | \"origin\" | \"pragma\" | \"proxy-authenticate\" | \"proxy-authorization\" | \"public-key-pins\" | \"range\" | \"referer\" | \"retry-after\" | \"sec-websocket-accept\" | \"sec-websocket-extensions\" | \"sec-websocket-key\" | \"sec-websocket-protocol\" | \"sec-websocket-version\" | \"set-cookie\" | \"strict-transport-security\" | \"tk\" | \"trailer\" | \"transfer-encoding\" | \"upgrade\" | \"user-agent\" | \"vary\" | \"via\" | \"www-authenticate\", string | string[]>" + "Record | Record<\"date\" | \"warning\" | \"range\" | \"from\" | \"location\" | \"etag\" | \"accept\" | \"accept-language\" | \"accept-patch\" | \"accept-ranges\" | \"access-control-allow-credentials\" | \"access-control-allow-headers\" | \"access-control-allow-methods\" | \"access-control-allow-origin\" | \"access-control-expose-headers\" | \"access-control-max-age\" | \"access-control-request-headers\" | \"access-control-request-method\" | \"age\" | \"allow\" | \"alt-svc\" | \"authorization\" | \"cache-control\" | \"connection\" | \"content-disposition\" | \"content-encoding\" | \"content-language\" | \"content-length\" | \"content-location\" | \"content-range\" | \"content-type\" | \"cookie\" | \"expect\" | \"expires\" | \"forwarded\" | \"host\" | \"if-match\" | \"if-modified-since\" | \"if-none-match\" | \"if-unmodified-since\" | \"last-modified\" | \"origin\" | \"pragma\" | \"proxy-authenticate\" | \"proxy-authorization\" | \"public-key-pins\" | \"referer\" | \"retry-after\" | \"sec-websocket-accept\" | \"sec-websocket-extensions\" | \"sec-websocket-key\" | \"sec-websocket-protocol\" | \"sec-websocket-version\" | \"set-cookie\" | \"strict-transport-security\" | \"tk\" | \"trailer\" | \"transfer-encoding\" | \"upgrade\" | \"user-agent\" | \"vary\" | \"via\" | \"www-authenticate\", string | string[]>" ], "path": "packages/core/http/core-http-server/src/router/headers.ts", "deprecated": false, diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 24669ef76fef7..96b41a5ef180a 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-12 +date: 2023-07-13 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 23a09858462f5..c53bbf9c0cb05 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-12 +date: 2023-07-13 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 402aa93e9b2c5..5d18120f474da 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-12 +date: 2023-07-13 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 d2f1ffca13139..6709630e1127a 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-12 +date: 2023-07-13 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 5ae37e56f21b7..2876d33b14f3c 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-12 +date: 2023-07-13 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 17877019697e2..c68d4ebb7b9f6 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-12 +date: 2023-07-13 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 e83cc31b28190..9300dd5403ed2 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-12 +date: 2023-07-13 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 fef7b98ad4ae5..19218eeeb0bc5 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-12 +date: 2023-07-13 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 22a22a33170c8..82c23c51f2cac 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-12 +date: 2023-07-13 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 5a8e77da56fa5..3e1275ecb779d 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-12 +date: 2023-07-13 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 1177a824e92ee..8338056c152cc 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-12 +date: 2023-07-13 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 b5702c33ec5cb..7d52748dead01 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-12 +date: 2023-07-13 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 d78ce87a2d630..11de43cdc82ae 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-12 +date: 2023-07-13 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 96342a2d71aaa..230b0c3e8c2ce 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-12 +date: 2023-07-13 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 62779de54d792..ab34cc42b940e 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-12 +date: 2023-07-13 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 9e4d1bca827fd..20bbbb8883518 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-12 +date: 2023-07-13 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 eddf2a13143df..92e7e69c7646b 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-12 +date: 2023-07-13 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 6787935eb8584..c7221624f35ce 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-12 +date: 2023-07-13 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 99be57fa5ae14..06f41a57cb1ff 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-12 +date: 2023-07-13 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 a84adc015efdb..d96d61e84fbe3 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-12 +date: 2023-07-13 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 969abe2ba843e..d3049399cdcb3 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-12 +date: 2023-07-13 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 178372659de9f..769c76c04fe3f 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-12 +date: 2023-07-13 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 cd07cbeb503f5..824617b579599 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-12 +date: 2023-07-13 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 cc4417259162a..b5611371ab7d8 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-12 +date: 2023-07-13 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 f56eb8b931c24..3d305788a5077 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-12 +date: 2023-07-13 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 c85ad3d88efa4..74f08a008e206 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-12 +date: 2023-07-13 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 72d00b36c7605..002138972d995 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-12 +date: 2023-07-13 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 e793f3309ae71..050342c97717e 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-12 +date: 2023-07-13 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 51250a42629cd..cc4236a7a04fa 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-12 +date: 2023-07-13 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 d748e6c111653..5c4ab4074ab5e 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-12 +date: 2023-07-13 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 3e7be9fdac160..4586b1ef3373a 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-12 +date: 2023-07-13 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 fcb2c1ad441fc..fa2a31a6205d0 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-12 +date: 2023-07-13 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 f1ae03938e1e0..66d75ee886ac6 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-12 +date: 2023-07-13 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 cd53753661d92..09e4448c2e956 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-12 +date: 2023-07-13 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 326bc9b696620..7bbf1ac0d3dec 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-12 +date: 2023-07-13 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 b8992d708726f..66072ad97528c 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-12 +date: 2023-07-13 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 7b2a7418caf84..fa824d883ebe6 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-12 +date: 2023-07-13 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 ff8a92cfc953b..783aa573f84c2 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-12 +date: 2023-07-13 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 04a54990deb0f..ef61a15e60017 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-12 +date: 2023-07-13 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 224884d3806a0..5ccf7174db502 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-12 +date: 2023-07-13 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 5feae586499d8..1717891a7115c 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-12 +date: 2023-07-13 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 b0a1ae726fd77..9f4008313135c 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-12 +date: 2023-07-13 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 c501425c79f14..3a74cdbb2ad5b 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-12 +date: 2023-07-13 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 d8c19431838f1..ba662708fd64c 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-12 +date: 2023-07-13 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 2893edfec3f32..c41c5062aa565 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-12 +date: 2023-07-13 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.devdocs.json b/api_docs/kbn_core_saved_objects_api_browser.devdocs.json index 7af458553d3a3..cb7c6b8810907 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.devdocs.json +++ b/api_docs/kbn_core_saved_objects_api_browser.devdocs.json @@ -902,14 +902,6 @@ "plugin": "@kbn/core", "path": "src/core/public/index.ts" }, - { - "plugin": "dataViews", - "path": "src/plugins/data_views/common/lib/get_title.ts" - }, - { - "plugin": "dataViews", - "path": "src/plugins/data_views/common/lib/get_title.ts" - }, { "plugin": "home", "path": "src/plugins/home/public/application/kibana_services.ts" @@ -1743,10 +1735,6 @@ "plugin": "@kbn/core-saved-objects-browser-mocks", "path": "packages/core/saved-objects/core-saved-objects-browser-mocks/src/saved_objects_service.mock.ts" }, - { - "plugin": "dataViews", - "path": "src/plugins/data_views/common/lib/get_title.ts" - }, { "plugin": "savedObjects", "path": "src/plugins/saved_objects/public/saved_object/helpers/initialize_saved_object.ts" diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index fd9067a8e6158..4da78adc42468 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-12 +date: 2023-07-13 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 e2ca55bc4e9e8..4362de7b6be02 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-12 +date: 2023-07-13 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 7e57cd32304ed..78532a7032059 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-12 +date: 2023-07-13 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 926bd86c02dbf..7266a40032075 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-12 +date: 2023-07-13 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 98d0ac6e86376..21e78fe177f1b 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-12 +date: 2023-07-13 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 bab69b2c56342..42d8f8f377b83 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-12 +date: 2023-07-13 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 7e6742810e67a..cd203fad90fab 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-12 +date: 2023-07-13 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 991f6be78d252..2218de8a2fe22 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-12 +date: 2023-07-13 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 cd61e4bd76984..8eba223b71c72 100644 --- a/api_docs/kbn_core_saved_objects_common.devdocs.json +++ b/api_docs/kbn_core_saved_objects_common.devdocs.json @@ -1213,18 +1213,6 @@ "plugin": "home", "path": "src/plugins/home/server/services/sample_data/sample_data_registry.ts" }, - { - "plugin": "data", - "path": "src/plugins/data/public/search/session/sessions_mgmt/lib/api.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/public/search/session/sessions_mgmt/lib/api.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/public/search/session/sessions_mgmt/lib/api.ts" - }, { "plugin": "savedObjectsTagging", "path": "x-pack/plugins/saved_objects_tagging/public/ui_api/get_table_column_definition.tsx" @@ -1453,42 +1441,6 @@ "plugin": "savedObjectsManagement", "path": "src/plugins/saved_objects_management/server/lib/find_relationships.test.ts" }, - { - "plugin": "data", - "path": "src/plugins/data/server/search/saved_objects/search_session_migration.test.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/server/search/saved_objects/search_session_migration.test.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/server/search/saved_objects/search_session_migration.test.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/server/search/saved_objects/search_session_migration.test.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/server/search/saved_objects/search_session_migration.test.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/server/search/saved_objects/search_session_migration.test.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/server/search/saved_objects/search_session_migration.test.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/server/search/saved_objects/search_session_migration.test.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/server/search/saved_objects/search_session_migration.test.ts" - }, { "plugin": "synthetics", "path": "x-pack/plugins/synthetics/public/apps/synthetics/state/monitor_list/api.ts" @@ -2334,34 +2286,6 @@ "plugin": "expressions", "path": "src/plugins/expressions/common/executor/executor.ts" }, - { - "plugin": "dataViews", - "path": "src/plugins/data_views/common/expressions/load_index_pattern.ts" - }, - { - "plugin": "dataViews", - "path": "src/plugins/data_views/common/expressions/load_index_pattern.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/common/search/search_source/extract_references.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/common/search/search_source/extract_references.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/common/search/search_source/extract_references.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/common/search/search_source/inject_references.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/common/search/search_source/inject_references.ts" - }, { "plugin": "data", "path": "src/plugins/data/common/query/filters/persistable_state.ts" @@ -2734,14 +2658,6 @@ "plugin": "globalSearchProviders", "path": "x-pack/plugins/global_search_providers/server/providers/saved_objects/map_object_to_result.test.ts" }, - { - "plugin": "dataViews", - "path": "src/plugins/data_views/common/data_views/persistable_state.test.ts" - }, - { - "plugin": "dataViews", - "path": "src/plugins/data_views/common/data_views/persistable_state.test.ts" - }, { "plugin": "expressions", "path": "src/plugins/expressions/common/executor/executor.test.ts" @@ -2754,14 +2670,6 @@ "plugin": "expressions", "path": "src/plugins/expressions/common/executor/executor.test.ts" }, - { - "plugin": "data", - "path": "src/plugins/data/common/search/search_source/inject_references.test.ts" - }, - { - "plugin": "data", - "path": "src/plugins/data/common/search/search_source/inject_references.test.ts" - }, { "plugin": "lens", "path": "x-pack/plugins/lens/common/locator/locator.ts" diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index f53ae5edb4826..28ffd4be36b30 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-12 +date: 2023-07-13 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 258aa0c529bbb..be802b9444f0e 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-12 +date: 2023-07-13 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 973ba8d4b52bb..beffba5db75bc 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-12 +date: 2023-07-13 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 6fe2b0f2e8056..7cd8ac84fc940 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-12 +date: 2023-07-13 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 e0f57ed175730..b2553c8b7132d 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-12 +date: 2023-07-13 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 b3690a047be7e..0e4f67e68df09 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-12 +date: 2023-07-13 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 66640e5420539..52d1c333567c3 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-12 +date: 2023-07-13 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 d1822d583e682..2c3c6c3c5b386 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-12 +date: 2023-07-13 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 0e68dc683e23f..b27f0e3aa63ab 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-12 +date: 2023-07-13 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 ef8864b10629e..3b5e4b646b6fc 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-12 +date: 2023-07-13 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 d9f01d08ba38e..f7c73c872fcbb 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-12 +date: 2023-07-13 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 bbb3a83f5c960..9d9a783ed469a 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-12 +date: 2023-07-13 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 d4ee4d97d6369..70a7d567d87d2 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-12 +date: 2023-07-13 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 25d9f5ad30d6d..6284e192e9745 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-12 +date: 2023-07-13 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 9227e74ee3c33..dd2e747e69100 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-12 +date: 2023-07-13 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 e35964915ee67..7226da9ff1194 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-12 +date: 2023-07-13 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 0d42a174b8907..402053b2511c1 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-12 +date: 2023-07-13 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 d861dd91eaa01..f98e734ba0c85 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-12 +date: 2023-07-13 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 0e7b965fd0cc9..316731894ec08 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-12 +date: 2023-07-13 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 f21c6cf50b3a4..ef96520cd8d06 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-12 +date: 2023-07-13 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 0c99b9a118cc1..d035a28221fba 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-12 +date: 2023-07-13 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 6d248ab515df9..29dbacf9025ca 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-12 +date: 2023-07-13 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 57c64fff3b87a..9958562bd293e 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-12 +date: 2023-07-13 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 071698435008d..1585fc6f5b346 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-12 +date: 2023-07-13 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 8cff18c922317..7c938bf838fff 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-12 +date: 2023-07-13 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 136900eac8199..cb415dedcf87c 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-12 +date: 2023-07-13 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 168fe47ca307e..3c5b615232c94 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-12 +date: 2023-07-13 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 578f04c2c5e34..42330a3b90e20 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-12 +date: 2023-07-13 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 c3fdc4fd9dda3..fb6d27268c6c0 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-12 +date: 2023-07-13 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 acffe2a0f19f6..eac2398eadf85 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-12 +date: 2023-07-13 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 58b2c0cc99911..487c8d6b6978a 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-12 +date: 2023-07-13 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 7ca96d1e141be..4b9acc72dd408 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-12 +date: 2023-07-13 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 51beded6653cf..ec6c2e36f8287 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-12 +date: 2023-07-13 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 4beadaf63d268..9afe2e777c398 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-12 +date: 2023-07-13 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 2d1bf314f08b3..9a16b292e90a7 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-12 +date: 2023-07-13 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 8ec181c0de112..34e611ff5a4c8 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-12 +date: 2023-07-13 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 2ce03d0103e57..9a5b0dbb7c957 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-12 +date: 2023-07-13 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 7bc4bd91ba2c5..cc4126bb50c06 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-12 +date: 2023-07-13 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 b5ee9a2e6d5f1..6a25144310430 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-12 +date: 2023-07-13 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 d4f49580e0d1b..73accf99299ce 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-12 +date: 2023-07-13 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 cb5a24f2fae69..f2eee176558d2 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-12 +date: 2023-07-13 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 4a855e2d32a26..bcb83d34a64f9 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-12 +date: 2023-07-13 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 0dde10bf0bfbc..cb5b653560357 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-12 +date: 2023-07-13 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 0bf5b3649cef4..67eecc850f3df 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-12 +date: 2023-07-13 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 dad07297d9f48..a1eab7d606d3f 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-12 +date: 2023-07-13 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 cccc0ab00111c..71f3b0309537b 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-12 +date: 2023-07-13 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 87c65f1115b60..ee131463e91dc 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-12 +date: 2023-07-13 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 c03336b1150ee..62537fe4c1834 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-12 +date: 2023-07-13 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 1d2937812cedb..530013cafb912 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-12 +date: 2023-07-13 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 d5b56ac76b984..1395e842f88d8 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-12 +date: 2023-07-13 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 2a712353f6780..859fd3ebb15dd 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-12 +date: 2023-07-13 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 4cfd7903f48fc..bd9cc94a57032 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-12 +date: 2023-07-13 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 d310a7ffc618b..c6a7ae588b82f 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-12 +date: 2023-07-13 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 57e0d6c31600a..ab8a1e337faf9 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index ca03416fafdcc..954dd7d4166cc 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-12 +date: 2023-07-13 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 0366678c15ecb..24771c25a64ea 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-12 +date: 2023-07-13 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 58928b38b8d0c..0d7703dd0ad8b 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-12 +date: 2023-07-13 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 39725a714fac7..c6a477dc2e2b4 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-12 +date: 2023-07-13 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 bee49db0feafb..4b6d571c93f75 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-12 +date: 2023-07-13 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 5a7a6a6549157..0105733724ec9 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-12 +date: 2023-07-13 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.devdocs.json b/api_docs/kbn_elastic_assistant.devdocs.json index 393e7ea5d5bda..3685f00b7b9b9 100644 --- a/api_docs/kbn_elastic_assistant.devdocs.json +++ b/api_docs/kbn_elastic_assistant.devdocs.json @@ -460,7 +460,7 @@ "signature": [ "{ connectorId?: string | undefined; defaultSystemPromptId?: string | undefined; provider?: ", "OpenAiProviderType", - " | undefined; }" + " | undefined; model?: string | undefined; }" ], "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx", "deprecated": false, diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index fdbc701fd75f8..22de25998b737 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-12 +date: 2023-07-13 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 4583437116ed3..b4728c59e9cb6 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-12 +date: 2023-07-13 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 c192f40b3e6ff..d99444e6d694f 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-12 +date: 2023-07-13 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 231888b12b04b..3d94e2e2467dd 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-12 +date: 2023-07-13 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 c0fcbe324fdf9..4fdd9d9aa5892 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-12 +date: 2023-07-13 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 17938a13b4862..1801c44f0802a 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-12 +date: 2023-07-13 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 8d7f731a5df0e..c3562691f4b59 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index c0f6860c9f179..c3648fff54cbf 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-12 +date: 2023-07-13 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 e1f856d0ab9f4..49432057fb7cb 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-12 +date: 2023-07-13 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 88d87cac61f0e..46c842e191a78 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-12 +date: 2023-07-13 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 289566868f693..82aef15de730f 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-12 +date: 2023-07-13 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 20fd1cfa45650..0007e6a55495d 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-12 +date: 2023-07-13 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 8e18ba2d8464e..2dcee172c5978 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-12 +date: 2023-07-13 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 1985b1736ebcb..98035cabd6a92 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-12 +date: 2023-07-13 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 9e82ac0fcc836..d480599d61f01 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-12 +date: 2023-07-13 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 70cde35d17f58..8b1a4f6c3dc3b 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-12 +date: 2023-07-13 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 82f91568699a3..9b9abc6e897d8 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-12 +date: 2023-07-13 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 cf0a8393637c8..43d7ce55e4e87 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-12 +date: 2023-07-13 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 72be599ece123..4f233991d579a 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-12 +date: 2023-07-13 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 ee6ff9632aec1..9ac01d4d88485 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-12 +date: 2023-07-13 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 2662cf16f57a3..14fed28478710 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-12 +date: 2023-07-13 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 d89316dc9b5c1..9eaade5c41805 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-12 +date: 2023-07-13 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 a1b3bbcf539d8..46de432822cf9 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-12 +date: 2023-07-13 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 3fc5286082e73..aa6843f4a6d2b 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-12 +date: 2023-07-13 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 e8c5e3b3a8327..9adda81297c71 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-12 +date: 2023-07-13 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 742da0b7bfca5..dfd6c00ccaa4f 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-12 +date: 2023-07-13 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 ba6ea78e2ca0d..0892ebe00a4af 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-12 +date: 2023-07-13 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 67bb54d9bf4a7..6749a78383d90 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-12 +date: 2023-07-13 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 5d1390c382f5f..dff452ed5ca6c 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-12 +date: 2023-07-13 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 00eb6d8971c0a..a8222c6f73a35 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-12 +date: 2023-07-13 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 43de10c6224b9..d9a1f3701fe38 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-12 +date: 2023-07-13 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 daf02df605db7..2ef27220a1c40 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-12 +date: 2023-07-13 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 790e652c5603c..5d828552545c6 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-12 +date: 2023-07-13 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 67c280d2eeaa9..fc4c19983ea80 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-12 +date: 2023-07-13 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 a344b90a2f4ae..c87e28734802f 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-12 +date: 2023-07-13 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 398e3355b8610..6e114e8188c6b 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-12 +date: 2023-07-13 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 c6d4d72f7d780..b353e88bd74f3 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-12 +date: 2023-07-13 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 91479d9b5f8ca..fc673c59774c1 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-12 +date: 2023-07-13 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 422243dc06de2..a86a3e534b28d 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-12 +date: 2023-07-13 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 39bf72758c217..bbecb363c4c0b 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-12 +date: 2023-07-13 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 788a14d6420f5..d9501d70b776d 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-12 +date: 2023-07-13 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_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 380e1b3080ba6..1bcac30cc22c1 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-12 +date: 2023-07-13 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 9ce89b3b98b22..0c63383503aa8 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-12 +date: 2023-07-13 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 e0a5e8371540e..0e1cbe2bd391b 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-12 +date: 2023-07-13 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 2cbad02d948b8..f9c8492587760 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-12 +date: 2023-07-13 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 4eb1bbccce1bc..86e604497ce85 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-12 +date: 2023-07-13 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 c0605225415e2..1fb5ab2c0a2de 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-12 +date: 2023-07-13 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 96fedeaf4c54c..83c342d60dbea 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-12 +date: 2023-07-13 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 d2926fd658f34..77e07817d5895 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-12 +date: 2023-07-13 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 e4f91889f4e9f..2c935765ea097 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-12 +date: 2023-07-13 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 9adc58f2fc685..2144f98fd58d5 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-12 +date: 2023-07-13 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 58ddc30ac84b9..3abf4bbe78ab3 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-12 +date: 2023-07-13 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 a29a4ff22b499..d9e8b8af66924 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-12 +date: 2023-07-13 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 4bac0afd9d25f..785febc254310 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-12 +date: 2023-07-13 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 0c4f7f52b5a30..c3218ffa1fcd2 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-12 +date: 2023-07-13 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 7726b79aad379..8142a24c14ea0 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-12 +date: 2023-07-13 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 e5fa63da7b23b..ece0bfda7c59c 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-12 +date: 2023-07-13 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 1c35cd7694f6e..899dce7caf674 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-12 +date: 2023-07-13 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 c5b9edf4fb589..4d13d0412addd 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-12 +date: 2023-07-13 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 569e8ad2a5af6..d1cfa0d7e5e93 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-12 +date: 2023-07-13 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 20fd23405f1a0..728e2a7adab86 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-12 +date: 2023-07-13 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 87413522a79eb..b4e10cc02478c 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-12 +date: 2023-07-13 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 1398073968c9f..7ef35894ecaf9 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-12 +date: 2023-07-13 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 1f3356b19495c..647b916fe560b 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-12 +date: 2023-07-13 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 38e60d02da6e1..5a32b074bd17b 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-12 +date: 2023-07-13 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 c4da07bafeaf8..74788a1d1c89a 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-12 +date: 2023-07-13 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 ee0d64be02fe8..e4da13b92e275 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-12 +date: 2023-07-13 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 f5c4807976eed..8cd929feffec1 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-12 +date: 2023-07-13 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 1c0a29740759b..233428680703f 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-12 +date: 2023-07-13 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 61c55ba2567d5..bc9790cf70a50 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-12 +date: 2023-07-13 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 5eaf16e278f9d..c1c3de99b4d47 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-12 +date: 2023-07-13 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 9d190c2833e16..6658dd54172ed 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-12 +date: 2023-07-13 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 3993e2f7e6ce7..7333352bd4b65 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-12 +date: 2023-07-13 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 e49279f6cc307..810724ceca4bf 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-12 +date: 2023-07-13 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 9e0c25df23689..784f41aaa4b76 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-12 +date: 2023-07-13 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 d94bee2a776f2..d72adf744eb98 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-12 +date: 2023-07-13 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 698465332616e..e7ff61a0c624a 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-12 +date: 2023-07-13 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 153025511ddd2..5c2f2a0557551 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-12 +date: 2023-07-13 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 7288d7de6d8c7..a636f200c9bea 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-12 +date: 2023-07-13 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_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index 0da07793a2099..ceb49813fad22 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-12 +date: 2023-07-13 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 208c004c106c5..a0376092022b2 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-12 +date: 2023-07-13 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 ed28c5160fba7..4539dc7aa6b85 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index cba5333c4b71f..885b14f6806e4 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2023-07-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 9081336b1c441..b70d56b389188 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-07-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 9d7bd2e57bf85..12775e6d70cae 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-07-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index ca510f938a1b6..9a0de2dab7a4b 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-07-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index 897ff8cd6b8a9..25b206ca64627 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2023-07-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 255e093ee4a30..9e856adc8569b 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-07-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index 384c946b80a7a..5694e12a7a9fc 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-07-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index 48f85be23e0d8..4f723ae1661e6 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-07-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 670dda82b079c..18a0dfb4aeead 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-07-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 6322400b7dd27..875ddb0081c96 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-12 +date: 2023-07-13 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 22e7894678625..07cd55fc531ce 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-12 +date: 2023-07-13 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 bfbef50ea9d21..0ef68983298bd 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-12 +date: 2023-07-13 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 1e927b9d6395a..c8041592b14f9 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-12 +date: 2023-07-13 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 54c2d9d0ef362..0a655ad808183 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-12 +date: 2023-07-13 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 0a775b3472763..0757e0dceb14c 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-12 +date: 2023-07-13 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 482efde21091f..b7c63171a152d 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-12 +date: 2023-07-13 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 cfc17dca605ad..b018b1732de98 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-12 +date: 2023-07-13 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 4934a8e41ef9f..9b388a02d86cb 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-12 +date: 2023-07-13 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 28ce9b060cd62..8f7e62fc55188 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-12 +date: 2023-07-13 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 c2c4ab94edafe..2d17a8a632883 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-12 +date: 2023-07-13 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 7c6908341d061..99e2db0f3160c 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-12 +date: 2023-07-13 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 089e76188f6eb..54672c1714b13 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-12 +date: 2023-07-13 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 c312898a268b1..77fea53183751 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-12 +date: 2023-07-13 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 4c71118232b4e..a6bf5f990572c 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-12 +date: 2023-07-13 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 89189f8e924a6..114a459b3752b 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-12 +date: 2023-07-13 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 87672072d3ffe..3ee3d134dcf75 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-12 +date: 2023-07-13 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 ad61125a94604..abf38d393c0b4 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-12 +date: 2023-07-13 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 eae1a84873cdd..a89f4255c17ee 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-12 +date: 2023-07-13 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 622e612678b17..ce5979542650b 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-12 +date: 2023-07-13 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 510bf1b064e75..32cde58c6761e 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-12 +date: 2023-07-13 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 9a781c01498a5..81bb74262835f 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-12 +date: 2023-07-13 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 a0437a847aecd..2cb5705f96c47 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-12 +date: 2023-07-13 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 9c730cc4f160d..e9a9f78367f15 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-12 +date: 2023-07-13 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 858605305b68a..4f767fecb13d2 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-12 +date: 2023-07-13 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 54f95b7e0c24e..e6afbaff0894e 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-12 +date: 2023-07-13 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 6399e7d8e8a69..a3b4ed8f9caf5 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-12 +date: 2023-07-13 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 3671a5dda1223..2d1b0261a4e46 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-12 +date: 2023-07-13 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 743619d605cf8..c7b530611a172 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-12 +date: 2023-07-13 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 0fde065fdbfa5..e38ea0f4d2a21 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-12 +date: 2023-07-13 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 e8d040be29770..e2839dfa0304f 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-12 +date: 2023-07-13 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 0dcdf4c911fc8..fcd56da985b5b 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-12 +date: 2023-07-13 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 bce5f42f61130..17aa748038269 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-12 +date: 2023-07-13 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 0ac2a6ef50a00..fb5aca4efd734 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-12 +date: 2023-07-13 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 5039e2d6851d1..026391b6489a8 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-12 +date: 2023-07-13 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 78af350aa5e02..97d124ede683c 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-12 +date: 2023-07-13 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 1dd60257c2abf..10a594f474cb3 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-12 +date: 2023-07-13 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 68575c074ef16..480582c9c0545 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-12 +date: 2023-07-13 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 7eede03c67cee..141fc7208768b 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-12 +date: 2023-07-13 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 20bcc82119765..3215f62423d07 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-12 +date: 2023-07-13 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 0361078a3def4..a637490c86a42 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-12 +date: 2023-07-13 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 c37f10c4b8a43..dcd97d6c20ccd 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-12 +date: 2023-07-13 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 d79cfcdb1bd15..43dccbd629075 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-12 +date: 2023-07-13 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 8a1f2ff327d7e..fb77719b003db 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-12 +date: 2023-07-13 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 419ba60fa98ee..b4fdc12475fa1 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-12 +date: 2023-07-13 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 15e85910ddade..2dabb3198cedc 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-12 +date: 2023-07-13 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 cf214ec5ea4cf..73053cd61cfb6 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-12 +date: 2023-07-13 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 631bf32199376..4d69155a02948 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-12 +date: 2023-07-13 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 8afcde478e336..53a74ba6dd18b 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-12 +date: 2023-07-13 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 e198f4919edf5..491ba1f9af335 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-12 +date: 2023-07-13 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 f8c5e2be4b2a0..62c3cffc305fc 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-12 +date: 2023-07-13 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 20ceb2ccd075c..07639400b0ad7 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-12 +date: 2023-07-13 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 6c165a6d49ed0..b7ba87842af49 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-12 +date: 2023-07-13 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 16b07a9464525..343af9613a61d 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-12 +date: 2023-07-13 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 97cf067aef9b2..79305962e8dcf 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-12 +date: 2023-07-13 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 d38fa14a5033e..9c624d2380994 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-12 +date: 2023-07-13 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 55aaa5b9e0f8f..7ae9a275e5b5d 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-12 +date: 2023-07-13 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 565f08aeb6484..eca9ba76ef2f7 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-12 +date: 2023-07-13 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 4c00118d8efce..7f3b985dbe059 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-12 +date: 2023-07-13 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 c9e2bfb18c89f..35d572059c064 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-12 +date: 2023-07-13 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 5966a4ad66ed6..d6ab9ab98811b 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-12 +date: 2023-07-13 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 ce1e8b2145e40..e44107e495e30 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-12 +date: 2023-07-13 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 9c109c3543365..c1d1de4a2cc04 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-12 +date: 2023-07-13 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 7baa4f79bad7a..f063dac793e87 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-12 +date: 2023-07-13 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 8e4713f092395..b368d6ec4e376 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-12 +date: 2023-07-13 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 ca766ad9e5f8e..70d0db96c3311 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-12 +date: 2023-07-13 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 bf2b7956baed7..5c3ddc31c90fc 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-12 +date: 2023-07-13 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 0660386b2bc95..1212104b10bb7 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-12 +date: 2023-07-13 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 d37b855985a98..4c13704fcd0ef 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-12 +date: 2023-07-13 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 6f5686de24bd0..4bdfc660a9a58 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-12 +date: 2023-07-13 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 55718387c21d4..e7cae18b0eecc 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-12 +date: 2023-07-13 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 ff7c81d96922d..72ceda2db5052 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-12 +date: 2023-07-13 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 bdd3e1c5dd355..1cb6601c5db39 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-12 +date: 2023-07-13 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 06a48b3521db4..075363f2e0493 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 309760d3dc9c3..8c2e7a5ea10cc 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-12 +date: 2023-07-13 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 0c84033f1ba2d..af3b7fc437e7d 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-12 +date: 2023-07-13 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 b464705b3805e..933eda3214780 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-12 +date: 2023-07-13 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 1c34169f7a678..6bf1ac27b6a18 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-12 +date: 2023-07-13 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 4a423d9f04350..16ee3e3135026 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-12 +date: 2023-07-13 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 ca3a17b212147..7c52c43f688a9 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-12 +date: 2023-07-13 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 e7b946b57668b..eb710a14eaa0c 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-12 +date: 2023-07-13 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 9e6ec15925d00..b06b88ff69665 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-12 +date: 2023-07-13 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 a82a67e24eed6..d6572e6a9c38d 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-12 +date: 2023-07-13 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 3e230a7653c39..ff500acacf24d 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-12 +date: 2023-07-13 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 8670a738e106e..f68a42a3f1a82 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-12 +date: 2023-07-13 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 b4109301d5b55..25b32806db246 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-12 +date: 2023-07-13 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 d7aca74817758..ba510fb321033 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-12 +date: 2023-07-13 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 c95da1dc614df..b1b0cff46c80e 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-12 +date: 2023-07-13 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 c5ad4831deb32..a5009bc5f8ab4 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-12 +date: 2023-07-13 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 b6ee531e9af83..25e658d0cdea5 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-12 +date: 2023-07-13 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 e1c8e4815a99e..2895b11aa7944 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-12 +date: 2023-07-13 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 b6a2326cfe82c..4359363eadcee 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-12 +date: 2023-07-13 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 25b3372bd7a9f..24f359134dabd 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-12 +date: 2023-07-13 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 5aa1d602b6700..46a00d26058b7 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index 0076733c05cdd..9ebbe4bbd0855 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -3060,6 +3060,40 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "observability", + "id": "def-public.SloEditLocatorParams", + "type": "Interface", + "tags": [], + "label": "SloEditLocatorParams", + "description": [], + "signature": [ + { + "pluginId": "observability", + "scope": "public", + "docId": "kibObservabilityPluginApi", + "section": "def-public.SloEditLocatorParams", + "text": "SloEditLocatorParams" + }, + " extends ", + "RecursivePartial", + "<", + "CreateSLOForm", + ">,", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.SerializableRecord", + "text": "SerializableRecord" + } + ], + "path": "x-pack/plugins/observability/public/locators/slo_edit.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "initialIsOpen": false + }, { "parentPluginId": "observability", "id": "def-public.Stat", @@ -4078,6 +4112,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observability", + "id": "def-public.sloEditLocatorID", + "type": "string", + "tags": [], + "label": "sloEditLocatorID", + "description": [], + "signature": [ + "\"SLO_EDIT_LOCATOR\"" + ], + "path": "x-pack/plugins/observability/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observability", "id": "def-public.StringOrNull", @@ -4230,6 +4279,22 @@ }, "<", "SloDetailsLocatorParams", + ">; sloEditLocator: ", + { + "pluginId": "share", + "scope": "common", + "docId": "kibSharePluginApi", + "section": "def-common.LocatorPublic", + "text": "LocatorPublic" + }, + "<", + { + "pluginId": "observability", + "scope": "public", + "docId": "kibObservabilityPluginApi", + "section": "def-public.SloEditLocatorParams", + "text": "SloEditLocatorParams" + }, ">; getCoPilotService: () => ", "CoPilotService", "; }" @@ -7577,6 +7642,20 @@ "path": "x-pack/plugins/observability/server/routes/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-server.ObservabilityRouteHandlerResources.config", + "type": "Object", + "tags": [], + "label": "config", + "description": [], + "signature": [ + "{ readonly aiAssistant?: Readonly<{} & { enabled: boolean; feedback: Readonly<{} & { enabled: boolean; url: string; }>; provider: Readonly<{} & { openAI: Readonly<{} & { apiKey: string; model: string; }>; }> | Readonly<{} & { azureOpenAI: Readonly<{} & { apiKey: string; resourceName: string; deploymentId: string; }>; }>; }> | undefined; readonly enabled: boolean; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly thresholdRule: Readonly<{} & { groupByPageSize: number; }>; readonly compositeSlo: Readonly<{} & { enabled: boolean; }>; }" + ], + "path": "x-pack/plugins/observability/server/routes/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -7649,15 +7728,49 @@ "label": "ObservabilityAPIReturnType", "description": [], "signature": [ - "{ \"POST /internal/observability/copilot/prompts/profilingOptimizeFunction\": { endpoint: \"POST /internal/observability/copilot/prompts/profilingOptimizeFunction\"; params?: ", + "{ \"POST /internal/observability/copilot/prompts/{promptId}/track\": { endpoint: \"POST /internal/observability/copilot/prompts/{promptId}/track\"; params?: ", "TypeC", - "<{ body: ", + "<{ path: ", "TypeC", - "<{ library: ", + "<{ promptId: ", "StringC", - "; functionName: ", + "; }>; body: ", + "IntersectionC", + "<[", + "TypeC", + "<{ responseTime: ", + "NumberC", + "; messages: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ role: ", + "UnionC", + "<[", + "LiteralC", + "<\"system\">, ", + "LiteralC", + "<\"user\">, ", + "LiteralC", + "<\"assistant\">]>; content: ", "StringC", - "; }>; }> | undefined; handler: ({}: ", + "; }>, ", + "PartialC", + "<{ name: ", + "StringC", + "; }>]>>; response: ", + "StringC", + "; }>, ", + "PartialC", + "<{ feedbackAction: ", + "UnionC", + "<[", + "LiteralC", + "<\"thumbsup\">, ", + "LiteralC", + "<\"thumbsdown\">]>; }>]>; }> | undefined; handler: ({}: ", { "pluginId": "observability", "scope": "server", @@ -7665,7 +7778,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - " & { params: { body: { library: string; functionName: string; }; }; }) => Promise; } & ", + " & { params: { path: { promptId: string; }; body: { responseTime: number; messages: ({ role: \"user\" | \"system\" | \"assistant\"; content: string; } & { name?: string | undefined; })[]; response: string; } & { feedbackAction?: \"thumbsup\" | \"thumbsdown\" | undefined; }; }; }) => Promise; } & ", { "pluginId": "observability", "scope": "server", @@ -7673,7 +7786,7 @@ "section": "def-server.ObservabilityRouteCreateOptions", "text": "ObservabilityRouteCreateOptions" }, - "; \"POST /internal/observability/copilot/prompts/profilingExplainFunction\": { endpoint: \"POST /internal/observability/copilot/prompts/profilingExplainFunction\"; params?: ", + "; \"POST /internal/observability/copilot/prompts/profilingOptimizeFunction\": { endpoint: \"POST /internal/observability/copilot/prompts/profilingOptimizeFunction\"; params?: ", "TypeC", "<{ body: ", "TypeC", @@ -9468,7 +9581,7 @@ "label": "ObservabilityConfig", "description": [], "signature": [ - "{ readonly aiAssistant?: Readonly<{} & { enabled: boolean; provider: Readonly<{} & { openAI: Readonly<{} & { apiKey: string; model: string; }>; }> | Readonly<{} & { azureOpenAI: Readonly<{} & { apiKey: string; resourceName: string; deploymentId: string; }>; }>; }> | undefined; readonly enabled: boolean; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly thresholdRule: Readonly<{} & { groupByPageSize: number; }>; readonly compositeSlo: Readonly<{} & { enabled: boolean; }>; }" + "{ readonly aiAssistant?: Readonly<{} & { enabled: boolean; feedback: Readonly<{} & { enabled: boolean; url: string; }>; provider: Readonly<{} & { openAI: Readonly<{} & { apiKey: string; model: string; }>; }> | Readonly<{} & { azureOpenAI: Readonly<{} & { apiKey: string; resourceName: string; deploymentId: string; }>; }>; }> | undefined; readonly enabled: boolean; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly thresholdRule: Readonly<{} & { groupByPageSize: number; }>; readonly compositeSlo: Readonly<{} & { enabled: boolean; }>; }" ], "path": "x-pack/plugins/observability/server/index.ts", "deprecated": false, @@ -9483,15 +9596,49 @@ "label": "ObservabilityServerRouteRepository", "description": [], "signature": [ - "{ \"POST /internal/observability/copilot/prompts/profilingOptimizeFunction\": { endpoint: \"POST /internal/observability/copilot/prompts/profilingOptimizeFunction\"; params?: ", + "{ \"POST /internal/observability/copilot/prompts/{promptId}/track\": { endpoint: \"POST /internal/observability/copilot/prompts/{promptId}/track\"; params?: ", "TypeC", - "<{ body: ", + "<{ path: ", "TypeC", - "<{ library: ", + "<{ promptId: ", "StringC", - "; functionName: ", + "; }>; body: ", + "IntersectionC", + "<[", + "TypeC", + "<{ responseTime: ", + "NumberC", + "; messages: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ role: ", + "UnionC", + "<[", + "LiteralC", + "<\"system\">, ", + "LiteralC", + "<\"user\">, ", + "LiteralC", + "<\"assistant\">]>; content: ", "StringC", - "; }>; }> | undefined; handler: ({}: ", + "; }>, ", + "PartialC", + "<{ name: ", + "StringC", + "; }>]>>; response: ", + "StringC", + "; }>, ", + "PartialC", + "<{ feedbackAction: ", + "UnionC", + "<[", + "LiteralC", + "<\"thumbsup\">, ", + "LiteralC", + "<\"thumbsdown\">]>; }>]>; }> | undefined; handler: ({}: ", { "pluginId": "observability", "scope": "server", @@ -9499,7 +9646,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - " & { params: { body: { library: string; functionName: string; }; }; }) => Promise; } & ", + " & { params: { path: { promptId: string; }; body: { responseTime: number; messages: ({ role: \"user\" | \"system\" | \"assistant\"; content: string; } & { name?: string | undefined; })[]; response: string; } & { feedbackAction?: \"thumbsup\" | \"thumbsdown\" | undefined; }; }; }) => Promise; } & ", { "pluginId": "observability", "scope": "server", @@ -9507,7 +9654,7 @@ "section": "def-server.ObservabilityRouteCreateOptions", "text": "ObservabilityRouteCreateOptions" }, - "; \"POST /internal/observability/copilot/prompts/profilingExplainFunction\": { endpoint: \"POST /internal/observability/copilot/prompts/profilingExplainFunction\"; params?: ", + "; \"POST /internal/observability/copilot/prompts/profilingOptimizeFunction\": { endpoint: \"POST /internal/observability/copilot/prompts/profilingOptimizeFunction\"; params?: ", "TypeC", "<{ body: ", "TypeC", @@ -14273,6 +14420,117 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "observability", + "id": "def-common.loadCoPilotPrompts", + "type": "Function", + "tags": [], + "label": "loadCoPilotPrompts", + "description": [], + "signature": [ + "() => Promise<{ profilingOptimizeFunction: { params: ", + "TypeC", + "<{ library: ", + "StringC", + "; functionName: ", + "StringC", + "; }>; messages: (params: { library: string; functionName: string; }) => ", + "ChatCompletionRequestMessage", + "[]; }; apmExplainError: { params: ", + "IntersectionC", + "<[", + "TypeC", + "<{ serviceName: ", + "StringC", + "; languageName: ", + "StringC", + "; runtimeName: ", + "StringC", + "; runtimeVersion: ", + "StringC", + "; transactionName: ", + "StringC", + "; logStacktrace: ", + "StringC", + "; exceptionStacktrace: ", + "StringC", + "; }>, ", + "PartialC", + "<{ spanName: ", + "StringC", + "; }>]>; messages: (params: { serviceName: string; languageName: string; runtimeName: string; runtimeVersion: string; transactionName: string; logStacktrace: string; exceptionStacktrace: string; } & { spanName?: string | undefined; }) => ", + "ChatCompletionRequestMessage", + "[]; }; logsExplainMessage: { params: ", + "TypeC", + "<{ logEntry: ", + "TypeC", + "<{ fields: ", + "ArrayC", + "<", + "TypeC", + "<{ field: ", + "StringC", + "; value: ", + "ArrayC", + "<", + "AnyC", + ">; }>>; }>; }>; messages: (params: { logEntry: { fields: { field: string; value: any[]; }[]; }; }) => ", + "ChatCompletionRequestMessage", + "[]; }; logsFindSimilar: { params: ", + "TypeC", + "<{ logEntry: ", + "TypeC", + "<{ fields: ", + "ArrayC", + "<", + "TypeC", + "<{ field: ", + "StringC", + "; value: ", + "ArrayC", + "<", + "AnyC", + ">; }>>; }>; }>; messages: (params: { logEntry: { fields: { field: string; value: any[]; }[]; }; }) => ", + "ChatCompletionRequestMessage", + "[]; }; infraExplainProcess: { params: ", + "TypeC", + "<{ command: ", + "StringC", + "; }>; messages: (params: { command: string; }) => ", + "ChatCompletionRequestMessage", + "[]; }; explainLogSpike: { params: ", + "TypeC", + "<{ significantFieldValues: ", + "ArrayC", + "<", + "TypeC", + "<{ field: ", + "StringC", + "; value: ", + "UnionC", + "<[", + "StringC", + ", ", + "NumberC", + "]>; docCount: ", + "NumberC", + "; pValue: ", + "UnionC", + "<[", + "NumberC", + ", ", + "NullC", + "]>; }>>; }>; messages: (params: { significantFieldValues: { field: string; value: string | number; docCount: number; pValue: number | null; }[]; }) => ", + "ChatCompletionRequestMessage", + "[]; }; }>" + ], + "path": "x-pack/plugins/observability/common/co_pilot/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [ @@ -14395,7 +14653,7 @@ "tags": [], "label": "CoPilotPromptId", "description": [], - "path": "x-pack/plugins/observability/common/co_pilot.ts", + "path": "x-pack/plugins/observability/common/co_pilot/index.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -14911,6 +15169,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observability", + "id": "def-common.sloEditLocatorID", + "type": "string", + "tags": [], + "label": "sloEditLocatorID", + "description": [], + "signature": [ + "\"SLO_EDIT_LOCATOR\"" + ], + "path": "x-pack/plugins/observability/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observability", "id": "def-common.sloFeatureId", @@ -15200,221 +15473,6 @@ "initialIsOpen": false } ], - "objects": [ - { - "parentPluginId": "observability", - "id": "def-common.coPilotPrompts", - "type": "Object", - "tags": [], - "label": "coPilotPrompts", - "description": [], - "path": "x-pack/plugins/observability/common/co_pilot.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "observability", - "id": "def-common.coPilotPrompts.CoPilotPromptId.ProfilingOptimizeFunction", - "type": "Object", - "tags": [], - "label": "[CoPilotPromptId.ProfilingOptimizeFunction]", - "description": [], - "signature": [ - "{ params: ", - "TypeC", - "<{ library: ", - "StringC", - "; functionName: ", - "StringC", - "; }>; messages: (params: { library: string; functionName: string; }) => ", - "ChatCompletionRequestMessage", - "[]; }" - ], - "path": "x-pack/plugins/observability/common/co_pilot.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observability", - "id": "def-common.coPilotPrompts.CoPilotPromptId.ProfilingExplainFunction", - "type": "Object", - "tags": [], - "label": "[CoPilotPromptId.ProfilingExplainFunction]", - "description": [], - "signature": [ - "{ params: ", - "TypeC", - "<{ library: ", - "StringC", - "; functionName: ", - "StringC", - "; }>; messages: (params: { library: string; functionName: string; }) => ", - "ChatCompletionRequestMessage", - "[]; }" - ], - "path": "x-pack/plugins/observability/common/co_pilot.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observability", - "id": "def-common.coPilotPrompts.CoPilotPromptId.ApmExplainError", - "type": "Object", - "tags": [], - "label": "[CoPilotPromptId.ApmExplainError]", - "description": [], - "signature": [ - "{ params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ serviceName: ", - "StringC", - "; languageName: ", - "StringC", - "; runtimeName: ", - "StringC", - "; runtimeVersion: ", - "StringC", - "; transactionName: ", - "StringC", - "; logStacktrace: ", - "StringC", - "; exceptionStacktrace: ", - "StringC", - "; }>, ", - "PartialC", - "<{ spanName: ", - "StringC", - "; }>]>; messages: (params: { serviceName: string; languageName: string; runtimeName: string; runtimeVersion: string; transactionName: string; logStacktrace: string; exceptionStacktrace: string; } & { spanName?: string | undefined; }) => ", - "ChatCompletionRequestMessage", - "[]; }" - ], - "path": "x-pack/plugins/observability/common/co_pilot.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observability", - "id": "def-common.coPilotPrompts.CoPilotPromptId.LogsExplainMessage", - "type": "Object", - "tags": [], - "label": "[CoPilotPromptId.LogsExplainMessage]", - "description": [], - "signature": [ - "{ params: ", - "TypeC", - "<{ logEntry: ", - "TypeC", - "<{ fields: ", - "ArrayC", - "<", - "TypeC", - "<{ field: ", - "StringC", - "; value: ", - "ArrayC", - "<", - "AnyC", - ">; }>>; }>; }>; messages: (params: { logEntry: { fields: { field: string; value: any[]; }[]; }; }) => ", - "ChatCompletionRequestMessage", - "[]; }" - ], - "path": "x-pack/plugins/observability/common/co_pilot.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observability", - "id": "def-common.coPilotPrompts.CoPilotPromptId.LogsFindSimilar", - "type": "Object", - "tags": [], - "label": "[CoPilotPromptId.LogsFindSimilar]", - "description": [], - "signature": [ - "{ params: ", - "TypeC", - "<{ logEntry: ", - "TypeC", - "<{ fields: ", - "ArrayC", - "<", - "TypeC", - "<{ field: ", - "StringC", - "; value: ", - "ArrayC", - "<", - "AnyC", - ">; }>>; }>; }>; messages: (params: { logEntry: { fields: { field: string; value: any[]; }[]; }; }) => ", - "ChatCompletionRequestMessage", - "[]; }" - ], - "path": "x-pack/plugins/observability/common/co_pilot.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observability", - "id": "def-common.coPilotPrompts.CoPilotPromptId.InfraExplainProcess", - "type": "Object", - "tags": [], - "label": "[CoPilotPromptId.InfraExplainProcess]", - "description": [], - "signature": [ - "{ params: ", - "TypeC", - "<{ command: ", - "StringC", - "; }>; messages: (params: { command: string; }) => ", - "ChatCompletionRequestMessage", - "[]; }" - ], - "path": "x-pack/plugins/observability/common/co_pilot.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observability", - "id": "def-common.coPilotPrompts.CoPilotPromptId.ExplainLogSpike", - "type": "Object", - "tags": [], - "label": "[CoPilotPromptId.ExplainLogSpike]", - "description": [], - "signature": [ - "{ params: ", - "TypeC", - "<{ significantFieldValues: ", - "ArrayC", - "<", - "TypeC", - "<{ field: ", - "StringC", - "; value: ", - "UnionC", - "<[", - "StringC", - ", ", - "NumberC", - "]>; docCount: ", - "NumberC", - "; pValue: ", - "UnionC", - "<[", - "NumberC", - ", ", - "NullC", - "]>; }>>; }>; messages: (params: { significantFieldValues: { field: string; value: string | number; docCount: number; pValue: number | null; }[]; }) => ", - "ChatCompletionRequestMessage", - "[]; }" - ], - "path": "x-pack/plugins/observability/common/co_pilot.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - } - ] + "objects": [] } } \ No newline at end of file diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index fbc3508958587..f76c3118e482a 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/actionable-observability](https://github.com/orgs/elastic/team | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 526 | 45 | 518 | 18 | +| 523 | 45 | 515 | 19 | ## Client @@ -62,9 +62,6 @@ Contact [@elastic/actionable-observability](https://github.com/orgs/elastic/team ## Common -### Objects - - ### Functions diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index c78f74d6c882f..990ec4a27e661 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.devdocs.json b/api_docs/observability_shared.devdocs.json index 7b6ff8c06ed1c..2a32f416393dd 100644 --- a/api_docs/observability_shared.devdocs.json +++ b/api_docs/observability_shared.devdocs.json @@ -921,6 +921,39 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "observabilityShared", + "id": "def-public.TechnicalPreviewBadge", + "type": "Function", + "tags": [], + "label": "TechnicalPreviewBadge", + "description": [], + "signature": [ + "({ icon = 'beaker', size, style }: Props) => JSX.Element" + ], + "path": "x-pack/plugins/observability_shared/public/components/technical_preview_badge/technical_preview_badge.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityShared", + "id": "def-public.TechnicalPreviewBadge.$1", + "type": "CompoundType", + "tags": [], + "label": "{ icon = 'beaker', size, style }", + "description": [], + "signature": [ + "Props" + ], + "path": "x-pack/plugins/observability_shared/public/components/technical_preview_badge/technical_preview_badge.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-public.useBreadcrumbs", diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 2ce1737186d28..4d1731e7bd057 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 266 | 1 | 265 | 11 | +| 268 | 1 | 267 | 11 | ## Client diff --git a/api_docs/osquery.devdocs.json b/api_docs/osquery.devdocs.json index 9b6da7eb49e58..d3d03ad153894 100644 --- a/api_docs/osquery.devdocs.json +++ b/api_docs/osquery.devdocs.json @@ -134,7 +134,7 @@ "LiveQueryQueryFieldProps", " & { formMethods: ", "UseFormReturn", - "<{ label: string; query: string; ecs_mapping: Record; }, any>; }) => JSX.Element) | undefined" + "<{ label: string; query: string; ecs_mapping: Record; }, any, undefined>; }) => JSX.Element) | undefined" ], "path": "x-pack/plugins/osquery/public/types.ts", "deprecated": false, diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index dd616dc2663f3..23e8f17609ec5 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-12 +date: 2023-07-13 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 98e72930d470c..2087fa4505c69 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 71406 | 554 | 61219 | 1452 | +| 71411 | 554 | 61222 | 1455 | ## Plugin Directory @@ -70,7 +70,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 548 | 11 | 444 | 4 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 14 | 0 | 14 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 51 | 0 | 44 | 0 | -| | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | Adds dashboards for discovering and managing Enterprise Search products. | 9 | 0 | 9 | 0 | +| | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | Adds dashboards for discovering and managing Enterprise Search products. | 10 | 0 | 10 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 115 | 3 | 111 | 3 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | The Event Annotation service contains expressions for event annotations | 236 | 30 | 236 | 4 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 116 | 0 | 116 | 11 | @@ -94,7 +94,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 62 | 0 | 62 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 239 | 0 | 24 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 2 | 1 | 2 | 0 | -| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1178 | 3 | 1062 | 38 | +| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1179 | 3 | 1063 | 39 | | ftrApis | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 68 | 0 | 14 | 5 | | globalSearchBar | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | @@ -132,9 +132,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 34 | 0 | 34 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 | -| | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 526 | 45 | 518 | 18 | +| | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 523 | 45 | 515 | 19 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 7 | 0 | 7 | 0 | -| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 266 | 1 | 265 | 11 | +| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 268 | 1 | 267 | 11 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 24 | 0 | 24 | 7 | | painlessLab | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 218 | 8 | 164 | 11 | @@ -154,7 +154,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 32 | 0 | 13 | 0 | | | [@elastic/kibana-reporting-services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Kibana Screenshotting Plugin | 27 | 0 | 8 | 5 | | searchprofiler | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | -| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 283 | 0 | 94 | 1 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 287 | 0 | 96 | 2 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 176 | 2 | 132 | 30 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | ESS customizations for Security Solution. | 6 | 0 | 6 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Serverless customizations for security. | 6 | 0 | 6 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 306d81a66c57c..49f0c03deeef3 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-12 +date: 2023-07-13 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 10bf8465201bc..c8405b2fe7624 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-12 +date: 2023-07-13 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 8fc007f26d583..061a36c113752 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-12 +date: 2023-07-13 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 708ac22b536eb..dddc7f18da556 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-12 +date: 2023-07-13 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 6b9e8c088933c..16234f5dcfed5 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-12 +date: 2023-07-13 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 55aaf7fb49561..0a3db73eafdf9 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-12 +date: 2023-07-13 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 b2e08dbfc5ae8..61515ec3d047e 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-12 +date: 2023-07-13 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 bf5d42ca09b5a..2342963090b61 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-12 +date: 2023-07-13 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 a415a7115c42f..03793085a0211 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-12 +date: 2023-07-13 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 8ee7adf6c6294..4f598934611c0 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-12 +date: 2023-07-13 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 1cd3c19ccf1a0..223c08a8743e6 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-12 +date: 2023-07-13 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 0e0cbc78e84a7..e6407d095fc21 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-12 +date: 2023-07-13 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 2d1d73970d0aa..d1897434ad5c0 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-12 +date: 2023-07-13 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 dc3a6d2e7062f..ac1c308212638 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-12 +date: 2023-07-13 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 9ce5e1a764c9a..5032c2b053104 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-12 +date: 2023-07-13 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 3336908f92a4b..4b818560f503b 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.devdocs.json b/api_docs/security.devdocs.json index 2637d8ad0cf48..7dc64bd48e25f 100644 --- a/api_docs/security.devdocs.json +++ b/api_docs/security.devdocs.json @@ -799,6 +799,22 @@ "path": "x-pack/plugins/security/public/nav_control/nav_control_component.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "security", + "id": "def-public.UserMenuLink.content", + "type": "CompoundType", + "tags": [], + "label": "content", + "description": [ + "Render a custom ReactNode instead of the default " + ], + "signature": [ + "boolean | React.ReactChild | React.ReactFragment | React.ReactPortal | null | undefined" + ], + "path": "x-pack/plugins/security/public/nav_control/nav_control_component.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -983,6 +999,42 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "security", + "id": "def-public.UpdateUserProfileHook", + "type": "Type", + "tags": [], + "label": "UpdateUserProfileHook", + "description": [], + "signature": [ + "(props?: Props | undefined) => { update: (data: ", + "UserProfileData", + ") => void; showSuccessNotification: (props: { isRefreshRequired: boolean; }) => void; isLoading: boolean; userProfileData?: ", + "UserProfileData", + " | null | undefined; }" + ], + "path": "x-pack/plugins/security/public/account_management/user_profile/use_update_user_profile.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "security", + "id": "def-public.UpdateUserProfileHook.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "Props | undefined" + ], + "path": "x-pack/plugins/security/public/account_management/user_profile/use_update_user_profile.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false } ], "objects": [], @@ -1110,14 +1162,10 @@ "\nA set of methods to work with Kibana user profiles." ], "signature": [ - "{ suggest: (data: D) => Promise; suggest: (path: string, params: ", { "pluginId": "security", @@ -1135,13 +1183,7 @@ "text": "UserProfile" }, "[]>; bulkGet: (params: ", { "pluginId": "security", @@ -1159,13 +1201,7 @@ "text": "UserProfile" }, "[]>; getCurrent: (params?: ", { "pluginId": "security", @@ -1182,7 +1218,35 @@ "section": "def-common.GetUserProfileResponse", "text": "GetUserProfileResponse" }, - ">; }" + ">; readonly userProfile$: ", + "Observable", + "<", + "UserProfileData", + " | null>; }" + ], + "path": "x-pack/plugins/security/public/plugin.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "security", + "id": "def-public.SecurityPluginStart.hooks", + "type": "Object", + "tags": [], + "label": "hooks", + "description": [ + "\nA set of hooks to work with Kibana user profiles" + ], + "signature": [ + "{ useUpdateUserProfile: ", + { + "pluginId": "security", + "scope": "public", + "docId": "kibSecurityPluginApi", + "section": "def-public.UpdateUserProfileHook", + "text": "UpdateUserProfileHook" + }, + "; }" ], "path": "x-pack/plugins/security/public/plugin.tsx", "deprecated": false, diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 93c3c34ab3f3a..3c50b8d179486 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 283 | 0 | 94 | 1 | +| 287 | 0 | 96 | 2 | ## Client diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 12c96b0489eb1..77d36124df657 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-12 +date: 2023-07-13 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 4b075c96b93cb..1b7fce653f9f7 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-12 +date: 2023-07-13 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 c0bd2276b506b..c9337918d58a6 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-12 +date: 2023-07-13 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 3857f83fd5316..d40fc8030bf48 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-12 +date: 2023-07-13 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 2325827a0fde5..d82d3853bce7e 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-12 +date: 2023-07-13 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 acdbb7fafc901..a12f9ba939189 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-12 +date: 2023-07-13 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 01bb14d46455d..b6ca98f304703 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-12 +date: 2023-07-13 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 6fa1e15cdece0..fb892b7ebdfc9 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-12 +date: 2023-07-13 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 80b510f41a538..42591a87924c2 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-12 +date: 2023-07-13 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 31ca31cdf0b20..2c94c5d9f6563 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-12 +date: 2023-07-13 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 e943e0ef99c01..c213ec844b5c6 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-12 +date: 2023-07-13 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 185c1e9e6751f..8c57463b3e055 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-12 +date: 2023-07-13 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 1926397632e90..061c24ef96aab 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-12 +date: 2023-07-13 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 ae3107d151d7b..3f2282a2ffdfb 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-12 +date: 2023-07-13 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 2850f28186151..49e31055ef1a5 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-12 +date: 2023-07-13 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 fb60260dcb0f9..2b84aa0283f5c 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-12 +date: 2023-07-13 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 21619a7e4f452..fb01126495d91 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-12 +date: 2023-07-13 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 6d1497a9e8467..bcadda5438b28 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-12 +date: 2023-07-13 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 add2781d01761..12787cbd4c58d 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-12 +date: 2023-07-13 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 5914d96331826..973b24abe99c0 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-12 +date: 2023-07-13 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 4c89c62e6ea5d..e4c4abf691016 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-12 +date: 2023-07-13 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 0a369a01c2498..1792595ad4f40 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-12 +date: 2023-07-13 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 2d8318890a7b2..dce96e9772ddd 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-12 +date: 2023-07-13 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 ea028e5eeada3..17921994ae1bb 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-12 +date: 2023-07-13 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 6a7ff22ae4abb..9e5b5727e1bf2 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-12 +date: 2023-07-13 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 9231e118ab54c..3e9167cd28b7f 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-12 +date: 2023-07-13 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 953b50622412e..8017ee0e95482 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-12 +date: 2023-07-13 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 d8e713cc228e5..8b100c53b3ff9 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-12 +date: 2023-07-13 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 e53c2069d942a..dedf029870088 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-12 +date: 2023-07-13 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 8f82b0dc42e40..2e99c7ee0c07d 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-12 +date: 2023-07-13 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 80f9a0ec49405..c0c55190c4e05 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-12 +date: 2023-07-13 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 120b8cc82afb2..cbfcac5112433 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-12 +date: 2023-07-13 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 2102f45d75182..df168319a6c13 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-12 +date: 2023-07-13 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 5fe96186f9f78..73460fcfec095 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-12 +date: 2023-07-13 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 562d6530b7256..386fa54ce0052 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-12 +date: 2023-07-13 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 125994d58e028..ab870cd028706 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-12 +date: 2023-07-13 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 53fa9cca7b44e..e023f80fd1104 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-12 +date: 2023-07-13 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 e2a3e5465f526..19138351e80eb 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-12 +date: 2023-07-13 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 65693b98df616..c7fb5de6aa6f0 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-12 +date: 2023-07-13 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 a7b12e70a4b31..3680e6bab24c7 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualization_ui_components.mdx b/api_docs/visualization_ui_components.mdx index f9d8116aa5a56..ec276480b309e 100644 --- a/api_docs/visualization_ui_components.mdx +++ b/api_docs/visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizationUiComponents title: "visualizationUiComponents" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizationUiComponents plugin -date: 2023-07-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizationUiComponents'] --- import visualizationUiComponentsObj from './visualization_ui_components.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 435359ae605d9..12793958e55cc 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-12 +date: 2023-07-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 7c333cdc33fe974292c463bec94c3fa75630c31a Mon Sep 17 00:00:00 2001 From: Ignacio Rivas Date: Thu, 13 Jul 2023 07:27:13 +0200 Subject: [PATCH 15/50] [Index Management] Disable certain actions for serverless (#161528) --- config/serverless.yml | 3 ++ .../test_suites/core_plugins/rendering.ts | 1 + .../home/indices_tab.test.ts | 8 +++-- .../__jest__/components/index_table.test.js | 31 +++++++++++++++++-- .../public/application/app_context.tsx | 3 +- .../application/mount_management_section.ts | 4 ++- .../index_actions_context_menu.js | 12 ++++--- .../plugins/index_management/public/plugin.ts | 4 ++- .../plugins/index_management/public/types.ts | 1 + .../plugins/index_management/server/config.ts | 2 ++ 10 files changed, 58 insertions(+), 11 deletions(-) diff --git a/config/serverless.yml b/config/serverless.yml index 5f03bbb6de504..ea2d93a5d3c48 100644 --- a/config/serverless.yml +++ b/config/serverless.yml @@ -36,6 +36,9 @@ xpack.remote_clusters.enabled: false xpack.snapshot_restore.enabled: false xpack.license_management.enabled: false +# Disable index management actions from the UI +xpack.index_management.enableIndexActions: false + # Keep deeplinks visible so that they are shown in the sidenav dev_tools.deeplinks.navLinkStatus: visible management.deeplinks.navLinkStatus: visible diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index 7a3b22d62712c..d9f6a4764319b 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -232,6 +232,7 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.graph.savePolicy (alternatives)', 'xpack.ilm.ui.enabled (boolean)', 'xpack.index_management.ui.enabled (boolean)', + 'xpack.index_management.enableIndexActions (boolean)', 'xpack.infra.sources.default.fields.message (array)', /** * xpack.infra.logs is conditional and will resolve to an object of properties diff --git a/x-pack/plugins/index_management/__jest__/client_integration/home/indices_tab.test.ts b/x-pack/plugins/index_management/__jest__/client_integration/home/indices_tab.test.ts index d5eb4eb1fed7a..8b2b1d6568253 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/home/indices_tab.test.ts +++ b/x-pack/plugins/index_management/__jest__/client_integration/home/indices_tab.test.ts @@ -225,7 +225,9 @@ describe('', () => { ]); httpRequestsMockHelpers.setReloadIndicesResponse({ indexNames: [indexNameA, indexNameB] }); - testBed = await setup(httpSetup); + testBed = await setup(httpSetup, { + enableIndexActions: true, + }); const { component, find } = testBed; component.update(); @@ -268,7 +270,9 @@ describe('', () => { }); test('should be able to open a closed index', async () => { - testBed = await setup(httpSetup); + testBed = await setup(httpSetup, { + enableIndexActions: true, + }); const { component, find, actions } = testBed; component.update(); diff --git a/x-pack/plugins/index_management/__jest__/components/index_table.test.js b/x-pack/plugins/index_management/__jest__/components/index_table.test.js index c751402d3c711..ad704311dd210 100644 --- a/x-pack/plugins/index_management/__jest__/components/index_table.test.js +++ b/x-pack/plugins/index_management/__jest__/components/index_table.test.js @@ -144,7 +144,7 @@ const getActionMenuButtons = (rendered) => { describe('index table', () => { const { httpSetup, httpRequestsMockHelpers } = initHttpRequests(); - beforeEach(() => { + const setupMockComponent = (dependenciesOverride) => { // Mock initialization of services const services = { extensionsService: new ExtensionsService(), @@ -168,12 +168,13 @@ describe('index table', () => { }, plugins: {}, url: urlServiceMock, + enableIndexActions: true, }; component = ( - + @@ -181,6 +182,11 @@ describe('index table', () => { ); store.dispatch(loadIndicesSuccess({ indices })); + }; + + beforeEach(() => { + // Mock initialization of services + setupMockComponent(); httpRequestsMockHelpers.setLoadIndicesResponse(indices); httpRequestsMockHelpers.setReloadIndicesResponse(indices); @@ -506,4 +512,25 @@ describe('index table', () => { rendered.update(); testEditor(rendered, 'editIndexMenuButton'); }); + + describe('Common index actions', () => { + beforeEach(() => { + // Mock initialization of services + setupMockComponent({ enableIndexActions: false }); + }); + + test('Common index actions should be hidden when feature is turned off', async () => { + const rendered = mountWithIntl(component); + await runAllPromises(); + rendered.update(); + + expect(findTestSubject(rendered, 'showStatsIndexMenuButton').length).toBe(0); + expect(findTestSubject(rendered, 'closeIndexMenuButton').length).toBe(0); + expect(findTestSubject(rendered, 'forcemergeIndexMenuButton').length).toBe(0); + expect(findTestSubject(rendered, 'refreshIndexMenuButton').length).toBe(0); + expect(findTestSubject(rendered, 'clearCacheIndexMenuButton').length).toBe(0); + expect(findTestSubject(rendered, 'flushIndexMenuButton').length).toBe(0); + expect(findTestSubject(rendered, 'unfreezeIndexMenuButton').length).toBe(0); + }); + }); }); diff --git a/x-pack/plugins/index_management/public/application/app_context.tsx b/x-pack/plugins/index_management/public/application/app_context.tsx index 968f432900faa..9acbda3f9685f 100644 --- a/x-pack/plugins/index_management/public/application/app_context.tsx +++ b/x-pack/plugins/index_management/public/application/app_context.tsx @@ -25,7 +25,7 @@ import type { SettingsStart } from '@kbn/core-ui-settings-browser'; import { ExtensionsService } from '../services'; import { UiMetricService, NotificationService, HttpService } from './services'; -const AppContext = createContext(undefined); +export const AppContext = createContext(undefined); export interface AppDependencies { core: { @@ -52,6 +52,7 @@ export interface AppDependencies { docLinks: DocLinksStart; kibanaVersion: SemVer; theme$: Observable; + enableIndexActions: boolean; } export const AppContextProvider = ({ diff --git a/x-pack/plugins/index_management/public/application/mount_management_section.ts b/x-pack/plugins/index_management/public/application/mount_management_section.ts index 1690afb504a5c..d00aa6ff1f0e6 100644 --- a/x-pack/plugins/index_management/public/application/mount_management_section.ts +++ b/x-pack/plugins/index_management/public/application/mount_management_section.ts @@ -52,7 +52,8 @@ export async function mountManagementSection( params: ManagementAppMountParams, extensionsService: ExtensionsService, isFleetEnabled: boolean, - kibanaVersion: SemVer + kibanaVersion: SemVer, + enableIndexActions: boolean ) { const { element, setBreadcrumbs, history, theme$ } = params; const [core, startDependencies] = await coreSetup.getStartServices(); @@ -94,6 +95,7 @@ export async function mountManagementSection( uiMetricService, extensionsService, }, + enableIndexActions, history, setBreadcrumbs, uiSettings, diff --git a/x-pack/plugins/index_management/public/application/sections/home/index_list/index_actions_context_menu/index_actions_context_menu.js b/x-pack/plugins/index_management/public/application/sections/home/index_list/index_actions_context_menu/index_actions_context_menu.js index 54d1752734e01..4188797431e5d 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/index_list/index_actions_context_menu/index_actions_context_menu.js +++ b/x-pack/plugins/index_management/public/application/sections/home/index_list/index_actions_context_menu/index_actions_context_menu.js @@ -25,9 +25,11 @@ import { import { flattenPanelTree } from '../../../../lib/flatten_panel_tree'; import { INDEX_OPEN } from '../../../../../../common/constants'; -import { AppContextConsumer } from '../../../../app_context'; +import { AppContextConsumer, AppContext } from '../../../../app_context'; export class IndexActionsContextMenu extends Component { + static contextType = AppContext; + constructor(props) { super(props); @@ -47,6 +49,8 @@ export class IndexActionsContextMenu extends Component { this.setState({ isActionConfirmed }); }; panels({ services: { extensionsService }, core: { getUrlForApp } }) { + const { enableIndexActions } = this.context; + const { closeIndices, openIndices, @@ -94,7 +98,7 @@ export class IndexActionsContextMenu extends Component { this.closePopoverAndExecute(showMapping); }, }); - if (allOpen) { + if (allOpen && enableIndexActions) { items.push({ 'data-test-subj': 'showStatsIndexMenuButton', name: i18n.translate('xpack.idxMgmt.indexActionsMenu.showIndexStatsLabel', { @@ -118,7 +122,7 @@ export class IndexActionsContextMenu extends Component { }, }); } - if (allOpen) { + if (allOpen && enableIndexActions) { items.push({ 'data-test-subj': 'closeIndexMenuButton', name: i18n.translate('xpack.idxMgmt.indexActionsMenu.closeIndexLabel', { @@ -187,7 +191,7 @@ export class IndexActionsContextMenu extends Component { }, }); } - } else { + } else if (!allOpen && enableIndexActions) { items.push({ 'data-test-subj': 'openIndexMenuButton', name: i18n.translate('xpack.idxMgmt.indexActionsMenu.openIndexLabel', { diff --git a/x-pack/plugins/index_management/public/plugin.ts b/x-pack/plugins/index_management/public/plugin.ts index a63ee693aa19f..fc965a061e0bf 100644 --- a/x-pack/plugins/index_management/public/plugin.ts +++ b/x-pack/plugins/index_management/public/plugin.ts @@ -38,6 +38,7 @@ export class IndexMgmtUIPlugin { ): IndexManagementPluginSetup { const { ui: { enabled: isIndexManagementUiEnabled }, + enableIndexActions, } = this.ctx.config.get(); if (isIndexManagementUiEnabled) { @@ -55,7 +56,8 @@ export class IndexMgmtUIPlugin { params, this.extensionsService, Boolean(fleet), - kibanaVersion + kibanaVersion, + enableIndexActions ); }, }); diff --git a/x-pack/plugins/index_management/public/types.ts b/x-pack/plugins/index_management/public/types.ts index 57c7e11b6262b..59954c6659494 100644 --- a/x-pack/plugins/index_management/public/types.ts +++ b/x-pack/plugins/index_management/public/types.ts @@ -28,4 +28,5 @@ export interface ClientConfigType { ui: { enabled: boolean; }; + enableIndexActions: boolean; } diff --git a/x-pack/plugins/index_management/server/config.ts b/x-pack/plugins/index_management/server/config.ts index 157d6d3da8737..4fd24bf3fcdf7 100644 --- a/x-pack/plugins/index_management/server/config.ts +++ b/x-pack/plugins/index_management/server/config.ts @@ -22,6 +22,7 @@ const schemaLatest = schema.object( ui: schema.object({ enabled: schema.boolean({ defaultValue: true }), }), + enableIndexActions: schema.boolean({ defaultValue: true }), }, { defaultValue: undefined } ); @@ -29,6 +30,7 @@ const schemaLatest = schema.object( const configLatest: PluginConfigDescriptor = { exposeToBrowser: { ui: true, + enableIndexActions: true, }, schema: schemaLatest, deprecations: () => [], From ac4635417f92373b924eb360a264869d69f35950 Mon Sep 17 00:00:00 2001 From: Maryam Saeidi Date: Thu, 13 Jul 2023 09:26:50 +0200 Subject: [PATCH 16/50] [AO] Fix showing temporary data view in the list of data views for the new threshold rule (#161462) Closes #159774, closes #159778, closes #159779, closes #159776 ## Summary This PR fixes the data view list in the new metric threshold. Also, it adds an API integration test to check the reference in the rule saved object. Also, this PR improves the error handling and loading of the data view, similar to what we have for elasticsearch rule data view. |Threshold rule error|Elasticsearch query error| |---|---| |![image](https://github.com/elastic/kibana/assets/12370520/ae5ff9bb-8bcc-46d2-8b84-42f7128f18e1)|![image](https://github.com/elastic/kibana/assets/12370520/1f65ff6b-18f3-4a4d-941b-cafe35c4d145)| ## How to test - Make sure `xpack.observability.unsafe.thresholdRule.enabled` is set to true in kibana yml config Error handling - Throw an error [here](https://github.com/elastic/kibana/pull/161462/files#diff-4f65f6debaf6457d4b0400a27c1ea57ba52bfe4426ee40460d43a857c5bd165eL98) and make sure the message is shown correctly in the rule. Temporary data view - Create a temporary data view - Check the list of data views and make sure the new temporary one is added to the list |Adding a new temporary data view|Temporary data view in the list| |---|---| |![image](https://github.com/elastic/kibana/assets/12370520/5f0866b6-34ad-4072-9a84-48e0760072d6)|![image](https://github.com/elastic/kibana/assets/12370520/9109308e-88d4-49f7-98b1-19f635804c48)| --- ...tsx => threshold_rule_expression.test.tsx} | 56 ++++++-- ...sion.tsx => threshold_rule_expression.tsx} | 52 +++++-- .../observability/public/plugin.mock.tsx | 4 +- .../register_observability_rule_types.ts | 2 +- .../observability/index.ts | 1 + .../observability/threshold_rule.ts | 6 - .../observability/threshold_rule_data_view.ts | 136 ++++++++++++++++++ 7 files changed, 228 insertions(+), 29 deletions(-) rename x-pack/plugins/observability/public/components/threshold/{components/expression.test.tsx => threshold_rule_expression.test.tsx} (64%) rename x-pack/plugins/observability/public/components/threshold/{components/expression.tsx => threshold_rule_expression.tsx} (94%) create mode 100644 x-pack/test/alerting_api_integration/observability/threshold_rule_data_view.ts diff --git a/x-pack/plugins/observability/public/components/threshold/components/expression.test.tsx b/x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.test.tsx similarity index 64% rename from x-pack/plugins/observability/public/components/threshold/components/expression.test.tsx rename to x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.test.tsx index 692ffc9539ab2..6de8d9efde686 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/expression.test.tsx +++ b/x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.test.tsx @@ -5,18 +5,18 @@ * 2.0. */ -import { useKibana } from '../../../utils/kibana_react'; -import { kibanaStartMock } from '../../../utils/kibana_react.mock'; -import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; import React from 'react'; import { act } from 'react-dom/test-utils'; - -import Expressions from './expression'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; -import { MetricsExplorerMetric } from '../../../../common/threshold_rule/metrics_explorer'; -import { Comparator } from '../../../../common/threshold_rule/types'; +import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; + +import { Comparator } from '../../../common/threshold_rule/types'; +import { MetricsExplorerMetric } from '../../../common/threshold_rule/metrics_explorer'; +import { useKibana } from '../../utils/kibana_react'; +import { kibanaStartMock } from '../../utils/kibana_react.mock'; +import Expressions from './threshold_rule_expression'; -jest.mock('../../../utils/kibana_react'); +jest.mock('../../utils/kibana_react'); const useKibanaMock = useKibana as jest.Mock; @@ -106,4 +106,44 @@ describe('Expression', () => { }, ]); }); + + it('should show the error message', async () => { + const currentOptions = { + groupBy: 'host.hostname', + filterQuery: 'foo', + metrics: [ + { aggregation: 'avg', field: 'system.load.1' }, + { aggregation: 'cardinality', field: 'system.cpu.user.pct' }, + ] as MetricsExplorerMetric[], + }; + const errorMessage = 'Error in searchSource create'; + const kibanaMock = kibanaStartMock.startContract(); + useKibanaMock.mockReturnValue({ + ...kibanaMock, + services: { + ...kibanaMock.services, + data: { + dataViews: { + create: jest.fn(), + }, + query: { + timefilter: { + timefilter: jest.fn(), + }, + }, + search: { + searchSource: { + create: jest.fn(() => { + throw new Error(errorMessage); + }), + }, + }, + }, + }, + }); + const { wrapper } = await setup(currentOptions); + expect(wrapper.find(`[data-test-subj="thresholdRuleExpressionError"]`).first().text()).toBe( + errorMessage + ); + }); }); diff --git a/x-pack/plugins/observability/public/components/threshold/components/expression.tsx b/x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx similarity index 94% rename from x-pack/plugins/observability/public/components/threshold/components/expression.tsx rename to x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx index 703b30fe64519..50deb2ad0fb92 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/expression.tsx +++ b/x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx @@ -6,14 +6,18 @@ */ import React, { ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react'; +import { debounce } from 'lodash'; import { EuiAccordion, EuiButtonEmpty, + EuiCallOut, EuiCheckbox, + EuiEmptyPrompt, EuiFieldSearch, EuiFormRow, EuiIcon, EuiLink, + EuiLoadingSpinner, EuiPanel, EuiSpacer, EuiText, @@ -25,23 +29,24 @@ import { DataViewBase } from '@kbn/es-query'; import { DataViewSelectPopover } from '@kbn/stack-alerts-plugin/public'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { debounce } from 'lodash'; import { ForLastExpression, IErrorObject, RuleTypeParams, RuleTypeParamsExpressionProps, } from '@kbn/triggers-actions-ui-plugin/public'; -import { useKibana } from '../../../utils/kibana_react'; -import { Aggregators, Comparator, QUERY_INVALID } from '../../../../common/threshold_rule/types'; -import { TimeUnitChar } from '../../../../common/utils/formatters/duration'; -import { AlertContextMeta, AlertParams, MetricExpression } from '../types'; -import { ExpressionChart } from './expression_chart'; -import { ExpressionRow } from './expression_row'; -import { MetricsExplorerKueryBar } from './kuery_bar'; -import { MetricsExplorerOptions } from '../hooks/use_metrics_explorer_options'; -import { convertKueryToElasticSearchQuery } from '../helpers/kuery'; -import { MetricsExplorerGroupBy } from './group_by'; + +import { useKibana } from '../../utils/kibana_react'; +import { Aggregators, Comparator, QUERY_INVALID } from '../../../common/threshold_rule/types'; +import { TimeUnitChar } from '../../../common/utils/formatters/duration'; +import { AlertContextMeta, AlertParams, MetricExpression } from './types'; +import { ExpressionChart } from './components/expression_chart'; +import { ExpressionRow } from './components/expression_row'; +import { MetricsExplorerKueryBar } from './components/kuery_bar'; +import { MetricsExplorerGroupBy } from './components/group_by'; +import { MetricsExplorerOptions } from './hooks/use_metrics_explorer_options'; +import { convertKueryToElasticSearchQuery } from './helpers/kuery'; + const FILTER_TYPING_DEBOUNCE_MS = 500; type Props = Omit< @@ -66,6 +71,7 @@ export default function Expressions(props: Props) { const [timeUnit, setTimeUnit] = useState('m'); const [dataView, setDataView] = useState(); const [searchSource, setSearchSource] = useState(); + const [paramsError, setParamsError] = useState(); const derivedIndexPattern = useMemo( () => ({ fields: dataView?.fields || [], @@ -97,8 +103,7 @@ export default function Expressions(props: Props) { setSearchSource(createdSearchSource); setDataView(createdSearchSource.getField('index')); } catch (error) { - // TODO Handle error - console.log('error:', error); + setParamsError(error); } }; @@ -335,11 +340,32 @@ export default function Expressions(props: Props) { .filter((g) => typeof g === 'string') as string[]; }, [ruleParams, groupByFilterTestPatterns]); + if (paramsError) { + return ( + <> + +

{paramsError.message}

+
+ + + ); + } + + if (!searchSource) { + return ( + <> + } /> + + + ); + } + return ( <> { onChangeMetaData({ ...metadata, adHocDataViewList }); diff --git a/x-pack/plugins/observability/public/plugin.mock.tsx b/x-pack/plugins/observability/public/plugin.mock.tsx index aa847fd198cf4..bfd5eb973004e 100644 --- a/x-pack/plugins/observability/public/plugin.mock.tsx +++ b/x-pack/plugins/observability/public/plugin.mock.tsx @@ -72,7 +72,9 @@ const data = { }, }, search: { - searchSource: jest.fn(), + searchSource: { + create: jest.fn(), + }, }, }; }, diff --git a/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts b/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts index 8e28412050920..8fade4abf38f4 100644 --- a/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts +++ b/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts @@ -93,7 +93,7 @@ export const registerObservabilityRuleTypes = ( documentationUrl(docLinks) { return `${docLinks.links.observability.threshold}`; }, - ruleParamsExpression: lazy(() => import('../components/threshold/components/expression')), + ruleParamsExpression: lazy(() => import('../components/threshold/threshold_rule_expression')), validate: validateMetricThreshold, defaultActionMessage: i18n.translate( 'xpack.observability.threshold.rule.alerting.threshold.defaultActionMessage', diff --git a/x-pack/test/alerting_api_integration/observability/index.ts b/x-pack/test/alerting_api_integration/observability/index.ts index a5f284cbffeda..c3fb33202ce9e 100644 --- a/x-pack/test/alerting_api_integration/observability/index.ts +++ b/x-pack/test/alerting_api_integration/observability/index.ts @@ -11,6 +11,7 @@ export default function ({ loadTestFile }: any) { describe('MetricsUI Endpoints', () => { loadTestFile(require.resolve('./metric_threshold_rule')); loadTestFile(require.resolve('./threshold_rule')); + loadTestFile(require.resolve('./threshold_rule_data_view')); }); describe('Synthetics', () => { diff --git a/x-pack/test/alerting_api_integration/observability/threshold_rule.ts b/x-pack/test/alerting_api_integration/observability/threshold_rule.ts index ab1907f951745..0d2ac7556147e 100644 --- a/x-pack/test/alerting_api_integration/observability/threshold_rule.ts +++ b/x-pack/test/alerting_api_integration/observability/threshold_rule.ts @@ -4,12 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ import moment from 'moment'; import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace'; diff --git a/x-pack/test/alerting_api_integration/observability/threshold_rule_data_view.ts b/x-pack/test/alerting_api_integration/observability/threshold_rule_data_view.ts new file mode 100644 index 0000000000000..ba846751ef7b4 --- /dev/null +++ b/x-pack/test/alerting_api_integration/observability/threshold_rule_data_view.ts @@ -0,0 +1,136 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { Aggregators, Comparator } from '@kbn/observability-plugin/common/threshold_rule/types'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; + +import { FtrProviderContext } from '../common/ftr_provider_context'; +import { getUrlPrefix, ObjectRemover } from '../common/lib'; +import { createRule } from './helpers/alerting_api_helper'; +import { createDataView, deleteDataView } from './helpers/data_view'; + +// eslint-disable-next-line import/no-default-export +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const objectRemover = new ObjectRemover(supertest); + const es = getService('es'); + + describe('Threshold rule data view >', () => { + const DATA_VIEW_ID = 'data-view-id'; + + let ruleId: string; + + const searchRule = () => + es.search<{ references: unknown; alert: { params: any } }>({ + index: '.kibana*', + query: { + bool: { + filter: [ + { + term: { + _id: `alert:${ruleId}`, + }, + }, + ], + }, + }, + fields: ['alert.params', 'references'], + }); + + before(async () => { + await createDataView({ + supertest, + name: 'test-data-view', + id: DATA_VIEW_ID, + title: 'random-index*', + }); + }); + + after(async () => { + objectRemover.removeAll(); + await deleteDataView({ + supertest, + id: DATA_VIEW_ID, + }); + }); + + describe('save data view in rule correctly', () => { + it('create a threshold rule', async () => { + const createdRule = await createRule({ + supertest, + tags: ['observability'], + consumer: 'alerts', + name: 'Threshold rule', + ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + params: { + criteria: [ + { + aggType: Aggregators.CUSTOM, + comparator: Comparator.GT, + threshold: [7500000], + timeSize: 5, + timeUnit: 'm', + customMetrics: [ + { name: 'A', field: 'span.self_time.sum.us', aggType: Aggregators.AVERAGE }, + ], + }, + ], + alertOnNoData: true, + alertOnGroupDisappear: true, + searchConfiguration: { + query: { + query: '', + language: 'kuery', + }, + index: DATA_VIEW_ID, + }, + }, + actions: [], + }); + ruleId = createdRule.id; + expect(ruleId).not.to.be(undefined); + }); + + it('should have correct data view reference before and after edit', async () => { + const { + hits: { hits: alertHitsV1 }, + } = await searchRule(); + + await supertest + .post(`${getUrlPrefix('default')}/internal/alerting/rules/_bulk_edit`) + .set('kbn-xsrf', 'foo') + .send({ + ids: [ruleId], + operations: [{ operation: 'set', field: 'apiKey' }], + }) + .expect(200); + objectRemover.add('default', ruleId, 'rule', 'alerting'); + + const { + hits: { hits: alertHitsV2 }, + } = await searchRule(); + + expect(alertHitsV1[0]?._source?.references).to.eql([ + { + name: 'param:kibanaSavedObjectMeta.searchSourceJSON.index', + type: 'index-pattern', + id: 'data-view-id', + }, + ]); + expect(alertHitsV1[0]?._source?.alert?.params?.searchConfiguration).to.eql({ + query: { query: '', language: 'kuery' }, + indexRefName: 'kibanaSavedObjectMeta.searchSourceJSON.index', + }); + expect(alertHitsV1[0].fields).to.eql(alertHitsV2[0].fields); + expect(alertHitsV1[0]?._source?.references ?? true).to.eql( + alertHitsV2[0]?._source?.references ?? false + ); + }); + }); + }); +} From 88d45238f92c8aa32a7e85296793df89bc689e57 Mon Sep 17 00:00:00 2001 From: Jill Guyonnet Date: Thu, 13 Jul 2023 09:58:01 +0200 Subject: [PATCH 17/50] [Fleet] Fix GET /package_policies schema (#161774) ## Summary Followup fix to https://github.com/elastic/kibana/pull/160921/files. In the above PR, I had flagged the following issue: ![Screenshot 2023-07-12 at 16 46 01](https://github.com/elastic/kibana/assets/23701614/a9065c86-eae4-43ce-bf4a-f1c9786076b5) As it turns out, this was due to inadvertently removing the `ListWithKuerySchema` from the schema definition for `GET /package_policies`, which escaped code review. This PR fixes that. ### Checklist - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../plugins/fleet/server/types/rest_spec/package_policy.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/fleet/server/types/rest_spec/package_policy.ts b/x-pack/plugins/fleet/server/types/rest_spec/package_policy.ts index c64f4db8a70d4..1538f380fb7b4 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/package_policy.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/package_policy.ts @@ -15,13 +15,10 @@ import { import { inputsFormat } from '../../../common/constants'; -import { BulkRequestBodySchema } from './common'; +import { ListWithKuerySchema, BulkRequestBodySchema } from './common'; export const GetPackagePoliciesRequestSchema = { - query: schema.object({ - page: schema.number({ defaultValue: 1 }), - perPage: schema.number({ defaultValue: 20 }), - kuery: schema.maybe(schema.string()), + query: ListWithKuerySchema.extends({ format: schema.maybe( schema.oneOf([schema.literal(inputsFormat.Simplified), schema.literal(inputsFormat.Legacy)]) ), From 99aa6ab6ab7a20f1132456c8cface7f947ddecf1 Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Thu, 13 Jul 2023 11:57:13 +0300 Subject: [PATCH 18/50] [Textbased] Refactor flyout state management (#161256) ## Summary This PR doesn't introduce a new feature to the users. It is mostly a refactoring for the edit flyout. This change will make it easier to make the flyout work with the formBased charts as it uses the exact same functions as the mounter (Lens editor) ### Checklist - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../layout/hooks/use_lens_suggestions.ts | 2 +- .../get_edit_lens_configuration.tsx | 12 ++- .../lens_configuration_flyout.test.tsx | 21 +----- .../lens_configuration_flyout.tsx | 74 ++++++------------- .../datasources/text_based/datapanel.tsx | 2 +- .../text_based/text_based_languages.tsx | 9 +-- .../public/datasources/text_based/types.ts | 2 +- .../config_panel/config_panel.tsx | 31 +++++++- .../lens/public/embeddable/embeddable.tsx | 31 ++++++-- .../lens/public/state_management/index.ts | 1 - .../init_middleware/load_initial.ts | 10 +-- .../state_management/lens_slice.test.ts | 23 ------ .../public/state_management/lens_slice.ts | 52 +------------ .../apps/discover/visualize_field.ts | 1 + 14 files changed, 108 insertions(+), 163 deletions(-) diff --git a/src/plugins/unified_histogram/public/layout/hooks/use_lens_suggestions.ts b/src/plugins/unified_histogram/public/layout/hooks/use_lens_suggestions.ts index a8a90faa18a9a..fffadcc9bc619 100644 --- a/src/plugins/unified_histogram/public/layout/hooks/use_lens_suggestions.ts +++ b/src/plugins/unified_histogram/public/layout/hooks/use_lens_suggestions.ts @@ -69,7 +69,7 @@ export const useLensSuggestions = ({ return { allSuggestions, currentSuggestion, - suggestionUnsupported: !dataView.isTimeBased(), + suggestionUnsupported: !currentSuggestion && !dataView.isTimeBased(), }; }; diff --git a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/get_edit_lens_configuration.tsx b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/get_edit_lens_configuration.tsx index 65ad607a91da5..e95f83438294d 100644 --- a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/get_edit_lens_configuration.tsx +++ b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/get_edit_lens_configuration.tsx @@ -18,9 +18,10 @@ import { LensRootStore, LensAppState, LensState, + loadInitial, } from '../../../state_management'; import { getPreloadedState } from '../../../state_management/lens_slice'; - +import { generateId } from '../../../id_generator'; import type { DatasourceMap, VisualizationMap } from '../../../types'; import { LensEditConfigurationFlyout, @@ -55,6 +56,7 @@ export function getEditLensConfiguration( wrapInFlyout, datasourceId, adaptersTables, + panelId, }: EditLensConfigurationProps) => { const [lensServices, setLensServices] = useState(); useEffect(() => { @@ -89,6 +91,14 @@ export function getEditLensConfiguration( const lensStore: LensRootStore = makeConfigureStore(storeDeps, { lens: getPreloadedState(storeDeps) as LensAppState, } as unknown as PreloadedState); + lensStore.dispatch( + loadInitial({ + initialInput: { + attributes, + id: panelId ?? generateId(), + }, + }) + ); const getWrapper = (children: JSX.Element) => { if (wrapInFlyout) { diff --git a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.test.tsx b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.test.tsx index f1a2ba0630993..24c8ced2a7e5f 100644 --- a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.test.tsx +++ b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.test.tsx @@ -148,12 +148,7 @@ describe('LensEditConfigurationFlyout', () => { "activeData": Object {}, "dataViews": Object { "indexPatternRefs": Array [], - "indexPatterns": Object { - "index1": Object { - "id": "index1", - "isPersisted": [Function], - }, - }, + "indexPatterns": Object {}, }, "datasourceLayers": Object { "a": Object { @@ -207,12 +202,7 @@ describe('LensEditConfigurationFlyout', () => { "activeData": Object {}, "dataViews": Object { "indexPatternRefs": Array [], - "indexPatterns": Object { - "index1": Object { - "id": "index1", - "isPersisted": [Function], - }, - }, + "indexPatterns": Object {}, }, "datasourceLayers": Object { "a": Object { @@ -257,12 +247,7 @@ describe('LensEditConfigurationFlyout', () => { "activeData": Object {}, "dataViews": Object { "indexPatternRefs": Array [], - "indexPatterns": Object { - "index1": Object { - "id": "index1", - "isPersisted": [Function], - }, - }, + "indexPatterns": Object {}, }, "datasourceLayers": Object { "a": Object { diff --git a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx index 98add346d114d..24b84f7665c5a 100644 --- a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx +++ b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx @@ -22,16 +22,11 @@ import { css } from '@emotion/react'; import type { CoreStart } from '@kbn/core/public'; import type { Datatable } from '@kbn/expressions-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; -import { getResolvedDateRange } from '../../../utils'; import type { LensPluginStartDependencies } from '../../../plugin'; -import { - DataViewsState, - useLensDispatch, - updateStateFromSuggestion, -} from '../../../state_management'; +import { useLensSelector, selectFramePublicAPI } from '../../../state_management'; import { VisualizationToolbar } from '../../../editor_frame_service/editor_frame/workspace_panel'; -import type { DatasourceMap, VisualizationMap, DatasourceLayers } from '../../../types'; +import type { DatasourceMap, VisualizationMap } from '../../../types'; import type { TypedLensByValueInput } from '../../../embeddable/embeddable_component'; import { ConfigPanelWrapper } from '../../../editor_frame_service/editor_frame/config_panel/config_panel'; @@ -45,6 +40,7 @@ export interface EditConfigPanelProps { datasourceMap: DatasourceMap; closeFlyout?: () => void; wrapInFlyout?: boolean; + panelId?: string; datasourceId: 'formBased' | 'textBased'; adaptersTables?: Record; } @@ -61,57 +57,33 @@ export function LensEditConfigurationFlyout({ closeFlyout, adaptersTables, }: EditConfigPanelProps) { - const currentDataViewId = dataView.id ?? ''; const datasourceState = attributes.state.datasourceStates[datasourceId]; const activeVisualization = visualizationMap[attributes.visualizationType]; const activeDatasource = datasourceMap[datasourceId]; - const dispatchLens = useLensDispatch(); const { euiTheme } = useEuiTheme(); - const dataViews = useMemo(() => { - return { - indexPatterns: { - [currentDataViewId]: dataView, - }, - indexPatternRefs: [], - } as unknown as DataViewsState; - }, [currentDataViewId, dataView]); - dispatchLens( - updateStateFromSuggestion({ - newDatasourceId: datasourceId, - visualizationId: activeVisualization.id, - visualizationState: attributes.state.visualization, - datasourceState, - dataViews, - }) - ); - const datasourceLayers: DatasourceLayers = useMemo(() => { - return {}; - }, []); const activeData: Record = useMemo(() => { return {}; }, []); const layers = activeDatasource.getLayers(datasourceState); layers.forEach((layer) => { - datasourceLayers[layer] = datasourceMap[datasourceId].getPublicAPI({ - state: datasourceState, - layerId: layer, - indexPatterns: dataViews.indexPatterns, - }); if (adaptersTables) { activeData[layer] = Object.values(adaptersTables)[0]; } }); - const dateRange = getResolvedDateRange(startDependencies.data.query.timefilter.timefilter); - const framePublicAPI = useMemo(() => { - return { - activeData, - dataViews, - datasourceLayers, - dateRange, + const framePublicAPI = useLensSelector((state) => { + const newState = { + ...state, + lens: { + ...state.lens, + activeData, + }, }; - }, [activeData, dataViews, datasourceLayers, dateRange]); + return selectFramePublicAPI(newState, datasourceMap); + }); + const { isLoading } = useLensSelector((state) => state.lens); + if (isLoading) return null; const layerPanelsProps = { framePublicAPI, @@ -120,7 +92,7 @@ export function LensEditConfigurationFlyout({ core: coreStart, dataViews: startDependencies.dataViews, uiActions: startDependencies.uiActions, - hideLayerHeader: true, + hideLayerHeader: datasourceId === 'textBased', onUpdateStateCb: updateAll, }; return ( @@ -135,13 +107,15 @@ export function LensEditConfigurationFlyout({ > - + {datasourceId === 'textBased' && ( + + )} ({ dataViewId: null, - allFields: dataHasLoaded ? fieldList : null, + allFields: dataHasLoaded ? fieldList ?? [] : null, services: { dataViews, core, diff --git a/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.tsx b/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.tsx index 831bb1501c8fc..a670846cc816d 100644 --- a/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.tsx +++ b/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.tsx @@ -225,7 +225,6 @@ export function getTextBasedDatasource({ const initState = state || { layers: {} }; return { ...initState, - fieldList: [], indexPatternRefs: refs, initialContext: context, }; @@ -407,7 +406,7 @@ export function getTextBasedDatasource({ (column) => column.columnId === props.columnId ); - const updatedFields = fields.map((f) => { + const updatedFields = fields?.map((f) => { return { ...f, compatible: props.isMetricDimension @@ -430,10 +429,10 @@ export function getTextBasedDatasource({ className="lnsIndexPatternDimensionEditor--padded" > { - const meta = fields.find((f) => f.name === choice.field)?.meta; + const meta = fields?.find((f) => f.name === choice.field)?.meta; const newColumn = { columnId: props.columnId, fieldName: choice.field, @@ -621,7 +620,7 @@ export function getTextBasedDatasource({ }; }, getDatasourceSuggestionsForField(state, draggedField) { - const field = state.fieldList.find((f) => f.id === (draggedField as TextBasedField).id); + const field = state.fieldList?.find((f) => f.id === (draggedField as TextBasedField).id); if (!field) return []; return Object.entries(state.layers)?.map(([id, layer]) => { const newId = generateId(); diff --git a/x-pack/plugins/lens/public/datasources/text_based/types.ts b/x-pack/plugins/lens/public/datasources/text_based/types.ts index 544996c904b77..8da183f9b9054 100644 --- a/x-pack/plugins/lens/public/datasources/text_based/types.ts +++ b/x-pack/plugins/lens/public/datasources/text_based/types.ts @@ -32,11 +32,11 @@ export interface TextBasedLayer { export interface TextBasedPersistedState { layers: Record; initialContext?: VisualizeFieldContext | VisualizeEditorContext; + fieldList?: DatatableColumn[]; } export type TextBasedPrivateState = TextBasedPersistedState & { indexPatternRefs: IndexPatternRef[]; - fieldList: DatatableColumn[]; }; export interface IndexPatternRef { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.tsx index 939cc191e3428..25568abab83c0 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.tsx @@ -89,14 +89,18 @@ export function LayerPanels( if (datasourceId) { dispatchLens( updateDatasourceState({ - updater: (prevState: unknown) => - typeof newState === 'function' ? newState(prevState) : newState, + updater: (prevState: unknown) => { + onUpdateStateCb?.( + typeof newState === 'function' ? newState(prevState) : newState, + visualization.state + ); + return typeof newState === 'function' ? newState(prevState) : newState; + }, datasourceId, clearStagedPreview: false, dontSyncLinkedDimensions, }) ); - onUpdateStateCb?.(newState, visualization.state); } }, [dispatchLens, onUpdateStateCb, visualization.state] @@ -136,6 +140,7 @@ export function LayerPanels( typeof newVisualizationState === 'function' ? newVisualizationState(prevState.visualization.state) : newVisualizationState; + onUpdateStateCb?.(updatedDatasourceState, updatedVisualizationState); return { ...prevState, @@ -154,7 +159,6 @@ export function LayerPanels( }, }) ); - onUpdateStateCb?.(newDatasourceState, newVisualizationState); }, 0); }, [dispatchLens, onUpdateStateCb] @@ -195,14 +199,24 @@ export function LayerPanels( layerIds, }) ); + if (activeDatasourceId && onUpdateStateCb) { + const newState = lensStore.getState().lens; + onUpdateStateCb( + newState.datasourceStates[activeDatasourceId].state, + newState.visualization.state + ); + } removeLayerRef(layerToRemoveId); }, [ + activeDatasourceId, activeVisualization.id, datasourceMap, datasourceStates, dispatchLens, layerIds, + lensStore, + onUpdateStateCb, props.framePublicAPI.datasourceLayers, props.uiActions, removeLayerRef, @@ -242,7 +256,16 @@ export function LayerPanels( const addLayer: AddLayerFunction = (layerType, extraArg, ignoreInitialValues) => { const layerId = generateId(); + dispatchLens(addLayerAction({ layerId, layerType, extraArg, ignoreInitialValues })); + + if (activeDatasourceId && onUpdateStateCb) { + const newState = lensStore.getState().lens; + onUpdateStateCb( + newState.datasourceStates[activeDatasourceId].state, + newState.visualization.state + ); + } setNextFocusedLayerId(layerId); }; diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.tsx index c690f875debf5..516617c2dc852 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.tsx @@ -120,6 +120,7 @@ import { getIndexPatternsObjects, getSearchWarningMessages, inferTimeField, + extractReferencesFromState, } from '../utils'; import { getLayerMetaInfo, combineQueryAndFilters } from '../app_plugin/show_underlying_data'; import { @@ -741,19 +742,37 @@ export class Embeddable async updateVisualization(datasourceState: unknown, visualizationState: unknown) { const viz = this.savedVis; - const datasourceId = (this.activeDatasourceId ?? + const activeDatasourceId = (this.activeDatasourceId ?? 'formBased') as EditLensConfigurationProps['datasourceId']; if (viz?.state) { + const datasourceStates = { + ...viz.state.datasourceStates, + [activeDatasourceId]: datasourceState, + }; + const references = extractReferencesFromState({ + activeDatasources: Object.keys(datasourceStates).reduce( + (acc, datasourceId) => ({ + ...acc, + [datasourceId]: this.deps.datasourceMap[datasourceId], + }), + {} + ), + datasourceStates: Object.fromEntries( + Object.entries(datasourceStates).map(([id, state]) => [id, { isLoading: false, state }]) + ), + visualizationState, + activeVisualization: this.activeVisualizationId + ? this.deps.visualizationMap[this.activeVisualizationId] + : undefined, + }); const attrs = { ...viz, state: { ...viz.state, visualization: visualizationState, - datasourceStates: { - ...viz.state.datasourceStates, - [datasourceId]: datasourceState, - }, + datasourceStates, }, + references, }; this.updateInput({ attributes: attrs }); } @@ -770,6 +789,7 @@ export class Embeddable const datasourceId = (this.activeDatasourceId ?? 'formBased') as EditLensConfigurationProps['datasourceId']; + const attributes = this.savedVis as TypedLensByValueInput['attributes']; const dataView = this.dataViews[0]; if (attributes) { @@ -780,6 +800,7 @@ export class Embeddable updateAll={this.updateVisualization.bind(this)} datasourceId={datasourceId} adaptersTables={this.lensInspector.adapters.tables?.tables} + panelId={this.id} /> ); } diff --git a/x-pack/plugins/lens/public/state_management/index.ts b/x-pack/plugins/lens/public/state_management/index.ts index f4b333e25c815..9a9a4005714aa 100644 --- a/x-pack/plugins/lens/public/state_management/index.ts +++ b/x-pack/plugins/lens/public/state_management/index.ts @@ -35,7 +35,6 @@ export const { submitSuggestion, switchDatasource, switchAndCleanDatasource, - updateStateFromSuggestion, updateIndexPatterns, setToggleFullscreen, initEmpty, diff --git a/x-pack/plugins/lens/public/state_management/init_middleware/load_initial.ts b/x-pack/plugins/lens/public/state_management/init_middleware/load_initial.ts index 45b05ebbb157a..59e022345c603 100644 --- a/x-pack/plugins/lens/public/state_management/init_middleware/load_initial.ts +++ b/x-pack/plugins/lens/public/state_management/init_middleware/load_initial.ts @@ -92,7 +92,7 @@ export function loadInitial( initialInput, history, }: { - redirectCallback: (savedObjectId?: string) => void; + redirectCallback?: (savedObjectId?: string) => void; initialInput?: LensEmbeddableInput; history?: History; }, @@ -269,7 +269,7 @@ export function loadInitial( notifications.toasts.addDanger({ title: e.message, }); - redirectCallback(); + redirectCallback?.(); }); } @@ -376,7 +376,7 @@ export function loadInitial( }) ); } else { - redirectCallback(); + redirectCallback?.(); } }, () => { @@ -385,13 +385,13 @@ export function loadInitial( isLoading: false, }) ); - redirectCallback(); + redirectCallback?.(); } ) .catch((e: { message: string }) => { notifications.toasts.addDanger({ title: e.message, }); - redirectCallback(); + redirectCallback?.(); }); } diff --git a/x-pack/plugins/lens/public/state_management/lens_slice.test.ts b/x-pack/plugins/lens/public/state_management/lens_slice.test.ts index 0371d5564d503..c69931837b3aa 100644 --- a/x-pack/plugins/lens/public/state_management/lens_slice.test.ts +++ b/x-pack/plugins/lens/public/state_management/lens_slice.test.ts @@ -10,7 +10,6 @@ import type { Query } from '@kbn/es-query'; import { switchDatasource, switchAndCleanDatasource, - updateStateFromSuggestion, switchVisualization, setState, updateState, @@ -272,28 +271,6 @@ describe('lensSlice', () => { }); }); - describe('update the state from the suggestion', () => { - it('should switch active datasource and initialize new state', () => { - store.dispatch( - updateStateFromSuggestion({ - newDatasourceId: 'testDatasource2', - visualizationId: 'testVis', - visualizationState: ['col1', 'col2'], - datasourceState: {}, - dataViews: { indexPatterns: {} } as DataViewsState, - }) - ); - expect(store.getState().lens.activeDatasourceId).toEqual('testDatasource2'); - expect(store.getState().lens.datasourceStates.testDatasource2.isLoading).toEqual(false); - expect(store.getState().lens.datasourceStates.testDatasource2.state).toStrictEqual({}); - expect(store.getState().lens.visualization).toStrictEqual({ - activeId: 'testVis', - state: ['col1', 'col2'], - }); - expect(store.getState().lens.dataViews).toEqual({ indexPatterns: {} }); - }); - }); - describe('adding or removing layer', () => { const testDatasource = (datasourceId: string) => { return { diff --git a/x-pack/plugins/lens/public/state_management/lens_slice.ts b/x-pack/plugins/lens/public/state_management/lens_slice.ts index 60d15f532d3d4..401bff694546a 100644 --- a/x-pack/plugins/lens/public/state_management/lens_slice.ts +++ b/x-pack/plugins/lens/public/state_management/lens_slice.ts @@ -187,18 +187,11 @@ export const switchAndCleanDatasource = createAction<{ visualizationId: string | null; currentIndexPatternId?: string; }>('lens/switchAndCleanDatasource'); -export const updateStateFromSuggestion = createAction<{ - newDatasourceId: string; - visualizationId: string | null; - visualizationState: unknown; - datasourceState: unknown; - dataViews: DataViewsState; -}>('lens/updateStateFromSuggestion'); export const navigateAway = createAction('lens/navigateAway'); export const loadInitial = createAction<{ initialInput?: LensEmbeddableInput; - redirectCallback: (savedObjectId?: string) => void; - history: History; + redirectCallback?: (savedObjectId?: string) => void; + history?: History; }>('lens/loadInitial'); export const initEmpty = createAction( 'initEmpty', @@ -288,7 +281,6 @@ export const lensActions = { submitSuggestion, switchDatasource, switchAndCleanDatasource, - updateStateFromSuggestion, navigateAway, loadInitial, initEmpty, @@ -870,49 +862,13 @@ export const makeLensReducer = (storeDeps: LensStoreDeps) => { }, }; }, - [updateStateFromSuggestion.type]: ( - state, - { - payload, - }: { - payload: { - newDatasourceId: string; - visualizationId: string; - visualizationState: unknown; - datasourceState: unknown; - dataViews: DataViewsState; - }; - } - ) => { - const visualization = { - activeId: payload.visualizationId, - state: payload.visualizationState, - }; - - const datasourceState = payload.datasourceState; - - return { - ...state, - datasourceStates: { - [payload.newDatasourceId]: { - state: datasourceState, - isLoading: false, - }, - }, - activeDatasourceId: payload.newDatasourceId, - visualization: { - ...visualization, - }, - dataViews: payload.dataViews, - }; - }, [navigateAway.type]: (state) => state, [loadInitial.type]: ( state, payload: PayloadAction<{ initialInput?: LensEmbeddableInput; - redirectCallback: (savedObjectId?: string) => void; - history: History; + redirectCallback?: (savedObjectId?: string) => void; + history?: History; }> ) => state, [initEmpty.type]: ( diff --git a/x-pack/test/functional/apps/discover/visualize_field.ts b/x-pack/test/functional/apps/discover/visualize_field.ts index 236ceaffa1b5d..32cd9b5360da0 100644 --- a/x-pack/test/functional/apps/discover/visualize_field.ts +++ b/x-pack/test/functional/apps/discover/visualize_field.ts @@ -171,6 +171,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.discover.chooseLensChart('Bar vertical stacked'); await PageObjects.header.waitUntilLoadingHasFinished(); + await testSubjects.click('TextBasedLangEditor-expand'); await testSubjects.click('unifiedHistogramEditFlyoutVisualization'); expect(await testSubjects.exists('xyVisChart')).to.be(true); expect(await PageObjects.lens.canRemoveDimension('lnsXY_xDimensionPanel')).to.equal(true); From 52c645f88633865ab4a20e9dcfed56f8e059ea34 Mon Sep 17 00:00:00 2001 From: Kerry Gallagher Date: Thu, 13 Jul 2023 09:59:44 +0100 Subject: [PATCH 19/50] [Logs+] Add title / icons to installed packages API (#161777) ## Summary Implements https://github.com/elastic/kibana/issues/160935. This PR adds the `title` and `icons` (also `description` since it was there) properties to the installed packages API, these are extracted from the matching manifest assets (so that we don't have to call the registry, and can query for multiple items at once). Discover has also been updated to use these new properties. List: Screenshot 2023-07-12 at 17 13 52 With selection: Screenshot 2023-07-12 at 17 14 10 I've made this robust against a matching manifest asset not being found - I don't think this is actually possible, but just incase. ## Testing - When accessing the log explorer profile within Discover pretty titles should be displayed in the dataset selector - When accessing the log explorer profile within Discover icons should be displayed in the dataset selector --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../common/datasets/models/dataset.ts | 8 +- .../common/datasets/models/integration.ts | 6 + .../common/datasets/types.ts | 29 +++- .../sub_components/datasets_popover.tsx | 1 + .../components/dataset_selector/utils.tsx | 8 +- .../fleet/common/types/rest_spec/epm.ts | 2 +- .../server/services/epm/packages/get.test.ts | 142 +++++++++++++----- .../fleet/server/services/epm/packages/get.ts | 61 +++++++- 8 files changed, 204 insertions(+), 53 deletions(-) diff --git a/x-pack/plugins/discover_log_explorer/common/datasets/models/dataset.ts b/x-pack/plugins/discover_log_explorer/common/datasets/models/dataset.ts index 38a6024de277c..9db74da31543f 100644 --- a/x-pack/plugins/discover_log_explorer/common/datasets/models/dataset.ts +++ b/x-pack/plugins/discover_log_explorer/common/datasets/models/dataset.ts @@ -10,7 +10,7 @@ import { DataViewSpec } from '@kbn/data-views-plugin/common'; import { IndexPattern } from '@kbn/io-ts-utils'; import { DatasetId, DatasetType, IntegrationType } from '../types'; -type IntegrationBase = Pick; +type IntegrationBase = Pick; interface DatasetDeps extends DatasetType { iconType?: IconType; } @@ -29,13 +29,15 @@ export class Dataset { this.title = dataset.title ?? dataset.name; this.parentIntegration = parentIntegration && { name: parentIntegration.name, + title: parentIntegration.title, + icons: parentIntegration.icons, version: parentIntegration.version, }; } getFullTitle(): string { - return this.parentIntegration?.name - ? `[${this.parentIntegration.name}] ${this.title}` + return this.parentIntegration?.title + ? `[${this.parentIntegration.title}] ${this.title}` : this.title; } diff --git a/x-pack/plugins/discover_log_explorer/common/datasets/models/integration.ts b/x-pack/plugins/discover_log_explorer/common/datasets/models/integration.ts index 764eeeb40b9a0..95411309d2cd2 100644 --- a/x-pack/plugins/discover_log_explorer/common/datasets/models/integration.ts +++ b/x-pack/plugins/discover_log_explorer/common/datasets/models/integration.ts @@ -11,6 +11,9 @@ import { IntegrationId, IntegrationType } from '../types'; export class Integration { id: IntegrationId; name: IntegrationType['name']; + title?: IntegrationType['title']; + description?: IntegrationType['description']; + icons?: IntegrationType['icons']; status: IntegrationType['status']; version: IntegrationType['version']; datasets: Dataset[]; @@ -18,6 +21,9 @@ export class Integration { private constructor(integration: Integration) { this.id = integration.id; this.name = integration.name; + this.title = integration.title ?? integration.name; + this.description = integration.description; + this.icons = integration.icons; this.status = integration.status; this.version = integration.version; this.datasets = integration.datasets; diff --git a/x-pack/plugins/discover_log_explorer/common/datasets/types.ts b/x-pack/plugins/discover_log_explorer/common/datasets/types.ts index a770aee308423..b15916a1162b1 100644 --- a/x-pack/plugins/discover_log_explorer/common/datasets/types.ts +++ b/x-pack/plugins/discover_log_explorer/common/datasets/types.ts @@ -25,12 +25,29 @@ const integrationStatusRT = rt.keyof({ install_failed: null, }); -export const integrationRT = rt.type({ - name: rt.string, - status: integrationStatusRT, - version: rt.string, - dataStreams: rt.array(datasetRT), -}); +export const integrationRT = rt.intersection([ + rt.type({ + name: rt.string, + status: integrationStatusRT, + version: rt.string, + dataStreams: rt.array(datasetRT), + }), + rt.partial({ + title: rt.union([rt.string, rt.undefined]), + icons: rt.union([ + rt.array( + rt.type({ + src: rt.string, + title: rt.string, + size: rt.string, + type: rt.string, + }) + ), + rt.undefined, + ]), + description: rt.union([rt.string, rt.undefined]), + }), +]); export type DatasetId = `dataset-${string}`; export type IntegrationId = `integration-${string}-${string}`; diff --git a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_popover.tsx b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_popover.tsx index 0ed65b4e50d8b..77e142d81b999 100644 --- a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_popover.tsx +++ b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/sub_components/datasets_popover.tsx @@ -60,6 +60,7 @@ export const DatasetsPopover = ({ diff --git a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/utils.tsx b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/utils.tsx index b135c0c22202b..b3e5822dfbbbd 100644 --- a/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/utils.tsx +++ b/x-pack/plugins/discover_log_explorer/public/components/dataset_selector/utils.tsx @@ -55,19 +55,19 @@ export const buildIntegrationsTree = ({ }: IntegrationsTreeParams) => { return integrations.reduce( (integrationsTree: IntegrationsTree, integration, pos) => { - const { name, version, datasets } = integration; + const { name, title, version, datasets, icons } = integration; const isLastIntegration = pos === integrations.length - 1; integrationsTree.items.push({ - name, - icon: , + name: title, + icon: , panel: integration.id, ...(isLastIntegration && { buttonRef: spyRef }), }); integrationsTree.panels.push({ id: integration.id, - title: name, + title, width: DATA_VIEW_POPOVER_CONTENT_WIDTH, items: datasets.map((dataset) => ({ name: dataset.title, diff --git a/x-pack/plugins/fleet/common/types/rest_spec/epm.ts b/x-pack/plugins/fleet/common/types/rest_spec/epm.ts index 5658dea03c826..fcec6fc0f8fa5 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/epm.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/epm.ts @@ -51,7 +51,7 @@ export interface GetPackagesResponse { response?: PackageList; } -interface InstalledPackage { +export interface InstalledPackage { name: string; version: string; status: EpmPackageInstallStatus; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/get.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/get.test.ts index 836be792db068..445bc6fca6719 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/get.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/get.test.ts @@ -10,7 +10,11 @@ import type { SavedObjectsClientContract, SavedObjectsFindResult } from '@kbn/co import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import { savedObjectsClientMock } from '@kbn/core/server/mocks'; -import { PACKAGES_SAVED_OBJECT_TYPE, PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '../../../../common'; +import { + ASSETS_SAVED_OBJECT_TYPE, + PACKAGES_SAVED_OBJECT_TYPE, + PACKAGE_POLICY_SAVED_OBJECT_TYPE, +} from '../../../../common'; import type { RegistryPackage } from '../../../../common/types'; import type { PackagePolicySOAttributes } from '../../../types'; @@ -435,24 +439,51 @@ owner: elastic`, it('Passes the correct parameters to the SavedObjects client', async () => { const soClient = savedObjectsClientMock.create(); - soClient.find.mockResolvedValue({ - saved_objects: [ - { - type: 'epm-packages', - id: 'elastic_agent', - attributes: { - es_index_patterns: { - apm_server_logs: 'logs-elastic_agent.apm_server-*', - apm_server_metrics: 'metrics-elastic_agent.apm_server-*', + soClient.find.mockImplementation(async (options) => { + if (options.type === PACKAGES_SAVED_OBJECT_TYPE) { + return { + total: 5, + saved_objects: [ + { + type: 'epm-packages', + id: 'elastic_agent', + attributes: { + es_index_patterns: { + apm_server_logs: 'logs-elastic_agent.apm_server-*', + apm_server_metrics: 'metrics-elastic_agent.apm_server-*', + }, + name: 'elastic_agent', + version: '1.7.0', + install_status: 'installed', + }, + references: [], + sort: ['elastic_agent'], }, - name: 'elastic_agent', - version: '1.7.0', - install_status: 'installed', - }, - references: [], - }, - ], - } as any); + ], + } as any; + } else if (options.type === ASSETS_SAVED_OBJECT_TYPE) { + return { + total: 5, + saved_objects: [ + { + type: 'epm-packages-assets', + id: '338b6f9e-e126-5f1e-abb9-afe017d4788b', + attributes: { + package_name: 'elastic_agent', + package_version: '1.8.0', + install_source: 'upload', + asset_path: 'elastic_agent-1.8.0/manifest.yml', + media_type: 'text/yaml; charset=utf-8', + data_utf8: + 'name: elastic_agent\ntitle: Elastic Agent\nversion: 1.8.0\ndescription: Collect logs and metrics from Elastic Agents.\ntype: integration\nformat_version: 1.0.0\nlicense: basic\ncategories: ["elastic_stack"]\nconditions:\n kibana.version: "^8.7.1"\nowner:\n github: elastic/elastic-agent\nicons:\n - src: /img/logo_elastic_agent.svg\n title: logo Elastic Agent\n size: 64x64\n type: image/svg+xml\nscreenshots:\n - src: /img/elastic_agent_overview.png\n title: Elastic Agent Overview\n size: 2560×1234\n type: image/png\n - src: /img/elastic_agent_metrics.png\n title: Elastic Agent Metrics\n size: 2560×1234\n type: image/png\n - src: /img/elastic_agent_info.png\n title: Elastic Agent Information\n size: 2560×1234\n type: image/png\n - src: /img/elastic_agent_integrations.png\n title: Elastic Agent Integrations\n size: 2560×1234\n type: image/png\n', + data_base64: '', + }, + references: [], + }, + ], + } as any; + } + }); await getInstalledPackages({ savedObjectsClient: soClient, @@ -550,26 +581,51 @@ owner: elastic`, it('Formats items correctly', async () => { const soClient = savedObjectsClientMock.create(); - soClient.find.mockResolvedValue({ - total: 5, - saved_objects: [ - { - type: 'epm-packages', - id: 'elastic_agent', - attributes: { - es_index_patterns: { - apm_server_logs: 'logs-elastic_agent.apm_server-*', - apm_server_metrics: 'metrics-elastic_agent.apm_server-*', + soClient.find.mockImplementation(async (options) => { + if (options.type === PACKAGES_SAVED_OBJECT_TYPE) { + return { + total: 5, + saved_objects: [ + { + type: 'epm-packages', + id: 'elastic_agent', + attributes: { + es_index_patterns: { + apm_server_logs: 'logs-elastic_agent.apm_server-*', + apm_server_metrics: 'metrics-elastic_agent.apm_server-*', + }, + name: 'elastic_agent', + version: '1.8.0', + install_status: 'installed', + }, + references: [], + sort: ['elastic_agent'], }, - name: 'elastic_agent', - version: '1.7.0', - install_status: 'installed', - }, - references: [], - sort: ['elastic_agent'], - }, - ], - } as any); + ], + } as any; + } else if (options.type === ASSETS_SAVED_OBJECT_TYPE) { + return { + total: 5, + saved_objects: [ + { + type: 'epm-packages-assets', + id: '338b6f9e-e126-5f1e-abb9-afe017d4788b', + attributes: { + package_name: 'elastic_agent', + package_version: '1.8.0', + install_source: 'upload', + asset_path: 'elastic_agent-1.8.0/manifest.yml', + media_type: 'text/yaml; charset=utf-8', + data_utf8: + 'name: elastic_agent\ntitle: Elastic Agent\nversion: 1.8.0\ndescription: Collect logs and metrics from Elastic Agents.\ntype: integration\nformat_version: 1.0.0\nlicense: basic\ncategories: ["elastic_stack"]\nconditions:\n kibana.version: "^8.7.1"\nowner:\n github: elastic/elastic-agent\nicons:\n - src: /img/logo_elastic_agent.svg\n title: logo Elastic Agent\n size: 64x64\n type: image/svg+xml\nscreenshots:\n - src: /img/elastic_agent_overview.png\n title: Elastic Agent Overview\n size: 2560×1234\n type: image/png\n - src: /img/elastic_agent_metrics.png\n title: Elastic Agent Metrics\n size: 2560×1234\n type: image/png\n - src: /img/elastic_agent_info.png\n title: Elastic Agent Information\n size: 2560×1234\n type: image/png\n - src: /img/elastic_agent_integrations.png\n title: Elastic Agent Integrations\n size: 2560×1234\n type: image/png\n', + data_base64: '', + }, + references: [], + }, + ], + } as any; + } + }); const results = await getInstalledPackages({ savedObjectsClient: soClient, @@ -586,7 +642,17 @@ owner: elastic`, dataStreams: [{ name: 'logs-elastic_agent.apm_server-*', title: 'apm_server_logs' }], name: 'elastic_agent', status: 'installed', - version: '1.7.0', + version: '1.8.0', + title: 'Elastic Agent', + description: 'Collect logs and metrics from Elastic Agents.', + icons: [ + { + size: '64x64', + src: '/img/logo_elastic_agent.svg', + title: 'logo Elastic Agent', + type: 'image/svg+xml', + }, + ], }, ], searchAfter: ['elastic_agent'], diff --git a/x-pack/plugins/fleet/server/services/epm/packages/get.ts b/x-pack/plugins/fleet/server/services/epm/packages/get.ts index 19bedd8ff842e..96113407222f6 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/get.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/get.ts @@ -4,6 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ + +import * as yaml from 'js-yaml'; import pMap from 'p-map'; import type { SavedObjectsClientContract, SavedObjectsFindOptions } from '@kbn/core/server'; import semverGte from 'semver/functions/gte'; @@ -18,6 +20,7 @@ import { buildNode as buildFunctionNode } from '@kbn/es-query/src/kuery/node_typ import { buildNode as buildWildcardNode } from '@kbn/es-query/src/kuery/node_types/wildcard'; import { + ASSETS_SAVED_OBJECT_TYPE, installationStatuses, PACKAGE_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT, @@ -28,6 +31,8 @@ import type { Installable, PackageDataStreamTypes, PackageList, + InstalledPackage, + PackageSpecManifest, } from '../../../../common/types'; import { PACKAGES_SAVED_OBJECT_TYPE } from '../../../constants'; import type { @@ -45,6 +50,7 @@ import { } from '../../../errors'; import { appContextService } from '../..'; import * as Registry from '../registry'; +import type { PackageAsset } from '../archive/storage'; import { getEsPackage } from '../archive/storage'; import { getArchivePackage } from '../archive'; import { normalizeKuery } from '../../saved_object'; @@ -189,8 +195,25 @@ export async function getInstalledPackages(options: GetInstalledPackagesOptions) }; }); + const integrationManifests = + integrations.length > 0 + ? await getInstalledPackageManifests(savedObjectsClient, integrations) + : new Map(); + + const integrationsWithManifestContent = integrations.map((integration) => { + const { name, version } = integration; + const integrationAsset = integrationManifests.get(`${name}-${version}/manifest.yml`); + + return { + ...integration, + title: integrationAsset?.title ?? undefined, + description: integrationAsset?.description ?? undefined, + icons: integrationAsset?.icons ?? undefined, + }; + }); + return { - items: integrations, + items: integrationsWithManifestContent, total: packageSavedObjects.total, searchAfter: packageSavedObjects.saved_objects.at(-1)?.sort, // Enable ability to use searchAfter in subsequent queries }; @@ -306,6 +329,42 @@ export async function getInstalledPackageSavedObjects( return result; } +export async function getInstalledPackageManifests( + savedObjectsClient: SavedObjectsClientContract, + installedPackages: InstalledPackage[] +) { + const pathFilters = installedPackages.map((installedPackage) => { + const { name, version } = installedPackage; + return nodeBuilder.is( + `${ASSETS_SAVED_OBJECT_TYPE}.attributes.asset_path`, + `${name}-${version}/manifest.yml` + ); + }); + + const result = await savedObjectsClient.find({ + type: ASSETS_SAVED_OBJECT_TYPE, + filter: nodeBuilder.or(pathFilters), + }); + + const parsedManifests = result.saved_objects.reduce>( + (acc, asset) => { + acc.set(asset.attributes.asset_path, yaml.load(asset.attributes.data_utf8)); + return acc; + }, + new Map() + ); + + for (const savedObject of result.saved_objects) { + auditLoggingService.writeCustomSoAuditLog({ + action: 'find', + id: savedObject.id, + savedObjectType: ASSETS_SAVED_OBJECT_TYPE, + }); + } + + return parsedManifests; +} + function getInstalledPackageSavedObjectDataStreams( indexPatterns: Record, dataStreamType?: string From 5b896758359f8efce35602c06a0ccfd3748fe39f Mon Sep 17 00:00:00 2001 From: Kerry Gallagher Date: Thu, 13 Jul 2023 10:00:58 +0100 Subject: [PATCH 20/50] [Logs+] API to create a basic integration (#160777) ## Summary Closes https://github.com/elastic/kibana/issues/159991 Fields that have been utilised to fulfil `basic` and `agent` fields can be easily amended if these are incorrect. Multiple datasets are supported, and these can contain more than one type. ## Testing A curl command similar to the following should allow you to hit the API (check the credentials etc): ``` curl -XPOST -u 'elastic:changeme' -H 'kbn-xsrf: something' -d '{ "integrationName": "web_custom_nginx", "datasets": [{"name": "access", "type": "logs"}, {"name": "error", "type": "metrics"}, {"name": "warning", "type":"logs"}] }' 'http://localhost:5601//api/fleet/epm/custom_integrations' ``` ## History / context - [Prototype learnings](https://github.com/elastic/kibana/issues/158552#issuecomment-1598685163) - [Prototype PR](https://github.com/elastic/kibana/pull/160003) ## Results / expectations API response (with installed assets): ![Screenshot 2023-07-05 at 16 56 33](https://github.com/elastic/kibana/assets/471693/fc4a0bab-7057-430a-8c03-18dd4ee17ab7) We see the custom integration in "installed integrations" (albeit with a verification warning): ![Screenshot 2023-07-05 at 16 57 14](https://github.com/elastic/kibana/assets/471693/0c9177d2-2871-490f-9b5c-f338e96484c4) We see the custom integration in Discover with the logs explorer profile: ![Screenshot 2023-07-05 at 16 58 20](https://github.com/elastic/kibana/assets/471693/30c556f2-9fcd-416e-8047-5976fc11ffa2) The assets are installed correctly: ![Screenshot 2023-07-05 at 16 59 06](https://github.com/elastic/kibana/assets/471693/abb82632-f619-4fc3-be93-dc6ce97abedd) ![Screenshot 2023-07-05 at 16 59 20](https://github.com/elastic/kibana/assets/471693/ca1c1da5-1e4b-422c-9edb-0f56e0ed3f98) ![Screenshot 2023-07-05 at 16 59 36](https://github.com/elastic/kibana/assets/471693/8bd60d7e-aebc-4833-b423-eba3336fb42c) --- x-pack/plugins/fleet/common/constants/epm.ts | 3 + .../plugins/fleet/common/constants/routes.ts | 1 + .../plugins/fleet/common/types/models/epm.ts | 2 +- .../fleet/server/routes/epm/handlers.ts | 40 +++ .../plugins/fleet/server/routes/epm/index.ts | 13 + .../custom_integrations/assets/cache.ts | 24 ++ .../assets/dataset/fields.ts | 292 ++++++++++++++++++ .../assets/dataset/index.ts | 10 + .../assets/dataset/ingest_pipeline.ts | 29 ++ .../assets/dataset/manifest.ts | 21 ++ .../assets/dataset/utils.ts | 27 ++ .../custom_integrations/assets/generate.ts | 63 ++++ .../custom_integrations/assets/index.ts | 10 + .../custom_integrations/assets/manifest.ts | 38 +++ .../packages/custom_integrations/constants.ts | 8 + .../epm/packages/custom_integrations/index.ts | 10 + .../epm/packages/custom_integrations/utils.ts | 18 ++ .../server/services/epm/packages/install.ts | 93 +++++- .../fleet/server/types/rest_spec/epm.ts | 19 ++ .../fleet_api_integration/apis/epm/index.js | 1 + .../apis/epm/install_custom.ts | 102 ++++++ 21 files changed, 821 insertions(+), 3 deletions(-) create mode 100644 x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/cache.ts create mode 100644 x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/fields.ts create mode 100644 x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/index.ts create mode 100644 x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/ingest_pipeline.ts create mode 100644 x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/manifest.ts create mode 100644 x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/utils.ts create mode 100644 x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/generate.ts create mode 100644 x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/index.ts create mode 100644 x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/manifest.ts create mode 100644 x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/constants.ts create mode 100644 x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/index.ts create mode 100644 x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/utils.ts create mode 100644 x-pack/test/fleet_api_integration/apis/epm/install_custom.ts diff --git a/x-pack/plugins/fleet/common/constants/epm.ts b/x-pack/plugins/fleet/common/constants/epm.ts index 4a0a055b5840f..52cb24271afa5 100644 --- a/x-pack/plugins/fleet/common/constants/epm.ts +++ b/x-pack/plugins/fleet/common/constants/epm.ts @@ -30,6 +30,9 @@ export const PACKAGE_TEMPLATE_SUFFIX = '@package'; export const USER_SETTINGS_TEMPLATE_SUFFIX = '@custom'; export const DATASET_VAR_NAME = 'data_stream.dataset'; + +export const CUSTOM_INTEGRATION_PACKAGE_SPEC_VERSION = '2.9.0'; + /* Package rules: | | autoUpdatePackages | diff --git a/x-pack/plugins/fleet/common/constants/routes.ts b/x-pack/plugins/fleet/common/constants/routes.ts index c14630284d2df..e40b9f8606fdb 100644 --- a/x-pack/plugins/fleet/common/constants/routes.ts +++ b/x-pack/plugins/fleet/common/constants/routes.ts @@ -34,6 +34,7 @@ export const EPM_API_ROUTES = { DATA_STREAMS_PATTERN: `${EPM_API_ROOT}/data_streams`, INSTALL_FROM_REGISTRY_PATTERN: EPM_PACKAGES_ONE, INSTALL_BY_UPLOAD_PATTERN: EPM_PACKAGES_MANY, + CUSTOM_INTEGRATIONS_PATTERN: `${EPM_API_ROOT}/custom_integrations`, DELETE_PATTERN: EPM_PACKAGES_ONE, FILEPATH_PATTERN: `${EPM_PACKAGES_ONE}/{filePath*}`, CATEGORIES_PATTERN: `${EPM_API_ROOT}/categories`, diff --git a/x-pack/plugins/fleet/common/types/models/epm.ts b/x-pack/plugins/fleet/common/types/models/epm.ts index dcff8ae3071e7..a5cef67810713 100644 --- a/x-pack/plugins/fleet/common/types/models/epm.ts +++ b/x-pack/plugins/fleet/common/types/models/epm.ts @@ -34,7 +34,7 @@ export interface DefaultPackagesInstallationError { } export type InstallType = 'reinstall' | 'reupdate' | 'rollback' | 'update' | 'install' | 'unknown'; -export type InstallSource = 'registry' | 'upload' | 'bundled'; +export type InstallSource = 'registry' | 'upload' | 'bundled' | 'custom'; export type EpmPackageInstallStatus = 'installed' | 'installing' | 'install_failed'; diff --git a/x-pack/plugins/fleet/server/routes/epm/handlers.ts b/x-pack/plugins/fleet/server/routes/epm/handlers.ts index b3add5d5e1408..a0b6999f0feb6 100644 --- a/x-pack/plugins/fleet/server/routes/epm/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/epm/handlers.ts @@ -52,6 +52,7 @@ import type { UpdatePackageRequestSchema, GetLimitedPackagesRequestSchema, GetBulkAssetsRequestSchema, + CreateCustomIntegrationRequestSchema, } from '../../types'; import { bulkInstallPackages, @@ -403,6 +404,45 @@ export const installPackageFromRegistryHandler: FleetRequestHandler< return await defaultFleetErrorHandler({ error: res.error, response }); } }; +export const createCustomIntegrationHandler: FleetRequestHandler< + undefined, + undefined, + TypeOf +> = async (context, request, response) => { + const coreContext = await context.core; + const fleetContext = await context.fleet; + const savedObjectsClient = fleetContext.internalSoClient; + const esClient = coreContext.elasticsearch.client.asInternalUser; + const user = (await appContextService.getSecurity()?.authc.getCurrentUser(request)) || undefined; + const kibanaVersion = appContextService.getKibanaVersion(); + const authorizationHeader = HTTPAuthorizationHeader.parseFromRequest(request, user?.username); + const spaceId = fleetContext.spaceId; + const { integrationName, force, datasets } = request.body; + + const res = await installPackage({ + installSource: 'custom', + savedObjectsClient, + pkgName: integrationName, + datasets, + esClient, + spaceId, + force, + authorizationHeader, + kibanaVersion, + }); + + if (!res.error) { + const body: InstallPackageResponse = { + items: res.assets || [], + _meta: { + install_source: res.installSource, + }, + }; + return response.ok({ body }); + } else { + return await defaultFleetErrorHandler({ error: res.error, response }); + } +}; const bulkInstallServiceResponseToHttpEntry = ( result: BulkInstallResponse diff --git a/x-pack/plugins/fleet/server/routes/epm/index.ts b/x-pack/plugins/fleet/server/routes/epm/index.ts index a2794f30b8bb2..8567e1b5686f7 100644 --- a/x-pack/plugins/fleet/server/routes/epm/index.ts +++ b/x-pack/plugins/fleet/server/routes/epm/index.ts @@ -43,6 +43,7 @@ import { UpdatePackageRequestSchemaDeprecated, ReauthorizeTransformRequestSchema, GetDataStreamsRequestSchema, + CreateCustomIntegrationRequestSchema, } from '../../types'; import { @@ -62,6 +63,7 @@ import { getVerificationKeyIdHandler, reauthorizeTransformsHandler, getDataStreamsHandler, + createCustomIntegrationHandler, } from './handlers'; const MAX_FILE_SIZE_BYTES = 104857600; // 100MB @@ -196,6 +198,17 @@ export const registerRoutes = (router: FleetAuthzRouter) => { installPackageByUploadHandler ); + router.post( + { + path: EPM_API_ROUTES.CUSTOM_INTEGRATIONS_PATTERN, + validate: CreateCustomIntegrationRequestSchema, + fleetAuthz: { + integrations: { installPackages: true }, + }, + }, + createCustomIntegrationHandler + ); + router.delete( { path: EPM_API_ROUTES.DELETE_PATTERN, diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/cache.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/cache.ts new file mode 100644 index 0000000000000..e44f6e2b522d7 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/cache.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { setArchiveEntry, setArchiveFilelist } from '../../../archive'; + +interface Assets { + path: string; + content: Buffer; +} +export const cacheAssets = (assets: Assets[], name: string, version: string) => { + const paths = assets.map((asset) => asset.path); + + setArchiveFilelist({ name, version }, paths); + + assets.forEach((asset) => { + setArchiveEntry(asset.path, asset.content); + }); + + return paths; +}; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/fields.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/fields.ts new file mode 100644 index 0000000000000..059edae2f1b6d --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/fields.ts @@ -0,0 +1,292 @@ +/* + * Copyright 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 yaml from 'js-yaml'; + +export const createBaseFields = () => { + const fields = [ + { name: 'data_stream.type', type: 'constant_keyword', description: 'Data stream type.' }, + { name: 'data_stream.dataset', type: 'constant_keyword', description: 'Data stream dataset.' }, + { + name: 'data_stream.namespace', + type: 'constant_keyword', + description: 'Data stream namespace.', + }, + { name: '@timestamp', type: 'date', description: 'Event timestamp.' }, + ]; + return yaml.dump(fields); +}; + +export const createAgentFields = () => { + const fields = [ + { + name: 'cloud', + title: 'Cloud', + group: 2, + description: 'Fields related to the cloud or infrastructure the events are coming from.', + footnote: + 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.', + type: 'group', + fields: [ + { + name: 'account.id', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: + 'The cloud account or organization id used to identify different entities in a multi-tenant environment.\nExamples: AWS account id, Google Cloud ORG Id, or other unique identifier.', + example: 666777888999, + }, + { + name: 'availability_zone', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: 'Availability zone in which this host is running.', + example: 'us-east-1c', + }, + { + name: 'instance.id', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: 'Instance ID of the host machine.', + example: 'i-1234567890abcdef0', + }, + { + name: 'instance.name', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: 'Instance name of the host machine.', + }, + { + name: 'machine.type', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: 'Machine type of the host machine.', + example: 't2.medium', + }, + { + name: 'provider', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: + 'Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean.', + example: 'aws', + }, + { + name: 'region', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: 'Region in which this host is running.', + example: 'us-east-1', + }, + { + name: 'project.id', + type: 'keyword', + description: 'Name of the project in Google Cloud.', + }, + { + name: 'image.id', + type: 'keyword', + description: 'Image ID for the cloud instance.', + }, + ], + }, + { + name: 'container', + title: 'Container', + group: 2, + description: + 'Container fields are used for meta information about the specific container that is the source of information.\nThese fields help correlate data based containers from any runtime.', + type: 'group', + fields: [ + { + name: 'id', + level: 'core', + type: 'keyword', + ignore_above: 1024, + description: 'Unique container id.', + }, + { + name: 'image.name', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: 'Name of the image the container was built on.', + }, + { + name: 'labels', + level: 'extended', + type: 'object', + object_type: 'keyword', + description: 'Image labels.', + }, + { + name: 'name', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: 'Container name.', + }, + ], + }, + { + name: 'host', + title: 'Host', + group: 2, + description: + 'A host is defined as a general computing instance.\nECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.', + type: 'group', + fields: [ + { + name: 'architecture', + level: 'core', + type: 'keyword', + ignore_above: 1024, + description: 'Operating system architecture.', + example: 'x86_64', + }, + { + name: 'domain', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: + "Name of the domain of which the host is a member.\nFor example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider.", + example: 'CONTOSO', + default_field: false, + }, + { + name: 'hostname', + level: 'core', + type: 'keyword', + ignore_above: 1024, + description: + 'Hostname of the host.\nIt normally contains what the `hostname` command returns on the host machine', + }, + { + name: 'id', + level: 'core', + type: 'keyword', + ignore_above: 1024, + description: + 'Unique host id.\nAs hostname is not always unique, use values that are meaningful in your environment.\nExample: The current usage of `beat.name`', + }, + { + name: 'ip', + level: 'core', + type: 'ip', + description: 'Host ip addresses.', + }, + { + name: 'mac', + level: 'core', + type: 'keyword', + ignore_above: 1024, + description: 'Host mac addresses.', + }, + { + name: 'name', + level: 'core', + type: 'keyword', + ignore_above: 1024, + description: + 'Name of the host.\nIt can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use', + }, + { + name: 'os.family', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: 'OS family (such as redhat, debian, freebsd, windows).', + example: 'debian', + }, + { + name: 'os.kernel', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: 'Operating system kernel version as a raw string.', + example: '4.4.0-112-generic', + }, + { + name: 'os.name', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + multi_fields: [ + { + name: 'text', + type: 'text', + norms: false, + default_field: false, + }, + ], + description: 'Operating system name, without the version.', + example: 'Mac OS X', + }, + { + name: 'os.platform', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: 'Operating system platform (such centos, ubuntu, windows).', + example: 'darwin', + }, + { + name: 'os.version', + level: 'extended', + type: 'keyword', + ignore_above: 1024, + description: 'Operating system version as a raw string.', + example: '10.14.1', + }, + { + name: 'type', + level: 'core', + type: 'keyword', + ignore_above: 1024, + description: + 'Type of host.\nFor Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment', + }, + { + name: 'containerized', + type: 'boolean', + description: 'If the host is a container.\n', + }, + { + name: 'os.build', + type: 'keyword', + example: '18D109', + description: 'OS build information.\n', + }, + { + name: 'os.codename', + type: 'keyword', + example: 'stretch', + description: 'OS codename, if any.\n', + }, + ], + }, + { + name: 'input.type', + type: 'keyword', + description: 'Input type', + }, + { + name: 'log.offset', + type: 'long', + description: 'Log offset', + }, + ]; + return yaml.dump(fields); +}; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/index.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/index.ts new file mode 100644 index 0000000000000..76a7a6f6a089f --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './fields'; +export * from './manifest'; +export * from './utils'; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/ingest_pipeline.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/ingest_pipeline.ts new file mode 100644 index 0000000000000..0021f395158e6 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/ingest_pipeline.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as yaml from 'js-yaml'; + +// NOTE: The install methods will take care of adding a reference to a @custom pipeline. We don't need to add one here. +export const createDefaultPipeline = (dataset: string, type: string) => { + const pipeline = { + processors: [ + { + set: { + description: "If '@timestamp' is missing, set it with the ingest timestamp", + field: '@timestamp', + override: false, + copy_from: '_ingest.timestamp', + }, + }, + ], + _meta: { + description: `default pipeline for the ${dataset} dataset`, + managed: true, + }, + }; + return yaml.dump(pipeline); +}; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/manifest.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/manifest.ts new file mode 100644 index 0000000000000..75b34867f6d07 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/manifest.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import * as yaml from 'js-yaml'; + +import { convertStringToTitle } from '../../utils'; +import type { AssetOptions } from '../generate'; + +export const createDatasetManifest = (dataset: string, assetOptions: AssetOptions) => { + const { format_version: formatVersion, type } = assetOptions; + const manifest = { + format_version: formatVersion, + dataset, + title: convertStringToTitle(dataset), + type, + }; + return yaml.dump(manifest); +}; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/utils.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/utils.ts new file mode 100644 index 0000000000000..b984b8cddbbd3 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/utils.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { CustomPackageDatasetConfiguration } from '../../../install'; + +export const generateDatastreamEntries = ( + datasets: CustomPackageDatasetConfiguration[], + packageName: string +) => { + return datasets.map((dataset) => { + const { name, type } = dataset; + return { + type, + dataset: `${packageName}.${name}`, + title: `Data stream for the ${packageName} custom integration, and ${name} dataset.`, + package: packageName, + path: name, + release: 'ga' as const, + // NOTE: This ensures our default.yml pipeline is used as the default_pipeline in the index template + ingest_pipeline: 'default', + }; + }); +}; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/generate.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/generate.ts new file mode 100644 index 0000000000000..a9063c76f7413 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/generate.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ArchivePackage } from '../../../../../../common'; + +import { pkgToPkgKey } from '../../../registry'; + +import type { CustomPackageDatasetConfiguration } from '../../install'; + +import { createAgentFields, createBaseFields, createDatasetManifest } from './dataset'; +import { createDefaultPipeline } from './dataset/ingest_pipeline'; +import { createManifest } from './manifest'; + +export type AssetOptions = ArchivePackage & { + kibanaVersion: string; + datasets: CustomPackageDatasetConfiguration[]; +}; + +// Mimic the use of an archive buffer via the same naming conventions +export const createAssets = (assetOptions: AssetOptions) => { + const { name, version, datasets } = assetOptions; + return [ + { + path: `${pkgToPkgKey({ name, version })}/manifest.yml`, + content: Buffer.from(createManifest(assetOptions)), + }, + ...datasets + .map((datasetConfiguration) => { + const { name: datasetName, type: datasetType } = datasetConfiguration; + return [ + { + path: `${pkgToPkgKey({ name, version })}/data_stream/${datasetName}/manifest.yml`, + content: Buffer.from(createDatasetManifest(datasetName, assetOptions)), + }, + // NOTE: buildDefaultSettings() will add a reference to the global ILM policy when + // building the index template based on the fields assets. + { + path: `${pkgToPkgKey({ + name, + version, + })}/data_stream/${datasetName}/fields/base-fields.yml`, + content: Buffer.from(createBaseFields()), + }, + { + path: `${pkgToPkgKey({ name, version })}/data_stream/${datasetName}/fields/agent.yml`, + content: Buffer.from(createAgentFields()), + }, + { + path: `${pkgToPkgKey({ + name, + version, + })}/data_stream/${datasetName}/elasticsearch/ingest_pipeline/default.yml`, + content: Buffer.from(createDefaultPipeline(datasetName, datasetType)), + }, + ]; + }) + .flat(), + ]; +}; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/index.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/index.ts new file mode 100644 index 0000000000000..a1e8ed713e97f --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './generate'; +export * from './manifest'; +export * from './dataset'; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/manifest.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/manifest.ts new file mode 100644 index 0000000000000..cf308f03db7dd --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/manifest.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import * as yaml from 'js-yaml'; + +import type { AssetOptions } from './generate'; + +export const createManifest = (assetOptions: AssetOptions) => { + const { + format_version: formatVersion, + name, + title, + description, + version, + owner, + kibanaVersion, + } = assetOptions; + + const manifest = { + format_version: formatVersion, + name, + title, + description, + version, + owner, + type: 'integration' as const, + conditions: { + kibana: { + version: kibanaVersion, + }, + }, + }; + + return yaml.dump(manifest); +}; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/constants.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/constants.ts new file mode 100644 index 0000000000000..89ef9105b5905 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/constants.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 const INITIAL_VERSION = '1.0.0'; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/index.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/index.ts new file mode 100644 index 0000000000000..8065d42e3bef2 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './assets'; +export * from './constants'; +export * from './utils'; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/utils.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/utils.ts new file mode 100644 index 0000000000000..d90c12d231f74 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/utils.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const convertStringToTitle = (name: string) => { + return name + .split('_') + .map((word) => { + return word[0].toUpperCase() + word.substring(1); + }) + .join(' '); +}; + +export const generateDescription = (datasetNames: string[]) => + `Collect logs for the datasets: ${datasetNames.join(', ')}`; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install.ts b/x-pack/plugins/fleet/server/services/epm/packages/install.ts index a911507b2aad8..2efb841b75f3b 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install.ts @@ -25,6 +25,8 @@ import { uniqBy } from 'lodash'; import type { LicenseType } from '@kbn/licensing-plugin/server'; +import type { PackageDataStreamTypes } from '../../../../common/types'; + import type { HTTPAuthorizationHeader } from '../../../../common/http_authorization_header'; import { isPackagePrerelease, getNormalizedDataStreams } from '../../../../common/services'; @@ -49,7 +51,11 @@ import type { PackageVerificationResult, RegistryDataStream, } from '../../../types'; -import { AUTO_UPGRADE_POLICIES_PACKAGES, DATASET_VAR_NAME } from '../../../../common/constants'; +import { + AUTO_UPGRADE_POLICIES_PACKAGES, + CUSTOM_INTEGRATION_PACKAGE_SPEC_VERSION, + DATASET_VAR_NAME, +} from '../../../../common/constants'; import { type FleetError, PackageOutdatedError, @@ -91,6 +97,11 @@ import { _installPackage } from './_install_package'; import { removeOldAssets } from './cleanup'; import { getBundledPackages } from './bundled_packages'; import { withPackageSpan } from './utils'; +import { convertStringToTitle, generateDescription } from './custom_integrations/utils'; +import { INITIAL_VERSION } from './custom_integrations/constants'; +import { createAssets } from './custom_integrations'; +import { cacheAssets } from './custom_integrations/assets/cache'; +import { generateDatastreamEntries } from './custom_integrations/assets/dataset/utils'; export async function isPackageInstalled(options: { savedObjectsClient: SavedObjectsClientContract; @@ -288,6 +299,21 @@ interface InstallRegistryPackageParams { prerelease?: boolean; authorizationHeader?: HTTPAuthorizationHeader | null; } + +export interface CustomPackageDatasetConfiguration { + name: string; + type: PackageDataStreamTypes; +} +interface InstallCustomPackageParams { + savedObjectsClient: SavedObjectsClientContract; + pkgName: string; + datasets: CustomPackageDatasetConfiguration[]; + esClient: ElasticsearchClient; + spaceId: string; + force?: boolean; + authorizationHeader?: HTTPAuthorizationHeader | null; + kibanaVersion: string; +} interface InstallUploadedArchiveParams { savedObjectsClient: SavedObjectsClientContract; esClient: ElasticsearchClient; @@ -424,7 +450,7 @@ function getElasticSubscription(packageInfo: ArchivePackage) { async function installPackageCommon(options: { pkgName: string; pkgVersion: string; - installSource: 'registry' | 'upload'; + installSource: 'registry' | 'upload' | 'custom'; installedPkg?: SavedObject; installType: InstallType; savedObjectsClient: SavedObjectsClientContract; @@ -659,6 +685,7 @@ export type InstallPackageParams = { | ({ installSource: Extract } & InstallRegistryPackageParams) | ({ installSource: Extract } & InstallUploadedArchiveParams) | ({ installSource: Extract } & InstallUploadedArchiveParams) + | ({ installSource: Extract } & InstallCustomPackageParams) ); export async function installPackage(args: InstallPackageParams): Promise { @@ -723,10 +750,72 @@ export async function installPackage(args: InstallPackageParams): Promise { + const { + savedObjectsClient, + esClient, + spaceId, + pkgName, + force, + authorizationHeader, + datasets, + kibanaVersion, + } = args; + + // Compose a packageInfo + const packageInfo = { + format_version: CUSTOM_INTEGRATION_PACKAGE_SPEC_VERSION, + name: pkgName, + title: convertStringToTitle(pkgName), + description: generateDescription(datasets.map((dataset) => dataset.name)), + version: INITIAL_VERSION, + owner: { github: authorizationHeader?.username ?? 'unknown' }, + type: 'integration' as const, + data_streams: generateDatastreamEntries(datasets, pkgName), + }; + + const assets = createAssets({ + ...packageInfo, + kibanaVersion, + datasets, + }); + + const paths = cacheAssets(assets, pkgName, INITIAL_VERSION); + + return await installPackageCommon({ + pkgName, + pkgVersion: INITIAL_VERSION, + installSource: 'custom', + installType: 'install', + savedObjectsClient, + esClient, + spaceId, + force, + packageInfo, + paths, + authorizationHeader, + }); +} + export const updateVersion = async ( savedObjectsClient: SavedObjectsClientContract, pkgName: string, diff --git a/x-pack/plugins/fleet/server/types/rest_spec/epm.ts b/x-pack/plugins/fleet/server/types/rest_spec/epm.ts index cecd177b0225b..09a20ebca45b2 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/epm.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/epm.ts @@ -194,6 +194,25 @@ export const InstallPackageByUploadRequestSchema = { body: schema.buffer(), }; +export const CreateCustomIntegrationRequestSchema = { + body: schema.object({ + integrationName: schema.string(), + datasets: schema.arrayOf( + schema.object({ + name: schema.string(), + type: schema.oneOf([ + schema.literal('logs'), + schema.literal('metrics'), + schema.literal('traces'), + schema.literal('synthetics'), + schema.literal('profiling'), + ]), + }) + ), + force: schema.maybe(schema.boolean()), + }), +}; + export const DeletePackageRequestSchema = { params: schema.object({ pkgName: schema.string(), diff --git a/x-pack/test/fleet_api_integration/apis/epm/index.js b/x-pack/test/fleet_api_integration/apis/epm/index.js index 2fa0c0c881a59..045626e95a740 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/index.js +++ b/x-pack/test/fleet_api_integration/apis/epm/index.js @@ -21,6 +21,7 @@ export default function loadTests({ loadTestFile, getService }) { loadTestFile(require.resolve('./ilm')); loadTestFile(require.resolve('./install_bundled')); loadTestFile(require.resolve('./install_by_upload')); + loadTestFile(require.resolve('./install_custom')); loadTestFile(require.resolve('./install_endpoint')); loadTestFile(require.resolve('./install_overrides')); loadTestFile(require.resolve('./install_prerelease')); diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_custom.ts b/x-pack/test/fleet_api_integration/apis/epm/install_custom.ts new file mode 100644 index 0000000000000..492d708da5ef7 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/epm/install_custom.ts @@ -0,0 +1,102 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { PACKAGES_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; + +import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; + +const INTEGRATION_NAME = 'my_custom_nginx'; +const INTEGRATION_VERSION = '1.0.0'; + +export default function (providerContext: FtrProviderContext) { + const { getService } = providerContext; + const supertest = getService('supertest'); + const kibanaServer = getService('kibanaServer'); + + const uninstallPackage = async () => { + await supertest + .delete(`/api/fleet/epm/packages/${INTEGRATION_NAME}/${INTEGRATION_VERSION}`) + .set('kbn-xsrf', 'xxxx'); + }; + + describe('Installing custom integrations', async () => { + afterEach(async () => { + await uninstallPackage(); + }); + + it("Correcty installs a custom integration and all of it's assets", async () => { + const response = await supertest + .post(`/api/fleet/epm/custom_integrations`) + .set('kbn-xsrf', 'xxxx') + .type('application/json') + .send({ + force: true, + integrationName: 'my_custom_nginx', + datasets: [ + { name: 'access', type: 'logs' }, + { name: 'error', type: 'metrics' }, + { name: 'warning', type: 'logs' }, + ], + }) + .expect(200); + + const expectedIngestPipelines = [ + 'logs-my_custom_nginx.access-1.0.0', + 'metrics-my_custom_nginx.error-1.0.0', + 'logs-my_custom_nginx.warning-1.0.0', + ]; + const expectedIndexTemplates = [ + 'logs-my_custom_nginx.access', + 'metrics-my_custom_nginx.error', + 'logs-my_custom_nginx.warning', + ]; + const expectedComponentTemplates = [ + 'logs-my_custom_nginx.access@package', + 'logs-my_custom_nginx.access@custom', + 'metrics-my_custom_nginx.error@package', + 'metrics-my_custom_nginx.error@custom', + 'logs-my_custom_nginx.warning@package', + 'logs-my_custom_nginx.warning@custom', + ]; + + expect(response.body._meta.install_source).to.be('custom'); + + const actualIngestPipelines = response.body.items + .filter((item: any) => item.type === 'ingest_pipeline') + .map((pipeline: any) => pipeline.id); + + const actualIndexTemplates = response.body.items + .filter((item: any) => item.type === 'index_template') + .map((template: any) => template.id); + + const actualComponentTemplates = response.body.items + .filter((item: any) => item.type === 'component_template') + .map((template: any) => template.id); + + expectedIngestPipelines.forEach((pipeline) => { + expect(actualIngestPipelines).to.contain(pipeline); + }); + expectedIndexTemplates.forEach((template) => { + expect(actualIndexTemplates).to.contain(template); + }); + expectedComponentTemplates.forEach((template) => { + expect(actualComponentTemplates).to.contain(template); + }); + + const installation = await kibanaServer.savedObjects.get({ + type: PACKAGES_SAVED_OBJECT_TYPE, + id: INTEGRATION_NAME, + }); + + expect(installation.attributes.name).to.be(INTEGRATION_NAME); + expect(installation.attributes.version).to.be(INTEGRATION_VERSION); + expect(installation.attributes.install_source).to.be('custom'); + expect(installation.attributes.install_status).to.be('installed'); + }); + }); +} From c8a451e45a6443263cc8807826dcb64a029f7591 Mon Sep 17 00:00:00 2001 From: jennypavlova Date: Thu, 13 Jul 2023 12:13:53 +0200 Subject: [PATCH 21/50] [Infra UI] Test fix: add retry to metadata remove pin button check after refresh (#161736) Closes #161514 ## Summary This PR fixes the flyout test, it seems there was a timeout before the check (in the screenshot is visible that the button is there so could be that the check happened before the loading finished) I added a retry there. --- x-pack/test/functional/apps/infra/hosts_view.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/x-pack/test/functional/apps/infra/hosts_view.ts b/x-pack/test/functional/apps/infra/hosts_view.ts index 0e417d6306c5b..1cb551fa91247 100644 --- a/x-pack/test/functional/apps/infra/hosts_view.ts +++ b/x-pack/test/functional/apps/infra/hosts_view.ts @@ -154,8 +154,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { return !!currentUrl.match(path); }); - // Failing: See https://github.com/elastic/kibana/issues/161514 - describe.skip('Hosts View', function () { + describe('Hosts View', function () { before(async () => { await Promise.all([ esArchiver.load('x-pack/test/functional/es_archives/infra/alerts'), @@ -309,8 +308,11 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { // Persist pin after refresh await browser.refresh(); - await pageObjects.infraHome.waitForLoading(); - expect(await pageObjects.infraHostsView.getRemovePinExist()).to.be(true); + await retry.try(async () => { + await pageObjects.infraHome.waitForLoading(); + const removePinExist = await pageObjects.infraHostsView.getRemovePinExist(); + expect(removePinExist).to.be(true); + }); // Remove Pin await pageObjects.infraHostsView.clickRemoveMetadataPin(); From 808c28dd8eeb8f5fb0916c9944266bc8ebdf0302 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Thu, 13 Jul 2023 12:22:02 +0200 Subject: [PATCH 22/50] Migrate from deprecated EUI components (#161548) ## Summary Fix https://github.com/elastic/kibana/issues/161424 Migrate away from deprecated EUI components for Core-owned code. Note: I only tested the production (and examples) pages properly, I didn't make sure the test plugins where displayed correctly, as long as the data structure was still here for the tests to pass. ### Screenshots #### Status page Screenshot 2023-07-10 at 17 14 24 #### AppNotFound page Screenshot 2023-07-10 at 17 14 40 #### Generated plugin landing page Screenshot 2023-07-10 at 17 15 44 --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- examples/preboot_example/public/app.tsx | 266 +++++++++--------- examples/routing_example/public/app.tsx | 28 +- .../src/ui/app_not_found_screen.tsx | 55 ++-- .../src/errors/error_application.tsx | 27 +- .../src/status/components/status_section.tsx | 12 +- .../src/status/components/version_header.tsx | 11 +- .../fatal_errors_screen.test.tsx.snap | 8 +- .../src/fatal_errors_screen.tsx | 8 +- .../template/public/components/app.tsx.ejs | 110 ++++---- .../public/app/components/main.tsx | 13 +- .../core_app_status/public/application.tsx | 23 +- .../core_plugin_a/public/application.tsx | 47 ++-- .../public/application.tsx | 23 +- .../core_plugin_b/public/application.tsx | 51 ++-- .../public/application.tsx | 23 +- .../public/application.tsx | 65 ++--- .../public/application.tsx | 23 +- 17 files changed, 346 insertions(+), 447 deletions(-) diff --git a/examples/preboot_example/public/app.tsx b/examples/preboot_example/public/app.tsx index 10d5cfd57a06e..2c80565f259ea 100644 --- a/examples/preboot_example/public/app.tsx +++ b/examples/preboot_example/public/app.tsx @@ -12,7 +12,7 @@ import { EuiFieldText, EuiFlexGroup, EuiFlexItem, - EuiPageTemplate_Deprecated as EuiPageTemplate, + EuiPageTemplate, EuiPanel, EuiText, } from '@elastic/eui'; @@ -73,147 +73,139 @@ export const App = ({ http, token }: { http: HttpSetup; token?: string }) => { if (!isSetupModeActive) { return ( - - - Kibana server is not ready yet. - + + + + + Kibana server is not ready yet. + + ); } return ( - - - - - - - { - setConfigKeyValue({ ...configKeyValue, key: e.target.value }); - }} - /> - - - { - setConfigKeyValue({ ...configKeyValue, value: e.target.value }); - }} - /> - - - - Write config - - - - - - - - Token from config: {token} - - - onCompleteSetup({ shouldReloadConfig: true })} - > - Reload config and proceed to `setup` - - - - onCompleteSetup({ shouldReloadConfig: false })} - > - DO NOT reload config and proceed to `setup` - - - - - - - - { - setElasticsearchConfig({ ...elasticsearchConfig, host: e.target.value }); - }} - /> - - - { - setElasticsearchConfig({ - ...elasticsearchConfig, - username: e.target.value, - }); - }} - /> - - - { - setElasticsearchConfig({ - ...elasticsearchConfig, - password: e.target.value, - }); - }} - /> - - - - Connect - - - - - - - {connectResponse ?? ''} - - - - + + + + + + + + + { + setConfigKeyValue({ ...configKeyValue, key: e.target.value }); + }} + /> + + + { + setConfigKeyValue({ ...configKeyValue, value: e.target.value }); + }} + /> + + + + Write config + + + + + + + + Token from config: {token} + + + onCompleteSetup({ shouldReloadConfig: true })} + > + Reload config and proceed to `setup` + + + + onCompleteSetup({ shouldReloadConfig: false })} + > + DO NOT reload config and proceed to `setup` + + + + + + + + { + setElasticsearchConfig({ ...elasticsearchConfig, host: e.target.value }); + }} + /> + + + { + setElasticsearchConfig({ + ...elasticsearchConfig, + username: e.target.value, + }); + }} + /> + + + { + setElasticsearchConfig({ + ...elasticsearchConfig, + password: e.target.value, + }); + }} + /> + + + + Connect + + + + + + + {connectResponse ?? ''} + + + + + ); }; diff --git a/examples/routing_example/public/app.tsx b/examples/routing_example/public/app.tsx index 51389ae913424..eb9589919d2ab 100644 --- a/examples/routing_example/public/app.tsx +++ b/examples/routing_example/public/app.tsx @@ -10,12 +10,10 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { AppMountParameters } from '@kbn/core/public'; import { - EuiPage, - EuiPageBody, - EuiPageContent_Deprecated as EuiPageContent, + EuiPageTemplate, + EuiPageSection, EuiText, EuiHorizontalRule, - EuiPageContentHeader_Deprecated as EuiPageContentHeader, EuiListGroup, } from '@elastic/eui'; import { RandomNumberRouteExample } from './random_number_example'; @@ -34,14 +32,14 @@ function RoutingExplorer({ getMessageById, }: Props) { return ( - - - - - -

Routing examples

-
-
+ + + +

Routing examples

+
+
+ + -
-
-
+ + +
); } diff --git a/packages/core/application/core-application-browser-internal/src/ui/app_not_found_screen.tsx b/packages/core/application/core-application-browser-internal/src/ui/app_not_found_screen.tsx index b986afd988d5b..6842a675dc0da 100644 --- a/packages/core/application/core-application-browser-internal/src/ui/app_not_found_screen.tsx +++ b/packages/core/application/core-application-browser-internal/src/ui/app_not_found_screen.tsx @@ -6,40 +6,31 @@ * Side Public License, v 1. */ -import { - EuiEmptyPrompt, - EuiPage, - EuiPageBody, - EuiPageContent_Deprecated as EuiPageContent, -} from '@elastic/eui'; +import { EuiPageTemplate } from '@elastic/eui'; import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; export const AppNotFound = () => ( - - - - - - - } - body={ -

- -

- } - /> -
-
-
+ + + + + } + body={ +

+ +

+ } + /> +
); diff --git a/packages/core/apps/core-apps-browser-internal/src/errors/error_application.tsx b/packages/core/apps/core-apps-browser-internal/src/errors/error_application.tsx index 32a3d83d40413..02ef568f18302 100644 --- a/packages/core/apps/core-apps-browser-internal/src/errors/error_application.tsx +++ b/packages/core/apps/core-apps-browser-internal/src/errors/error_application.tsx @@ -12,12 +12,7 @@ import type { History } from 'history'; import { i18n } from '@kbn/i18n'; import { I18nProvider } from '@kbn/i18n-react'; -import { - EuiEmptyPrompt, - EuiPage, - EuiPageBody, - EuiPageContent_Deprecated as EuiPageContent, -} from '@elastic/eui'; +import { EuiPageTemplate } from '@elastic/eui'; import { CoreThemeProvider } from '@kbn/core-theme-browser-internal'; import type { IBasePath } from '@kbn/core-http-browser'; import type { AppMountParameters } from '@kbn/core-application-browser'; @@ -36,18 +31,14 @@ const ErrorPage: React.FC = ({ title, children }) => { }); return ( - - - - {title}} - body={children} - /> - - - + + {title}} + body={children} + /> + ); }; diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/status_section.tsx b/packages/core/apps/core-apps-browser-internal/src/status/components/status_section.tsx index 15a5f65be59b1..afceaccc76b98 100644 --- a/packages/core/apps/core-apps-browser-internal/src/status/components/status_section.tsx +++ b/packages/core/apps/core-apps-browser-internal/src/status/components/status_section.tsx @@ -7,13 +7,7 @@ */ import React, { FC, useMemo } from 'react'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiPageContent_Deprecated as EuiPageContent, - EuiSpacer, - EuiTitle, -} from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiTitle, EuiPanel } from '@elastic/eui'; import { StatusTable } from './status_table'; import { FormattedStatus, getHighestStatus } from '../lib'; import { StatusBadge } from './status_badge'; @@ -28,7 +22,7 @@ export const StatusSection: FC = ({ id, title, statuses }) = const highestStatus = useMemo(() => getHighestStatus(statuses), [statuses]); return ( - + @@ -41,6 +35,6 @@ export const StatusSection: FC = ({ id, title, statuses }) = - +
); }; diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.tsx b/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.tsx index 81b76f771cda1..6eeb78cacd9d3 100644 --- a/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.tsx +++ b/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.tsx @@ -7,12 +7,7 @@ */ import React, { FC } from 'react'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiPageContent_Deprecated as EuiPageContent, - EuiText, -} from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiPanel, EuiText } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import type { ServerVersion } from '@kbn/core-status-common-internal'; @@ -23,7 +18,7 @@ interface VersionHeaderProps { export const VersionHeader: FC = ({ version }) => { const { build_hash: buildHash, build_number: buildNumber, number } = version; return ( - + @@ -65,6 +60,6 @@ export const VersionHeader: FC = ({ version }) => { - +
); }; diff --git a/packages/core/fatal-errors/core-fatal-errors-browser-internal/src/__snapshots__/fatal_errors_screen.test.tsx.snap b/packages/core/fatal-errors/core-fatal-errors-browser-internal/src/__snapshots__/fatal_errors_screen.test.tsx.snap index a2163e2b4c4e9..48caf45f0b0f1 100644 --- a/packages/core/fatal-errors/core-fatal-errors-browser-internal/src/__snapshots__/fatal_errors_screen.test.tsx.snap +++ b/packages/core/fatal-errors/core-fatal-errors-browser-internal/src/__snapshots__/fatal_errors_screen.test.tsx.snap @@ -4,14 +4,14 @@ exports[`FatalErrorsScreen rendering render matches snapshot 1`] = ` - - + `; diff --git a/packages/core/fatal-errors/core-fatal-errors-browser-internal/src/fatal_errors_screen.tsx b/packages/core/fatal-errors/core-fatal-errors-browser-internal/src/fatal_errors_screen.tsx index a7f274920694f..69ed16c0377b0 100644 --- a/packages/core/fatal-errors/core-fatal-errors-browser-internal/src/fatal_errors_screen.tsx +++ b/packages/core/fatal-errors/core-fatal-errors-browser-internal/src/fatal_errors_screen.tsx @@ -14,7 +14,7 @@ import { EuiEmptyPrompt, EuiPage, EuiPageBody, - EuiPageContent_Deprecated as EuiPageContent, + EuiPageSection, } from '@elastic/eui'; import React from 'react'; import { Observable, Subscription, merge, tap, fromEvent } from 'rxjs'; @@ -75,9 +75,9 @@ export class FatalErrorsScreen extends React.Component { public render() { return ( - + - + { ))} - + ); diff --git a/packages/kbn-plugin-generator/template/public/components/app.tsx.ejs b/packages/kbn-plugin-generator/template/public/components/app.tsx.ejs index 12303d9ff0465..5702d69fba3b6 100644 --- a/packages/kbn-plugin-generator/template/public/components/app.tsx.ejs +++ b/packages/kbn-plugin-generator/template/public/components/app.tsx.ejs @@ -2,23 +2,15 @@ import React, { useState } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage, I18nProvider } from '@kbn/i18n-react'; import { BrowserRouter as Router } from '@kbn/shared-ux-router'; - - import { EuiButton, EuiHorizontalRule, - EuiPage, - EuiPageBody, - EuiPageContent_Deprecated as EuiPageContent, - EuiPageContentBody_Deprecated as EuiPageContentBody, - EuiPageContentHeader_Deprecated as EuiPageContentHeader, - EuiPageHeader, + EuiPageTemplate, EuiTitle, EuiText, } from '@elastic/eui'; - -import { CoreStart } from '<%= importFromRoot('src/core/public') %>'; -import { NavigationPublicPluginStart } from '<%= importFromRoot('src/plugins/navigation/public') %>'; +import type { CoreStart } from '@kbn/core/public'; +import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; import { PLUGIN_ID, PLUGIN_NAME } from '../../common'; @@ -56,57 +48,51 @@ export const <%= upperCamelCase(name) %>App = ({ basename, notifications, http, <> - - - - -

- -

-
-
- - - -

- -

-
-
- - -

- -

- -

- -

- - - -
-
-
-
-
+ + + +

+ +

+
+
+ + +

+ +

+
+ +

+ +

+ +

+ +

+ + + +
+
+
diff --git a/test/interpreter_functional/plugins/kbn_tp_run_pipeline/public/app/components/main.tsx b/test/interpreter_functional/plugins/kbn_tp_run_pipeline/public/app/components/main.tsx index 353f1b71c2261..60db69514f81f 100644 --- a/test/interpreter_functional/plugins/kbn_tp_run_pipeline/public/app/components/main.tsx +++ b/test/interpreter_functional/plugins/kbn_tp_run_pipeline/public/app/components/main.tsx @@ -8,12 +8,7 @@ import './main.scss'; import React from 'react'; -import { - EuiPage, - EuiPageBody, - EuiPageContent_Deprecated as EuiPageContent, - EuiPageContentHeader_Deprecated as EuiPageContentHeader, -} from '@elastic/eui'; +import { EuiPage, EuiPageBody, EuiPageSection, EuiPageHeader } from '@elastic/eui'; import { first, pluck } from 'rxjs/operators'; import { IInterpreterRenderHandlers, ExpressionValue } from '@kbn/expressions-plugin/public'; import { ExpressionRenderHandler } from '../../types'; @@ -89,11 +84,11 @@ class Main extends React.Component<{}, State> { return ( - - runPipeline tests are running ... + + runPipeline tests are running ...
{this.state.expression}
- + ); diff --git a/test/plugin_functional/plugins/core_app_status/public/application.tsx b/test/plugin_functional/plugins/core_app_status/public/application.tsx index f82a558f3a471..3ea989dfbf1d2 100644 --- a/test/plugin_functional/plugins/core_app_status/public/application.tsx +++ b/test/plugin_functional/plugins/core_app_status/public/application.tsx @@ -11,10 +11,7 @@ import { render, unmountComponentAtNode } from 'react-dom'; import { EuiPage, EuiPageBody, - EuiPageContent_Deprecated as EuiPageContent, - EuiPageContentBody_Deprecated as EuiPageContentBody, - EuiPageContentHeader_Deprecated as EuiPageContentHeader, - EuiPageContentHeaderSection_Deprecated as EuiPageContentHeaderSection, + EuiPageSection, EuiPageHeader, EuiPageHeaderSection, EuiTitle, @@ -32,16 +29,14 @@ const AppStatusApp = ({ appId }: { appId: string }) => ( - - - - -

{appId} Test App home page section title

-
-
-
- {appId} Test App content -
+ + + +

{appId} Test App home page section title

+
+
+ {appId} Test App content +
); diff --git a/test/plugin_functional/plugins/core_plugin_a/public/application.tsx b/test/plugin_functional/plugins/core_plugin_a/public/application.tsx index a896e918f4d53..6c1440c10abf2 100644 --- a/test/plugin_functional/plugins/core_plugin_a/public/application.tsx +++ b/test/plugin_functional/plugins/core_plugin_a/public/application.tsx @@ -15,13 +15,10 @@ import { Router, Route } from '@kbn/shared-ux-router'; import { EuiPage, EuiPageBody, - EuiPageContent_Deprecated as EuiPageContent, - EuiPageContentBody_Deprecated as EuiPageContentBody, - EuiPageContentHeader_Deprecated as EuiPageContentHeader, - EuiPageContentHeaderSection_Deprecated as EuiPageContentHeaderSection, + EuiPageSection, EuiPageHeader, EuiPageHeaderSection, - EuiPageSideBar_Deprecated as EuiPageSideBar, + EuiPageSidebar, EuiTitle, EuiSideNav, } from '@elastic/eui'; @@ -37,16 +34,14 @@ const Home = () => ( - - - - -

Bar home page section title

-
-
-
- Wow what a home page this is! -
+ + + +

Bar home page section title

+
+
+ Wow what a home page this is! +
); @@ -59,16 +54,14 @@ const PageA = () => ( - - - - -

Page A section title

-
-
-
- Page A's content goes here -
+ + + +

Page A section title

+
+
+ Page A's content goes here +
); @@ -109,9 +102,9 @@ const Nav = withRouter(({ history, navigateToApp }: NavProps) => ( const FooApp = ({ history, coreStart }: { history: History; coreStart: CoreStart }) => ( - +